Pardus’ta AKIS Akıllı Kart Kullanarak Kimlik Doğrulama Hikayesi

Pardus ve benzeri Debian tabanlı işletim sistemlerinde PAM(Pluggable Authentication Module) bir kimlik doğrulama çatısı olarak olarak kullanılmaktadır. Bu kimlik doğrulama çatısının içerisinde ortak veya parçalı olarak doğrulamanın yapılabileceği bir yapı vardır. “/etc/pam.d” altında bunları görebilirsiniz.

Burada Akis 1.2.2 versiyonu için PAM’in PKCS#11 modulünü kullanarak ortak kimlik doğrulama işlerini akıllı karta yükleyeceğiz. Bunu yaparak 2F kimlik doğrulama sağlayabiliriz, sistemimizi bir kademe daha güvenli hale getirebiliriz.

Bu işin bir hikayesi var. Bu yazıda hikayesini anlatacağım. Bir sonraki yazımda ise doğrudan çözümü anlatacağım.

Öncelikle daha önce herhangi bir akıllı kart kullanarak bu tarz bir iş yapanlar nasıl yapmış diye internet taraması yaptım. Tahmin edileceği üzere çok fazla örnek buldum.

İlk iş olarak, repo’dan libpam-pkcs11 paketini çektim. Paket kurulduktan sonra bir ayar dizini oluşturdum. pam_pkcs11.conf isminde örnek dosyayı ayar dizinine attım. Sertifika ve iptal listelerini güzel bir şekilde yerleştirdim.

Ayar dosyasına da kendime özel değerleri yazdım. Sistem hemen hemen hazırdı.

Son olarak /etc/pam.d içerisindeki ortak kimlik doğrulama servisinin ayar dosyasını Akis ile login isteyecek şekilde değiştirdim ve denedim. Sonuç başarısızdı. Akıllı kartı kullanarak login olamıyordum. Tüm ayarlamaları doğru yaptığıma emin olduktan sonra pam_pkcs11’in ayar dosyasındaki debug ile ilgili olan kısımların hepsini açtım. Çıkan sonuç aşağıdaki gibiydi:

Modül sertifika arıyor fakat bulamıyordu. Hemen pam_pkcs11’in kaynak kodunu Github’dan indirdim ve incelemeye başladım. İlk baktığım yer doğal olarak sertifikanın bulunamadığı bilgisini bana gösteren pkcs11_lib.c’nin 1612. satırı oldu. Tam olarak orada olmasa da yakınlarında bu bilgilendirme yazısını dönen bir satır buldum.

Biraz öncesinde sertifikayı bulamadığı bir yer olmalıydı. Onu da buldum fakat herhangi bir gariplik gözükmüyordu. Normal bir pkcs11 fonksiyonu çağrılmıştı.

Görüldüğü gibi CKO_CERTIFICATE özniteliğiyle sertifika objesi aranırken, CKC_X_509 özniteliğiyle de sertifika tipi belirtiliyordu. Nihayetinde bir while döngüsü içerisinde bu sertifikalar bulunuyor ve bir listeye ekleniyordu. Obje sayısı 0 olunca da döngüden çıkılıyordu. Benim durumumda object_count zaten sıfır olduğundan while döngüsü tamamlanamadan çıkılıyor ve ekrana sertifika bulunamadığı logu düşüyordu.

Benim akıllı kartımın içerisinde X.509 sertifikası olduğu netti. Akis’in akıllı kart uygulamasından bunu net bir şekilde görebiliyordum. Sorunu küçük bir uzayda incelemeye karar verdim. Kodu çalışır hale getirdim. X.509 sertifikası değil de sadece sertifika objesi arattırdım. Akis, içerisinde iki adet sertifika nesnesi buldu. Düğüm çözülüyor gibiydi. Sonra arattırdığım bu sertifika nesnelerinin tipini C_GetAttributeValue fonksiyonunu kullanarak aldım. Sertifikaların tipi X.509’du.

Yani Akis iki öznitelikle arama yapıldığında hatalı bir sonuç dönmemesine rağmen nesne sayısını doğru şekilde dönemiyordu. Sorun çözülmüştü. Hemen kodu hem Akis’te hem de başka akıllı kartlarda sorun çıkarmayacak şekilde değiştirdim. Değişikleri “https://github.com/omeryildiz/pam_pkcs11/blob/master/src/common/pkcs11_lib.c” adresinden görebilirsiniz. Orada önce sadece sertifika aratıyorum. Sonra while döngüsü içerisinde sertifikaların X.509 olup olmadığını kontrol ediyorum.

 

 

Ve sonuç:

 

Not: Bu arada Synaptic Paket Yöneticisi’ni çalıştırmak için yetkilendirmeye gerek yok. Kimlik doğrulama yeterli. Türkçe çevirisi yanlış yapılmış.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir