PAM (Eklenebilir Kimlik Kanıtlama Modülleri)

Eklenebilir kimlik kanıtlama modülleri tüm modern linux dağıtımlarında kimlik kanıtlamanın esasını oluşturur.

Neden

Linux'un eski güzel günlerinde su, passwd, login ya da xlock gibi bir program bir kullanıcının kimlik doğrulamasını yapmak istediğinde gerekli bilgiyi basitçe /etc/passwd dosyasından okurdu. Kullanıcının parolasını değiştirmek için /etc/passwd dosyasını düzenlemek yeterliydi. Bu basit ama beceriksiz yöntem sistem yöneticileri ve uygulama geliştiricilerini problemlerle karşı karşıya bırakıyordu. MD5 ve gölgelenmiş parolalar popüler oldukça kullanıcı kimlik kanıtlamasına ihtiyaç duyan her programın doğru bilgiyi hangi yöntemle alacağını bilmesi gerekliliği ortaya çıktı. Kullanıcı kimlik kanıtlaması şemanızı değiştirmek isterseniz tüm programları yeniden derlemeniz gerekliydi. PAM bu karmaşayı kullanıcı bilgisinin nasıl saklandığından bağımsız olarak, programların kimlik kanıtlamasını şeffaf bir biçimde yapmalarına izin vererek ortadan kaldırdı.

Nedir

Linux-PAM Sistem Yöneticisinin Kılavuzu'ndan alıntı: ←Linux-PAM projesinin amacı ayrıcalık verme yazılımları ile güvenli ve uygun kimlik kanıtlama şemalarının gelişimini birbirinden ayırmaktır. Bu, uygulamaların kimlik kanıtlamasında kullanabilecekleri bir fonksiyonlar kütüphanesi sağlanarak gerçekleştirilir.→ PAM sayesinde parolalarınızı /etc/passwd dosyasında veya Hong Kong'daki bir sunucuda tutmanız farketmez. Bir program kullanıcı kimlik kanıtlamasına ihtiyaç duyduğunda, PAM uygun kimlik kanıtlama şeması için fonksiyonları içeren bir kütüphane sunar. Bu kütüphane dinamik olarak yüklendiği için kimlik kanıtlama şemasını değiştirmek için basitçe yapılandırma dosyasını düzenlemek yeterli olur.

Esneklik PAM'in en önemli güçlerinden birisidir. PAM belirli programların kullanıcı kimlik kanıtlaması yapamayacağı, sadece belirli kullanıcıların kimlik kanıtlaması yapabileceği, bazı programlar kimlik kanıtlaması yapmak istediğinde uyarı verecek şekilde ve hatta tüm kullanıcıları oturum açma ayrıcalıklarından mahrum bırakacak şekilde yapılandırılabilir. PAM'in modüler tasarımı kimlik denetimi üzerindeki bütün kontrolü elinize almanıza izin verir.

PAM destekleyen dağıtımlar

Neredeyse tüm tanınmış dağıtımlar bir süredir PAM destekliyorlar. Aşağıda PAM destekleyen dağıtımların bir kısmının listesi bulunmaktadır:

  • Redhat, 5.0 sürümünden itibaren

  • Mandrake, 5.2 sürümünden itibaren

  • Debian, 2.1 sürümünden itibaren (2.1 sürümde kısmi destek -- 2.2 sürümünde tam destek)

  • Caldera, 1.3 sürümünden itibaren

  • Turbolinux, 3.6 sürümünden itibaren

  • SuSE, 6.2 sürümünden itibaren

Bu liste tam olmadığı gibi hatalı da olabilir. Düzeltmelerinizi ve eklemelerinizi gönderirseniz memnun olurum.

PAM Kurulumu

Sıfırdan PAM kurulumu bu NASIL'ın kapsamını aşan uzun bir süreçtir. Eğer sisteminizde PAM kurulu değilse, büyük olasılıkla kullandığınız dağıtımın çok eski bir sürümünü kullanıyorsunuz. Dağıtımınızı güncellemeniz için başka nedenler de bulunmasına rağmen güncel bir dağıtım kullanmak yerine PAM kurulumunu kendiniz yapmak istiyorsanız kesinlikle benim yardımıma ihtiyacı olan birisi değilsiniz. Bu nedenlerle sisteminizde PAM kurulu olduğunu kabul edeceğim.

Nasıl

Yeterince konuştum, çalışma zamanı.

PAM yapılandırma dosyaları

PAM yapılandırma dosyaları /etc/pam.d/ dizininde bulunur. (Eğer sisteminizde /etc/pam.d/ dizini yoksa dert etmeyin, sıradaki bölümde ne yapacağınızı anlatacağım) Şimdi bu dizine geçelim ve neler olduğuna bakalım.

~$ cd /etc/pam.d
/etc/pam.d/$ ls
chfn  chsh    login   other   passwd  su      xlock
/etc/pam.d/$ 

Bu dizinin içerdiği dosyalar sisteminize neler kurduğunuza bağlı olarak üç aşağı beş yukarı böyledir. Ayrıntılar ne olursa olsun, sisteminizde kullanıcı kimlik kanıtlamasına ihtiyaç duyan her program için bir dosya görüyor olmalısınız. Tahmin ettiğiniz gibi her dosya bir program için PAM kimlik kanıtlaması yapılandırmasını içerir (other dosyası bir istisnadır, ondan birazdan bahsedeceğiz). Login için PAM yapılandırma dosyasının içeriğine bakalım (dosyanın içeriğini basitleştirdim):

/etc/pam.d/$ cat login
# PAM configuration for login
auth       requisite  pam_securetty.so
auth       required   pam_nologin.so
auth       required   pam_env.so
auth       required   pam_unix.so nullok
account    required   pam_unix.so
session    required   pam_unix.so
session    optional   pam_lastlog.so
password   required   pam_unix.so nullok obscure min=4 max=8

