PAM ve NSS'yi anlama


21

Son günlerde LDAP kimlik doğrulaması ile bir Linux sistemi kurdum ve her şey iyi çalışıyor, ancak yine de çok fazla araştırmadan sonra NSS ve PAM ile ilgili gerçekten anlayamadığım bir şey var.

Anmak:

NSS, yöneticilerin kimlik doğrulama dosyalarının, ana bilgisayar adlarının ve diğer bilgilerin depolanacağı ve aranacağı kaynakların bir listesini belirlemesine olanak tanır

ve

PAM, uygulamalar ve temel işletim sistemi için yapılandırılabilir bir kimlik doğrulama platformu sağlayan bir dizi kitaplıktır

Anlamadığım şey, PAM ve NSS'nin birlikte nasıl çalıştığı ve etkileşime girdiği. Gelen bu kitapta mimarisi oldukça iyi açıklanmıştır: kullanımına ı yapılandırmak PAM pam_ldapLDAP hesapları için ve pam_unixyerel hesaplar için, o zaman yapılandırmak nsswitch.confyerel dosya ve LDAP'den bilgi almak için.

Eğer doğru anladıysam LDAP iki kez kullanılır: önce pam_ldapve sonra kendisi denilen NSS tarafından pam_unix. Bu doğru mu? LDAP gerçekten iki kez kullanılıyor mu? Ama neden hem NSS hem de PAM'yi yapılandırmam gerekiyor? Açıklamam, PAM'ın NSS'den farklı görevleri yerine getirmesi ve diğer programlar tarafından kullanılmasıdır. Ancak, bu sayfada okuduğum gibi sadece NSS veya sadece PAM kullanmak mümkün olmalıdır .

Bu yüzden biraz denedim ve ilk olarak LDAP'yi silmeye çalıştım nsswitch.conf(ve kimlik doğrulama sadece pam_ldap işi yapmak için yeterli değil gibi çalışmayı durdurdu ). Sonra NSS'de LDAP'yi yeniden etkinleştirdim ve PAM yapılandırmasından sildim (bu sefer her şey işe yaradı, sanki pam_ldapişe yaramaz ve NSS bir kullanıcının kimliğini doğrulamak için yeterli ).

Bunu açıklığa kavuşturmak için bana yardımcı olabilecek biri var mı? Şimdiden çok teşekkürler.

GÜNCELLEME

Şimdi bir şey denedim. Yine bütün kaldırıldı pam_ldaptüm Pam yapılandırma alanlarında girdileri ve ben de kaldırdık shadow: ldapdan nsswitch.conf. Gibi artık tüm sistemde sadece orada hatları şunlardır: passwd: ldap filesve group: ldap filesiçinde nsswitch.conf. Eh ... LDAP kullanıcılarıyla giriş mükemmel çalışıyor, bu iki satır (artı /etc/ldap.conf) LDAP yetkilendirmesini yapılandırmak için yeterli.

Bilgimden PAM NSS'den bağımsız, ama testlerim bunu göstermedi. Bu yüzden kendime NSS'yi tamamen devre dışı bırakıp sadece PAM kullanmak mümkün mü diye soruyorum.


Güncellemeni görmedim. Lütfen aşağıdaki komutları çalıştırın ve bulgularınızı rapor edin, LDAPUSER yerine yalnızca LDAP'de yapılandırıldığını düşündüğünüz kullanıcıyla değiştirin. getent shadow | grep LDAPUSER grep LDAPUSER /etc/shadow
Andrew B

Yanıtlar:


25

Kafanızda böyle şeyleri yıkmaya yardımcı olur:

  • NSS - Çeşitli işletim sistemi düzeyindeki veritabanlarının bellekte nasıl birleştirileceğini kontrol etmek için modül tabanlı bir sistem. Buna, (ancak bunlarla sınırlı değildir) passwd, group, shadow(bu nota önemlidir) ve hosts. UID aramaları passwdveritabanını ve GID aramaları groupveritabanını kullanır .

  • PAM - Servis tabanlı kimlik doğrulama ve hesaplamaya izin veren modül tabanlı bir sistem. NSS'den farklı olarak, varolan veritabanlarını genişletmiyorsunuz; Kabuk girişleri hala NSS passwdve groupveritabanlarına bağlı olsa da, PAM modülleri istedikleri mantığı kullanabilir . (her zaman UID / GID aramalarına ihtiyacınız vardır)

Önemli fark, PAM'ın kendi başına hiçbir şey yapmamasıdır. Bir uygulama PAM kütüphanesine bağlanmaz ve onu çağırmazsa, PAM asla kullanılmaz. NSS, işletim sisteminin çekirdeğidir ve veritabanları işletim sisteminin normal çalışması için oldukça yaygındır.

