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.