Dosyanın içeriğine geçmeden önce biraz bilgi vermem gerekir.

Ek bilgi

Okuyucuların küçük bir kısmı şöyle düşünüyor olmalı; ←Olamaz! Sistemimde /etc/pam.d dizini yok! Yukarıdaki listenizde dağıtımımın PAM içerdiği söyleniyor ama bulamıyorum. PAM olmadan hayatım boş ve anlamsız! Ne yapabilirim?→ Telaşlanmayın, herşey bitmiş değil. Dağıtımınızın PAM içerdiğini bildiğiniz halde /etc/pam.d/ dizini yoksa PAM yapılandırmanız /etc/pam.conf dosyasında saklanıyordur. Birçok dosya kullanmak yerine tüm PAM yapılandırması için tek bir dosya kullanılıyordur. Bu PAM yapılandırmasını biraz karmaşıklaştırır ama uygun ayarlamalar 3.3.4 bölümünde anlatılacaktır.

Yapılandırma sözdizimi

PAM yapılandırma dosyaları aşağıdaki sözdizimine sahiptir:

type  control  module-path  module-arguments

Yukarıdaki örnekte login dosyası için verilen yapılandırma dosyasını kullanarak PAM yapılandırma sözdizimine bakalım:

type
Type özelliği PAM'e bu modül için hangi tür kimlik kanıtlamasının kullanıcağını söyler. Aynı türden modüller ←istiflenebilir→. PAM dört farklı türü tanır:

account
Kullanıcının servise erişmeye izni olup olmadığını, parolasının süresinin geçip geçmediğini tespit eder.

auth
Kullanıcının iddia ettiği kişi olup olmadığını denetler, bunu genellikle parola ile yapar ama örneğin biyometri gibi daha karmaşık yöntemler de kullanabilir.

password
Kullanıcının kimlik kanıtlaması için kullandığı şeyi değiştirmesi için bir mekanizma sağlar. Bu genellikle paroladır.

session
Kullanıcının kimlik kanıtlaması yapıldıktan sonra ve/veya önce yapılması gerekenler. Bunlar kullanıcının ev dizininin bağlanması/çözülmesi, açıp kapattığı oturumların kaydının tutulması ve kullanıcının kullanabileceği servislerin kısıtlanması gibi şeyler olabilir.

login yapılandırma dosyasında her tür için en az bir girdi olduğunu gördük. Bu program kullanıcıların oturum açmalarına izin verdiğinden (adından anlaşıldığı gibi :), kimlik kanıtlamasının her türlüsüne erişebilmesinin gerekmesi anlaşılabilir bir şeydir.

control
control özelliği PAM'e bir modül kimlik kanıtlamasında başarısız olduğunda ne yapması gerektiğini söyler. PAM dört farklı kontrol türünü tanır:

requisite
Bu modül yoluyla kimlik kanıtlaması başarısız olursa kimlik kanıtlaması derhal reddedilir.

required
PAM kimlik kanıtlamasını reddetmeden önce bu servis için listelenmiş diğer modülleri çağırmaya devam etse de başarısızlık yine kimlik kanıtlamasının reddi ile sonuçlanır.

sufficient
Bu modül ile kimlik kanıtlaması başarılı olursa, PAM kimlik doğrulamasını daha önceki gerekli bir modülde başarısız olsa bile kabul edecektir.

optional
Bu modülün başarılı olması veya olmaması ancak bir servis için kendi türünde tek modül olması halinde önemlidir.

Login için yapılandırma dosyasında neredeyse tüm kontrol türlerini gördük. En çok ihtiyaç duyulan modül pam_unix.so (temel kimlik kanıtlama modülü), zorunlu tek modül pam_securetty.so (kullanıcının güvenli konsola oturum açtığından emin olmayı sağlar) ve seçimlik tek modül pam_lastlog.so (kullanıcının en son açtığı oturum ile ilgili bilgileri getiren modül).

module-path
PAM hangi modülü kullanacağını ve modülleri nerede bulacağını module-path sayesinde bilir. Çoğu yapılandırma login örneğinde olduğu gibi 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ınız Dosyasistemi Hiyerarşisi Standardına (FHS) uygun ise PAM modülleri /lib/security dizininde bulunur.

module-arguments
module-arguments modüllerin parametreleridir. Her modülün kendi parametresi vardır. Örneğin bizim login yapılandırmasında ←nulok→ (pam_unix.so modülüne ←null ok→ parametresi gönderilmesi ←null→ parolaların ←ok→ olduğu anlamındadır).

pam.conf yapılandırması

Eğer PAM yapılandırmanız /etc/pam.d/ dizini yerine /etc/pam.conf dosyasında saklanıyorsa PAM yapılandırma satırları biraz farklıdır. Her servisin kendi yapılandırma dosyası olması yerine tüm yapılandırmalar /etc/pam.conf dosyasında servisin adı ile başlayan satırlardan oluşur. Örneğin /etc/pam.d/login dosyasındaki aşağıdaki satır:

auth       required   pam_unix.so nulok

/etc/pam.conf dosyasında şu hale gelir:

login       auth       required   pam_unix.so nulok

Bu basit farklılıkların dışında, yapılandırmanın geri kalanında PAM sözdizimi uygulanır.

Daha fazla bilgi edinmek

PAM yapılandırması hakkında daha fazla bilgi edinmek ve bütün PAM modül referanslarına ulaşmak için Linux-PAM Sistem Yöneticisinin Kılavuzu'nu kullanabilirsiniz. Bu kılavuz size PAM yapılandırması hakkındaki en güncel referansları sağlar.