Şimdi bunu yoldan çıkardığımıza göre, eğri topu: pam_ldap LDAP'ye karşı kimlik doğrulamanın popüler bir yolu olsa da, tek yol bu değil .

  • Eğer shadowiçinde ldap hizmetinde işaret /etc/nsswitch.confolanlar gölge alanı eşleştirmeleri için nitelikler (özellikle şifreli şifre alanı) LDAP mevcuttur ve giriş izni olsaydı gölge veritabanıyla çalışır başarılı olacağı herhangi bir kimlik doğrulaması.
    • Bu pam_unix.soda gölge veritabanında kimlik doğrulaması yaptığı için potansiyel olarak LDAP'ye karşı kimlik doğrulamasıyla sonuçlanabileceği anlamına gelir . (NSS tarafından yönetilir ve LDAP'yi gösteriyor olabilir)
  • Bir PAM modülü, LDAP veritabanını (örneğin pam_sss.so, hangi kancaları sssd) sorgulayan bir arka plan programına karşı arama yaparsa, LDAP'ye başvuruda bulunulması mümkündür.

Çok teşekkürler, biliyorum ki nsswitch.conf + pam_unix tüm işleri tek başına yapabilir. Ama aynı zamanda PAM da aynı şeyi yapabilmelidir, çünkü sizin de yazdığınız gibi bağımsızdır. Anladığım kadarıyla pam_ldap modülü, kullanıcıyı bir ldap sunucusuna karşı doğrulamak için yeterli olmalıdır. Öyle değil mi?
ColOfAbRiX

6
Kimlik doğrulaması evet, ancak kullanıcı bilgilerini (yerel / etc / passwd veya başka herhangi bir şekilde) elde etmek için başka bir yolunuz yoksa, grup üyeliğini, giriş dizinini vb. Bulmanın bir yolunu bulmanız gerekir.
TheFiddlerWins

1
@ColOfAbRiX TheFIddlerWins doğru. Kimlik doğrulaması yeterlidir , ancak yine de belirttiğim gibi UID'leri + GID üyeliklerini aramanın bir yoluna ihtiyacınız var. Bunlar passwdve groupveritabanlarından (NSS) elde edilir , yani yerel sistemde ( /etc/passwd+ /etc/group) olmaları veya ldapNSS modülü aracılığıyla edinilmeleri gerekir .
Andrew B

3
İşte anlamanıza yardımcı olacak bir yol: Çalıştırın getent passwdve getent groupiçindeki her iki veritabanı için LDAP etkin /etc/nsswitch.conf. Ardından bu dosyada LDAP'yi devre dışı bırakın ve her iki komutu da yeniden çalıştırın. getentNSS veritabanlarını boşaltmak için kullanılan bir komuttur.
Andrew B

Sonunda her şeyi biraz daha fazla iş ile anlayabildim. Sağolun beyler!
ColOfAbRiX

1

NSS, hizmetler / kullanıcılar (hangi gruba ait olduğunuz, ana dizininizin nerede olduğu vb.) Hakkında bilgi toplamak için vardır. PAM bu bilgiler hakkında ne yapılacağını belirler.

Kimlik doğrulama için LDAP kullanmak istiyorsanız pam_ldap gerekir . Başka bir şey kullanıyorsanız (yerel hesaplar, Kerberos vb.) Kullanamazsınız.

Yani farklı şeyler yapıyorlar. NSS bilgi alır, PAM bu bilgi alındıktan sonra kimin ne yapmasına izin verileceğini belirler.


Teşekkürler, ama sorun şu ki, bu şekilde çalışmaz, en azından benim sistemimde :) Başlangıçta aynı anladım ama sonra PAM ve LDAP kimlik doğrulamasında tüm pam_ldap girdilerini kaldırmaya çalıştım ve önbelleği devre dışı bırak). Bu karışıklığımı arttırdı :)
ColOfAbRiX 12:13

Pam_ldap ile kimliğini kaldırdıktan sonra doğruladığınızı nasıl doğrulıyorsunuz? Lütfen ortak yetkinizin içeriğini gönderin. SUSE içindeki yollar hakkında emin değilim, ancak üçüncü sorunuzun ilk kısmına cevap olarak, pam_ldap çalışırken bile sistemin kim olduğunuzu bilmesinin bir yoluna ihtiyacınız var - bu NSS tarafından sağlandı
TheFiddlerWins

Üzgünüm, pam_ldap'ı kaldırdıktan sonra, LDAP yetkilendirmesi onsuz çalıştı, sanırım NSS ile çalıştı. Dosya common-authyalnızca pam_env, pam_unix ve pam_deny içeriyordu.
ColOfAbRiX

Bu mantıklı değil, LDAP yetkisinin çalıştığını nasıl doğruladınız?
TheFiddlerWins

Bir LDAP hesabı kullanarak oturum açma ve ldap sunucularının günlüğünü izleme. nscd (önbellek) devre dışı
ColOfAbRiX
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.