Linux’ta PAM Nasıl Yapılandırılır ve Kullanılır

Share
Linux'ta PAM Nasıl Yapılandırılır ve Kullanılır

Linux'ta PAM Nasıl Yapılandırılır ve KullanılırLinux-PAM (Unix-PAM mimarisinden geliştirilen Takılabilir Kimlik Doğrulama Modüllerinin kısaltması), bir kullanıcının bir Linux sistemindeki uygulamalara (veya hizmetlere) dinamik olarak kimliğini doğrulamak için kullanılan güçlü bir paylaşılan kitaplıklar paketidir.

Birden çok 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, temeldeki 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 yazımızda Ubuntu ve CentOS sistemlerinde gelişmiş PAM konfigürasyonunun nasıl yapıldığını anlatacağız.

Daha fazla ilerlemeden önce şunu unutmayın:

  • Bir sistem yöneticisi olarak en önemli şey, PAM yapılandırma dosyasının/dosyalarının uygulamalar (hizmetler) ile gerçek 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’ın dahili çalışmasını mutlaka anlamanız gerekmez.
  • PAM, Linux sisteminizin güvenliğini ciddi şekilde değiştirme potansiyeline sahiptir. Hatalı yapılandırma, 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 sizi kendi sisteminizin dışında tutabilir!

Bir Programın PAM uyumlu olup olmadığını Kontrol Etme

PAM’ı kullanmak için bir uygulamanın/programın “PAM farkında” olması gerekir; PAM kullanmak için özel olarak yazılmış ve derlenmiş olması gerekir. Bir programın “PAM-aware” olup olmadığını öğrenmek için, ldd komutunu kullanarak programın PAM kütüphanesi ile derlenip derlenmediğini kontrol edin.

Örneğin sshd:

$ 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 konfigürasyon dosyası /etc/pam.conf’dur ve /etc/pam.d/ dizini, her PAM-aware uygulama/hizmet için PAM konfigürasyon dosyalarını içerir. Dizin varsa, PAM dosyayı yok sayar.

Ana yapılandırma dosyasının sözdizimi aşağıdaki gibidir. Dosya, tek bir satıra yazılmış bir kurallar listesinden oluşur (“\” çıkış karakterini kullanarak kuralları genişletebilirsiniz) ve yorumların önüne “#” işaretleri gelir ve bir sonraki satırın sonuna kadar uzanır.

Her kuralın biçimi, boşlukla ayrılmış bir belirteç koleksiyonudur (ilk üçü büyük/küçük harfe duyarsızdır). Bu belirteçleri sonraki bölümlerde açıklayacağız.

service type control-flag module module-arguments

nerede:

service: gerçek uygulama adı.
type: modül tipi/bağlam/arayüz.
control-flag: modülün kimlik doğrulama görevinde başarılı olamaması durumunda PAM-API’nin davranışını gösterir.
modulel: PAM’nin mutlak dosya adı veya göreli yol adı.
module-arguments: modül davranışını kontrol etmek için boşlukla ayrılmış belirteç listesi.

/etc/pam.d/ içindeki 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 varken kök dışı oturum açmalara izin vermeyen bir kural tanımının (modül bağımsız değişkenleri olmadan) bir örneğidir:

account required pam_nologin.so

PAM Yönetim Gruplarını ve Kontrol İşaretlerini Anlama

PAM kimlik doğrulama görevleri, dört bağımsız yönetim grubuna ayrılır. Bu gruplar, tipik bir kullanıcının kısıtlı bir hizmet talebinin farklı yönlerini yönetir.

Bir modül, şu yönetim grubu türlerinden biriyle ilişkilendirilir:

  • account: hesap doğrulaması için hizmetler sağlayın: kullanıcının parolasının süresi doldu mu?; bu kullanıcının istenen hizmete erişmesine izin veriliyor mu?
  • authentication: bir kullanıcının kimliğini doğrulayın ve kullanıcı kimlik bilgilerini ayarlayın.
  • password:kullanıcı şifrelerinin güncellenmesinden sorumludur ve kimlik doğrulama modülleriyle birlikte çalışır.
  • session: bir oturumun başında ve bir oturumun sonunda gerçekleştirilen eylemleri yönetin.

PAM yüklenebilir nesne dosyaları (modüller) şu dizinde yer alacaktır: mimariye bağlı olarak /lib/security/ veya /lib64/security.

Desteklenen kontrol işaretleri şunlardır:

  • requisite: başarısızlık, ilk modül hatasının doğasını gösteren denetimi anında uygulamaya döndürür.
  • required: tüm bu modüllerin libpam’in uygulamaya başarı döndürmesi için başarılı olması gerekir.
  • sufficient: ö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 dönüş sağlar (bu modülün başarısızlığı göz ardı edilir).
  • optional: 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 and substack: bu kontrole bir argüman olarak belirtilen konfigürasyon dosyasından verilen tipteki tüm satırları dahil eder.

