Memahami PAM dan NSS

21

Pada hari-hari terakhir saya telah menyiapkan beberapa sistem Linux dengan otentikasi LDAP dan semuanya berfungsi dengan baik, tetapi masih ada sesuatu yang saya tidak bisa mengerti mengenai NSS dan PAM, juga setelah banyak penelitian.

Mengutip:

NSS memungkinkan administrator untuk menentukan daftar sumber tempat file otentikasi, nama host dan informasi lainnya akan disimpan dan dicari

dan

PAM adalah seperangkat perpustakaan yang menyediakan platform otentikasi yang dapat dikonfigurasi untuk aplikasi dan sistem operasi yang mendasarinya

Yang tidak saya mengerti adalah bagaimana PAM dan NSS bekerja dan berinteraksi bersama. Dalam buku ini arsitekturnya dijelaskan dengan cukup baik: Saya mengonfigurasi PAM untuk digunakan pam_ldapuntuk akun LDAP dan pam_unixuntuk akun lokal, kemudian saya mengkonfigurasi nsswitch.confuntuk mengambil informasi dari file lokal dan LDAP.

Jika saya mengerti dengan benar, LDAP digunakan dua kali: pertama oleh pam_ldapdan kemudian oleh NSS yang dipanggil dari pam_unix. Apakah itu benar? Apakah LDAP benar-benar digunakan dua kali? Tetapi mengapa saya harus mengkonfigurasi NSS dan PAM? Penjelasan saya adalah bahwa PAM melakukan tugas yang berbeda dari NSS dan digunakan oleh program lain. Tapi, kalau begitu, seharusnya hanya menggunakan NSS atau PAM saja, seperti yang saya baca di halaman ini .

Jadi saya bereksperimen sedikit dan saya pertama kali mencoba menghapus LDAP dari nsswitch.conf(dan otentikasi berhenti bekerja seolah-olah hanya pam_ldap tidak cukup untuk melakukan pekerjaan). Kemudian saya mengaktifkan kembali LDAP di NSS dan saya menghapusnya dari konfigurasi PAM (kali ini semuanya bekerja dengan baik, seolah-olah pam_ldaptidak berguna dan NSS cukup untuk mengotentikasi pengguna).

Apakah ada orang yang dapat membantu saya untuk menjelaskan ini? Banyak terima kasih sebelumnya.

MEMPERBARUI

Saya baru saja mencoba sesuatu sekarang. Saya menghapus lagi semua pam_ldapentri di semua bidang konfigurasi pam dan saya juga telah menghapus shadow: ldapdari nsswitch.conf. Seperti sekarang dalam semua sistem hanya ada garis: passwd: ldap filesdan group: ldap filesdi nsswitch.conf. Yah ... login dengan pengguna LDAP berfungsi dengan baik, dua baris (plus /etc/ldap.conf) sudah cukup untuk mengkonfigurasi autentikasi LDAP.

Dari PAM pengetahuan saya di independen dari NSS, tetapi tes saya menunjukkan itu tidak. Jadi saya bertanya pada diri sendiri apakah mungkin untuk menonaktifkan NSS sepenuhnya dan hanya menggunakan PAM?

ColOfAbRiX
sumber
Saya tidak melihat pembaruan Anda. Silakan jalankan perintah berikut dan laporkan temuan Anda, ganti LDAPUSER dengan pengguna yang menurut Anda hanya dikonfigurasikan dalam LDAP. getent shadow | grep LDAPUSER grep LDAPUSER /etc/shadow
Andrew B

Jawaban:

25

Membantu memecah hal-hal seperti ini di kepala Anda:

  • NSS - Sistem berbasis modul untuk mengendalikan bagaimana berbagai basis data OS-level dirakit dalam memori. Ini termasuk (namun tidak terbatas pada) passwd, group, shadow(ini penting untuk catatan), dan hosts. Pencarian UID menggunakan passwddatabase, dan pencarian GID menggunakan groupdatabase.

  • PAM - Sistem berbasis modul untuk memungkinkan otentikasi dan akuntansi berbasis layanan. Tidak seperti NSS, Anda tidak memperluas basis data yang ada; Modul PAM dapat menggunakan logika apa pun yang mereka suka, meskipun login shell masih bergantung pada passwddan groupdatabase NSS. (Anda selalu membutuhkan pencarian UID / GID)

Perbedaan penting adalah bahwa PAM tidak melakukan apa-apa sendiri. Jika suatu aplikasi tidak terhubung dengan perpustakaan PAM dan membuat panggilan ke sana, PAM tidak akan pernah digunakan. NSS adalah inti dari sistem operasi, dan basis data cukup di mana-mana untuk operasi normal OS.

