PAM (Eklemlenebilen Kimlik Kanıtlama Modülleri)

Eyl 06, 2013

PAM (Pluggable Authentication Modules), servislere göre farklı kimlik denetleme yöntemleri belirleyebilmeyi sağlayan bir sistemdir. Eski Linux sistemlerde “su”,” login”, “passwd” gibi bir program kullanıcının kimlik doğrulamasını yapmak istediğinde gerekli bilgiye /etc/passwd altındaki dosyadan ulaşırdı. Bu sistem basit olmakla birlikte yeni gelişen teknolojiler için sorun oluşturmaktaydı. Kimlik denetimindeki gelişmeler ve yeni şifreleme metotları nedeniyle kullanıcı kimlik denetimine ihtiyaç duyan her program için ayrı ayrı kimlik kanıtlama şemasının değiştirilmesi ve yeniden derlenmesi gerekmekteydi. Kullanıcı bilgilerinin nasıl saklandığından bağımsız olarak, programların kimlik doğrulamalarını şeffaf bir şekilde yaparak; bu karışıklığın önüne PAM modülüyle geçilmiştir.

PAM, iki bileşenden oluşmaktadır. Bileşenlerinden biri API ( Application Programming Interface - Uygulama Programlama Arayüzü ) sağlarken diğeri de kimlik denetimini gerçekleştirir. PAM modülleri 4 farklı görev için kullanılmaktadır. Bu görevler kimlik denetim yönetimi, hesap yönetimi, oturum yönetimi ve şifre yönetimi görevleridir. PAM modülleri /lib/security dizini altında bulunmaktadır.

      

 PAM yapılandırması iki şekilde olur.

  • Her servis için farklı bir yapılandırma dosyası tutulur. Bu durumda her servis için ayrı olan yapılandırma dosyaları /etc/pam.d dizini altında olmalıdır.

         

  • Tüm yapılandırma tek bir dosyada tutulur ve bu dosya /etc/pam.conf dosyasıdır. Bu dosyanın yapısı şu sekilde olmalıdır:

 modül-tipi kontrol-bayrağı modül-dosyasının-yeri modüle-gönderilecek-argümanlar

  1.  PAM Module Type (Modül Tipi): PAM modülleri dört farklı görev için kullanılırlar ve dört tane modül tipi vardır.

    • Auth: Kimlik denetimini gerçekler. Yazılan kullanıcının, gerçekliğini denetler.
    • Account: "Auth" modülünün görev aldığı kimlik denetimi dışında kalan hesap yönetim işlemleri ile uğraşır. Kullanıcının sisteme girebileceği saatlerin belirlenmesi, bir kullanıcının en fazla kaç oturum açabileceği gibi bilgileri kontrol eder. Kullanıcının servise erişmeye izni olup olmadığını, parolasının süresinin geçip geçmediğini tespit eder.
    • Session: Kullanıcının oturumu sırasında ve oturum sonrasında yapılması gereken rutin işlemleri kontrol eder. Rutin işler giriş ve çıkış bilgilerinin kaydedilmesi, gerekli dizinlerin "mount" edilmesi gibi işlerdir.
    • Passwd: Kullanıcının kimlik denetimi verilerinin güncellenmesini denetler, kullanıcının kimlik kanıtlaması için kullandığı parolayı değiştirmesi için bir mekanizma sağlar.

  2. PAM Control Flags (Kontrol Bayrağı - Denetim): Modülün çıkış değerinin genel sonucu nasıl etkilemesi gerektiği bilgisini içerir. PAM'e bir modül kimlik kanıtlamasında başarısız olduğunda ne yapması gerektiğini söyler.

    • Required: PAM kimlik kanıtlamasını reddetmeden önce bu servis için listelenmiş diğer modülleri denemeye devam etse de; sonuç kimlik kanıtlamasının reddi ile başarısızlık olur.
    • Requisite: "required" seçeneğinden  farklı olarak, eğer bir modül başarısız olursa işlemin başarısız olduğu uygulamaya hemen bildirilir. Derhâl reddedilir.
    • Sufficient: "Sufficient", kontrol bayrağına sahip bir modül başarılı olduğu takdirde, önceki modüllerde başarısız olsa bile, işlemin başarılı olduğu uygulamaya bildirilir.
    • Optional: "Optional" kontrol bayrağına sahip bir modülün başarısı veya başarısızlığı işlemin başarısını etkilememektedir.

  3. PAM Module Paths (Modül Dosyasının Yeri): PAM modülünün sistem içindeki yerini, dizinini belirtir. PAM, hangi modülü kullanacağını ve modülleri nerede bulacağını burada verilen yol sayesinde bilir. Çoğu yapılandırma sadece modülün adını içerir. Böyle durumlarda, PAM öntanımlı PAM modül dizinine bakar, bu normalde /usr/lib/security dizinidir. Bununla birlikte; eğer linux dağıtımı Dosya sistemi Hiyerarşisi Standardına (FHS - Filesystem Hiearchy Standard) uygun ise; PAM modülleri /lib/security dizininde bulunur.

  4. PAM Arguments (Modül Argümanları): Modüle gönderilecek olan argümanlar, modüllerin parametreleridir. Her modülün, kendi parametresi vardır. Örnek olarak; en çok kullanılan modüller şu şekilde sıralanabilir.

    • pam_unix.so temel kimlik kanıtlama modülüdür.  Bu modüle “null ok” parametresi gönderilirse, boş parola geçerli anlamına gelir.
    • pam_warn.so sistem günlüklerine uyarı mesajı kaydeder.
    • pam_deny.so kimlik denetimini reddeder.
    • pam_rootok.so kimlik denetimi yapılırken kullanıcının root olup olmadığını kontrol eder.
    • pam_securetty.so  kullanıcının güvenli konsola oturum açtığından emin olmayı sağlar.
    • pam_lastlog.so  kullanıcının en son açtığı oturum ile ilgili bilgileri getiren modüldür.