PAM Yoluyla SSH Hizmetine Root Erişimi Nasıl Kısıtlanır

Örnek olarak, SSH ve oturum açma programları aracılığıyla bir sisteme kök kullanıcı erişimini devre dışı bırakmak için PAM’ın nasıl kullanılacağını yapılandıracağız. Burada, oturum açma ve sshd hizmetlerine erişimi kısıtlayarak bir sisteme kök kullanıcı erişimini devre dışı bırakmak istiyoruz.

Belirli hesapların ayrıcalıklarını sınırlamada büyük esneklik sunan /lib/security/pam_listfile.so modülünü kullanabiliriz. /etc/pam.d/ dizinindeki hedef hizmet için dosyayı gösterildiği gibi açın ve düzenleyin.

$ sudo vim /etc/pam.d/sshd
veya
$ 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çleri açıklamak:

  • auth: modül tipidir (veya bağlam).
  • gerekli: modül kullanılıyorsa, diğer modüllerin durumundan bağımsız olarak 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ı hizmetleri reddetmek veya bunlara izin vermek için bir yol sağlayan bir modüldür.
  • onerr=başarılı: modül argümanı.
  • item=user: dosyada neyin listelendiğini belirten ve kontrol edilmesi gereken modül argümanı.
  • sense=deny: dosyada bulunursa yapılacak eylemi belirten modül argümanı, öğe dosyada YOKSA, tersi eylem istenir.
  • file=/etc/ssh/deniedusers: Her satırda bir öğe içeren dosyayı belirten modül argümanı.

Ardından, /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’a /etc/ssh/deniedusers dosyasına başvurmasını ve listelenen herhangi bir kullanıcı için SSH ve oturum açma hizmetlerine erişimi 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ı kullanabilirsiniz:

type [value1=action1 value2=action2 …] module module-arguments

N değeri, satırın tanımlandığı modülde çağrılan işlevden gelen dönüş koduna karşılık gelir. Desteklenen değerleri çevrimiçi PAM Yönetici Kılavuzundan bulabilirsiniz. Özel bir değer varsayılandır; bu, tüm değerN’lerin açıkça belirtilmediğini ima eder.

actionN aşağıdaki şekillerden birini alabilir:

  • ignore: bu eylem bir modül yığını ile kullanılırsa, modülün dönüş durumu, uygulamanın elde ettiği dönüş koduna katkıda bulunmayacaktır.
  • bad: dönüş kodunun modülün başarısız olduğunun göstergesi olarak düşünülmesi gerektiğini belirtir. Bu modül yığında başarısız olan ilk modülse, durum değeri tüm yığın için kullanılacaktır.
  • die: bad ile eşdeğerdir ancak modül yığınını sonlandırabilir ve PAM hemen uygulamaya döner.
  • ok: bu, PAM’a sistem yöneticisinin bu dönüş kodunun tam modül yığınının dönüş koduna doğrudan katkıda bulunması gerektiğini düşündüğünü bildirir.
  • done: tamam’a eşdeğerdir ancak modül yığınını sonlandırabilir ve PAM hemen uygulamaya döner.
  • N (an unsigned integer): ok’a eşdeğerdir ancak yığındaki sonraki N modüllerin üzerinden atlayabilir.
  • Reset: bu eylem, modül yığınının tüm belleğini siler ve bir 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 izin veren […] sözdizimi açısından eşdeğer bir ifadeye sahip olun ve bunlar:

  • gerekli: [success=tamam new_authtok_reqd=tamam yoksay=varsayılanı yoksay=kötü]
  • gerekli: [başarı=tamam new_authtok_reqd=tamam yoksay=varsayılanı yoksay=öl]
  • yeterli: [başarı=yapıldı new_authtok_reqd=yapıldı varsayılan=yoksay]
  • isteğe bağlı: [success=tamam new_authtok_reqd=tamam varsayılan=yoksayın]

Aşağıdaki, modern bir CentOS 7 sisteminden bir örnektir. /etc/pam.d/postlogin PAM dosyasındaki bu 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ırma:

#%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ı, Linux-PAM belgelerinde bulunabilir.

Özet

PAM, bir Linux sistemindeki uygulamalarda gerçek kullanıcılara kimlik doğrulamaya dayanan programlara izin veren güçlü bir üst düzey API’dir. Güçlü ama anlaması ve kullanması çok zor.

Bu yazıda, Ubuntu ve CentOS’ta PAM’ın gelişmiş özelliklerinin nasıl yapılandırılacağını açıkladık. Paylaşmak istediğiniz herhangi bir sorunuz veya yorumunuz varsa, aşağıdaki geri bildirim formunu kullanın.

NOT: Döküman çeviri yapılmıştır, Kaynak: https://www.tecmint.com/configure-pam-in-centos-ubuntu-linux/