Sekarang kita memiliki itu di luar jalan, inilah bola kurva: sementara pam_ldap adalah cara populer untuk mengotentikasi terhadap LDAP, itu bukan satu - satunya cara.

  • Jika shadowmenunjuk ke layanan ldap di dalam /etc/nsswitch.conf, otentikasi apa pun yang berjalan terhadap basis data bayangan akan berhasil jika atribut untuk pemetaan bidang bayangan tersebut (khususnya bidang kata sandi terenkripsi) ada di LDAP dan akan mengizinkan masuk.
    • Ini pada gilirannya berarti yang pam_unix.soberpotensi menghasilkan otentikasi terhadap LDAP, karena mengautentikasi terhadap basis data bayangan. (yang dikelola oleh NSS, dan mungkin menunjuk pada LDAP)
  • Jika modul PAM melakukan panggilan terhadap daemon yang pada gilirannya menanyakan basis data LDAP (katakanlah pam_sss.so, yang menghubungkan sssd), mungkin saja LDAP akan dirujuk.
Andrew B
sumber
Terima kasih banyak, saya tahu bahwa nsswitch.conf + pam_unix dapat melakukan semuanya sendiri. Tetapi PAM juga harus dapat melakukan hal yang sama, karena ini independen, seperti yang Anda tulis juga. Pemahaman saya adalah bahwa modul pam_ldap harus cukup untuk mengotentikasi pengguna terhadap server ldap. Bukan?
ColOfAbRiX
6
Otentikasi ya, tetapi kecuali jika Anda memiliki cara lain untuk mendapatkan informasi pengguna (lokal / etc / passwd atau apa pun) Anda masih memerlukan cara untuk mengetahui keanggotaan grup, direktori home, dll. Anda masih mengacaukan otentikasi dan enumerasi atribut / otorisasi / atribut.
TheFiddlerWins
1
@ColOfAbRiX TheFIddlerWins benar. Sudah cukup untuk mengautentikasi , tetapi Anda masih perlu cara untuk mencari keanggotaan UID + GID seperti yang saya catat. Ini diperoleh dari passwddan groupdatabase (NSS), yang berarti mereka harus berada di sistem lokal ( /etc/passwd+ /etc/group), atau diperoleh melalui ldapmodul NSS.
Andrew B
3
Berikut cara untuk membantu Anda memahami: menjalankan getent passwddan getent groupdengan LDAP diaktifkan untuk kedua basis data di /etc/nsswitch.conf. Kemudian nonaktifkan LDAP dalam file itu, dan jalankan kedua perintah lagi. getentadalah perintah untuk membuang basis data NSS.
Andrew B
Akhirnya saya bisa memahami semuanya dengan sedikit lebih banyak pekerjaan. Terima kasih kawan!
ColOfAbRiX
1

NSS ada di sana untuk menyebutkan informasi tentang layanan / pengguna (grup mana Anda berasal, di mana direktori home Anda dll). PAM menentukan apa yang harus dilakukan tentang informasi itu.

Jika Anda ingin menggunakan LDAP untuk autentikasi, Anda perlu pam_ldap. Jika Anda menggunakan sesuatu yang lain (akun lokal, Kerberos dll) maka Anda mungkin tidak.

Jadi mereka melakukan hal yang berbeda. NSS mendapatkan informasi, PAM menentukan siapa yang diizinkan melakukan apa setelah informasi itu diperoleh.

TheFiddlerWins
sumber
Terima kasih, tetapi masalahnya adalah tidak berfungsi seperti itu, setidaknya di sistem saya :) Pada awalnya saya mengerti hal yang sama tetapi kemudian saya telah mencoba untuk menghapus semua entri pam_ldap di PAM dan otentikasi LDAP masih berfungsi (dan menonaktifkan cache). Ini meningkatkan kebingungan saya :)
ColOfAbRiX
Bagaimana Anda memverifikasi bahwa Anda mengautentikasi melalui pam_ldap setelah menghapusnya? Tolong tuliskan konten autentikasi umum Anda. Saya tidak yakin tentang jalur di SUSE tetapi sebagai jawaban untuk bagian pertama dari pertanyaan ketiga Anda, bahkan dengan pam_ldap bekerja, Anda memerlukan beberapa cara agar sistem mengetahui siapa Anda - ini disediakan oleh NSS
TheFiddlerWins
Maaf, maksud saya setelah menghapus pam_ldap, LDAP auth berfungsi tanpanya, saya kira itu bekerja melalui NSS. File common-authhanya berisi pam_env, pam_unix dan pam_deny.
ColOfAbRiX
Itu tidak masuk akal, bagaimana Anda mengonfirmasi LDAP auth berfungsi?
TheFiddlerWins
Masuk menggunakan akun LDAP dan memonitor log server ldap. nscd (caching) dinonaktifkan
ColOfAbRiX