Kimlik Kanıtlama Modüllerinin Uygulamaları

Su Komutunun Engellenmesi


Linux işletim sistemlerinde root yetkisi almayı sağlayan “su” komutu /etc/pam.d altındaki su dosyasında yapılan değişikliklerle kısıtlanabilir.

# vim /etc/pam.d/su komutu ile bu dosya düzenlenebilir.

Su dosyasının içerisindeki; su komutunun çalışmasının sağlayan satırın önündeki yorum işareti kaldırılırsa, su komutu çalıştırma izni sadece "wheel" grubundaki kullanıcılara verilmiş olur. Wheel grubu "su" komutunu kullnamaya izinleri olan kullanıcıların oluşturduğu bir gruptur. Bazı işletim sistemlerinde "wheel" grubu bulanmamaktadır, bu gibi durumlarda /etc/groups altında wheel isimli bir grup yaratılmalı ve su komutunun izinleri sadece wheel grubunun kullanabileceği şekilde güncellenmelidir. Düzenleme yapılacak olan satır şu şekildedir: 

#auth    required    pam_wheel.so use_uid

Sudo Komutunun Engellenmesi

Linux işletim sistemlerinde root olarak eylem yapabilmeyi sağlayan sudo komutu /etc altındaki "sudoers" dosyasında yapılan değişikliklerle engellenebilir.

# vim /etc/sudoers komutu ile dosya düzenlenebilir.

Sudoers dosyasının içerisindeki; sudo komutunun çalışmasını sağlayan aşağıdaki satırın önündeki yorum işareti kaldırılırsa, sudo komutunun çalıştırma izni sadece "wheel" grubundaki kullanıcılara verilmiş olur. Satırda bulunan parametrelere göre komutun hangi kullanıcılara yasaklanacağı belirlenebilir.

# wheel    ALL=(ALL)    ALL 

Kullanılan linux dağıtımında böyle bir yorum satırı olmayabilir, böyle durumlarda satır dosyaya eklenmelidir.