Linux'ta PAM Nasıl Yapılandırılır ve Kullanılır
Linux-PAM (Unix-PAM mimarisinden geliştirilen Takılabilir Kimlik Doğrulama Modülleri'nin kısaltması), bir kullanıcının uygulamalarda (veya hizmetlerde) kimliğini dinamik olarak doğrulamak için kullanılan güçlü bir paylaşılan kitaplık paketidir ) bir Linux sisteminde.
Birden fazla düşük seviyeli kimlik doğrulama modülünü, uygulamalar için dinamik kimlik doğrulama desteği sağlayan yüksek seviyeli bir API'ye entegre eder. Bu, geliştiricilerin temel kimlik doğrulama sisteminden bağımsız olarak kimlik doğrulama gerektiren uygulamalar yazmasına olanak tanır.
Birçok modern Linux dağıtımı varsayılan olarak Linux-PAM'i (bundan böyle "PAM" olarak anılacaktır) destekler. Bu makalede, Ubuntu ve CentOS sistemlerinde gelişmiş PAM'in nasıl yapılandırılacağını açıklayacağız.
Daha fazla ilerlemeden önce şunu unutmayın:
- Bir sistem yöneticisi olarak en önemli şey, PAM yapılandırma dosyalarının uygulamalar (hizmetler) ile asıl kimlik doğrulama görevlerini gerçekleştiren takılabilir kimlik doğrulama modülleri (PAM'ler) arasındaki bağlantıyı nasıl tanımladığını öğrenmektir. PAM'in dahili işleyişini mutlaka anlamanıza gerek yoktur.
- PAM, Linux sisteminizin güvenliğini ciddi şekilde değiştirme potansiyeline sahiptir. Hatalı konfigürasyon sisteminize erişimi kısmen veya tamamen devre dışı bırakabilir. Örneğin, /etc/pam.d/* ve/veya /etc/pam.conf altındaki bir yapılandırma dosyasının/dosyalarının yanlışlıkla silinmesi, oturumunuzun kilitlenmesine neden olabilir. kendi sistemi!
Bir Programın PAM uyumlu olup olmadığı nasıl kontrol edilir
PAM'i kullanmak için bir uygulamanın/programın "PAM uyumlu" olması gerekir; PAM'i kullanmak için özel olarak yazılması ve derlenmesi gerekir. Bir programın "PAM uyumlu" olup olmadığını öğrenmek için ldd komutunu kullanarak PAM kitaplığıyla derlenip derlenmediğini kontrol edin.
Örneğin sshd'de:
sudo ldd /usr/sbin/sshd | grep libpam.so
libpam.so.0 => /lib/x86_64-linux-gnu/libpam.so.0 (0x00007effddbe2000)
Linux'ta PAM Nasıl Yapılandırılır
PAM için ana yapılandırma dosyası /etc/pam.conf'dur ve /etc/pam.d/ dizini PAM yapılandırma dosyalarını içerir. PAM uyumlu her uygulama/hizmet. Dizin mevcutsa PAM dosyayı yok sayar.
Ana yapılandırma dosyasının sözdizimi aşağıdaki gibidir. Dosya, tek bir satıra yazılan kuralların listesinden oluşur (“\ ”
kaçış karakterini kullanarak kuralları genişletebilirsiniz) ve yorumların önüne “# ”
eklenir. işaretler ve satırın bir sonraki sonuna kadar uzanır.
Her kuralın formatı, boşluklarla ayrılmış bir belirteç koleksiyonudur (ilk üçü büyük/küçük harfe duyarlı değildir). Bu tokenları ilerleyen bölümlerde açıklayacağız.
service type control-flag module module-arguments
Neresi :
- hizmet: gerçek uygulama adı.
- tür: modül türü/bağlam/arayüz.
- kontrol bayrağı: modülün kimlik doğrulama görevinde başarılı olmaması durumunda PAM-API'nin davranışını belirtir.
- modül: PAM'in mutlak dosya adı veya göreli yol adı.
- module-arguments: modül davranışını kontrol etmeye yönelik belirteçlerin boşlukla ayrılmış listesi.
/etc/pam.d/ dosyasındaki her dosyanın sözdizimi ana dosyanınkine benzer ve aşağıdaki biçimdeki satırlardan oluşur:
type control-flag module module-arguments
Bu, /etc/pam.d/sshd dosyasında bulunan ve /etc/nologin olduğunda root olmayan oturum açmalara izin vermeyen bir kural tanımının (modül bağımsız değişkenleri olmadan) bir örneğidir. güçlü> mevcut:
account required pam_nologin.so
PAM Yönetim Gruplarını ve Kontrol bayraklarını anlama
PAM kimlik doğrulama görevleri dört bağımsız yönetim grubuna ayrılmıştır. Bu gruplar, tipik bir kullanıcının kısıtlı bir hizmete yönelik talebinin farklı yönlerini yönetir.
Bir modül şu yönetim grubu türlerinden biriyle ilişkilidir:
- hesap: hesap doğrulama hizmetleri sağlar: kullanıcının şifresinin süresi doldu mu?; Bu kullanıcının istenen hizmete erişmesine izin veriliyor mu?
- kimlik doğrulama: Bir kullanıcının kimliğini doğrulayın ve kullanıcı kimlik bilgilerini ayarlayın.
- şifre: Kullanıcı şifrelerinin güncellenmesinden ve kimlik doğrulama modülleriyle birlikte çalışmaktan sorumludur.
- oturum: oturumun başında ve oturumun sonunda gerçekleştirilen eylemleri yönetin.
PAM yüklenebilir nesne dosyaları (modüller) şu dizinde bulunacaktır: bağlı olarak /lib/security/ veya /lib64/security Mimarlık.
Desteklenen kontrol işaretleri şunlardır:
- gerekli: başarısızlık, ilk modül hatasının niteliğini belirterek kontrolü anında uygulamaya verir.
- gerekli: libpam'in uygulamaya başarı getirmesi için tüm bu modüllerin başarılı olması gerekir.
- yeterli: önceki tüm modüllerin başarılı olduğu göz önüne alındığında, bu modülün başarısı uygulamaya anında ve başarılı bir geri dönüş sağlar (bu modülün başarısızlığı göz ardı edilir).
- isteğe bağlı: Bu modülün başarısı veya başarısızlığı genellikle kaydedilmez.
Yukarıdaki anahtar kelimelere ek olarak iki geçerli kontrol bayrağı daha vardır:
- include ve substack: bu kontrole argüman olarak belirtilen yapılandırma dosyasındaki belirli türdeki tüm satırları dahil edin.
PAM Üzerinden SSH Hizmetine Kök Erişimi Nasıl Kısıtlanır
Örnek olarak, SSH ve oturum açma programları aracılığıyla bir sisteme root kullanıcı erişimini devre dışı bırakmak için PAM'in nasıl kullanılacağını yapılandıracağız. Burada, oturum açma ve sshd hizmetlerine erişimi kısıtlayarak bir sisteme root kullanıcı erişimini devre dışı bırakmak istiyoruz.
Belirli hesapların ayrıcalıklarını sınırlama konusunda büyük esneklik sunan /lib/security/pam_listfile.so modülünü kullanabiliriz. /etc/pam.d/ dizinindeki hedef hizmete ait dosyayı gösterildiği gibi açın ve düzenleyin.
sudo vim /etc/pam.d/sshd
OR
sudo vim /etc/pam.d/login
Bu kuralı her iki dosyaya da ekleyin.
auth required pam_listfile.so \
onerr=succeed item=user sense=deny file=/etc/ssh/deniedusers
Yukarıdaki kuraldaki belirteçlerin açıklanması:
- auth: modül türüdür (veya bağlamdır).
- gerekli: diğer modüllerin durumu ne olursa olsun, modülün kullanılması durumunda başarılı olması gerektiği veya genel sonucun başarısız olacağı anlamına gelen bir kontrol bayrağıdır.
- pam_listfile.so: isteğe bağlı bir dosyaya dayalı olarak hizmetleri reddetmek veya bunlara izin vermek için bir yol sağlayan bir modüldür.
- onerr=succeed: modül bağımsız değişkeni.
- item=user: dosyada neyin listelendiğini ve kontrol edilmesi gerektiğini belirten modül argümanı.
- sense=deny: dosyada bulunması durumunda gerçekleştirilecek eylemi belirten modül argümanı; öğe dosyada bulunmazsa, tam tersi eylem istenir.
- file=/etc/ssh/deniedusers: her satırda bir öğe içeren dosyayı belirten modül argümanı.
Daha sonra, /etc/ssh/deniedusers dosyasını oluşturmamız ve içine root adını eklememiz gerekiyor:
sudo vim /etc/ssh/deniedusers
Değişiklikleri kaydedin ve dosyayı kapatın, ardından gerekli izinleri ayarlayın:
sudo chmod 600 /etc/ssh/deniedusers
Şu andan itibaren yukarıdaki kural PAM'e /etc/ssh/deniedusers dosyasına başvurmasını ve listelenen herhangi bir kullanıcının SSH ve oturum açma hizmetlerine erişimini reddetmesini söyleyecektir.
Linux'ta Gelişmiş PAM Nasıl Yapılandırılır
Daha karmaşık PAM kuralları yazmak için aşağıdaki biçimde geçerli kontrol bayraklarını kullanabilirsiniz:
type [value1=action1 value2=action2 …] module module-arguments
Burada değerN, satırın tanımlandığı modülde çağrılan işlevin dönüş koduna karşılık gelir. Desteklenen değerleri çevrimiçi PAM Yönetici Kılavuzu'nda bulabilirsiniz. Özel bir değer varsayılandır ve bu, açıkça belirtilmeyen tüm değerleri ima eder.
actionN aşağıdaki biçimlerden birini alabilir:
- yoksay: Bu eylem bir modül yığınıyla kullanılıyorsa modülün dönüş durumu, uygulamanın elde ettiği dönüş koduna katkıda bulunmaz.
- kötü: dönüş kodunun modülün arızalandığının göstergesi olarak düşünülmesi gerektiğini belirtir. Bu modül yığında ilk başarısız olan modül ise, durum değeri tüm yığınınki için kullanılacaktır.
- die: bad'e eşdeğerdir ancak modül yığınını sonlandırabilir ve PAM'in hemen uygulamaya dönmesine neden olabilir.
- tamam: bu, PAM'e sistem yöneticisinin bu dönüş kodunun tüm modül yığınının dönüş koduna doğrudan katkıda bulunması gerektiğini düşündüğünü bildirir.
- tamam: tamam'a eşdeğerdir ancak modül yığınını sonlandırabilir ve PAM'in hemen uygulamaya dönmesine neden olabilir.
- N (işaretsiz bir tamsayı): tamam'a eşdeğerdir ancak yığındaki sonraki N modülün üzerinden atlayabilir.
- Sıfırla: bu eylem, modül yığınının durumuna ilişkin tüm belleği temizler ve sonraki yığınlanmış modülle yeniden başlar.
Dört anahtar kelimenin her biri: gerekli; gerekli; yeterli; ve isteğe bağlı olarak, daha karmaşık kurallar yazmanıza olanak tanıyan [...]
sözdizimi açısından eşdeğer bir ifadeye sahiptirler ve bunlar:
- gerekli: [success=ok new_authtok_reqd=ok görmezden=varsayılanı yoksay=kötü]
- gerekli: [success=ok new_authtok_reqd=ok görmezden=varsayılanı yoksay=öl]
- yeterli: [success=done new_authtok_reqd=done default=ignore]
- isteğe bağlı: [success=ok new_authtok_reqd=ok default=ignore]
Aşağıda modern bir CentOS 7 sisteminden bir örnek verilmiştir. /etc/pam.d/postlogin PAM dosyasındaki şu kuralları ele alalım:
#%PAM-1.0
This file is auto-generated.
User changes will be destroyed the next time authconfig is run.
session [success=1 default=ignore] pam_succeed_if.so service !~ gdm* service !~ su* quiet
session [default=1] pam_lastlog.so nowtmp showfailed
session optional pam_lastlog.so silent noupdate showfailed
/etc/pam.d/smartcard-auth PAM dosyasından başka bir örnek yapılandırmayı burada bulabilirsiniz:
#%PAM-1.0
This file is auto-generated.
User changes will be destroyed the next time authconfig is run.
auth required pam_env.so
auth [success=done ignore=ignore default=die] pam_pkcs11.so nodebug wait_for_card
auth required pam_deny.so
account required pam_unix.so
account sufficient pam_localuser.so
account sufficient pam_succeed_if.so uid < 1000 quiet
account required pam_permit.so
password required pam_pkcs11.so
session optional pam_keyinit.so revoke
session required pam_limits.so
-session optional pam_systemd.so
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session required pam_unix.so
Daha fazla bilgi için pam.d kılavuz sayfasına bakın:
man pam.d
Son olarak, Yapılandırma dosyası sözdiziminin ve tüm PAM modüllerinin kapsamlı bir açıklamasını Linux-PAM belgelerinde bulabilirsiniz.
Özet
PAM, Linux sistemindeki uygulamalarda gerçek kullanıcıların kimlik doğrulamasına dayanan programlara olanak tanıyan güçlü, üst düzey bir API'dir. Güçlüdür ancak anlaşılması ve kullanılması çok zordur.
Bu yazımızda Ubuntu ve CentOS’ta PAM’in gelişmiş özelliklerinin nasıl yapılandırılacağını anlattık. Paylaşmak istediğiniz sorularınız veya yorumlarınız varsa aşağıdaki geri bildirim formunu kullanın.