Sejauh yang saya tahu, PAM tidak menentukan shell pengguna, ini diserahkan kepada aplikasi. Modul sesi PAM melakukan tindakan umum dan pemeriksaan yang harus dilakukan untuk setiap login menggunakan layanan tertentu. Jika aplikasi kemudian ingin memulai sebuah shell, itu bebas untuk melakukannya, dan biasanya akan mencari shell di database pengguna.
Dengan asumsi pertanyaan Anda adalah tentang OpenSSH , itulah yang dilakukannya: setelah pengguna diautentikasi, dan hal-hal sesi PAM telah selesai (jika dikonfigurasi untuk menggunakan PAM¹), server ssh mencari shell di database pengguna (secara langsung, tidak melalui perpustakaan PAM).
Basis data pengguna tidak terbatas pada /usr/passwd
dan teman. Di Linux (yang saya anggap sudah Anda gunakan sejak Anda sebutkan shadow
), apa yang membentuk database pengguna ditentukan oleh passwd
pengaturan di /etc/nsswitch.conf
. Dalam pengaturan multi-komputer, penambahan umum ke database lokal adalah NIS dan LDAP . Jika Anda ingin menggunakan shell yang bukan yang ada di /etc/passwd
dalamnya, ini mungkin yang harus dikonfigurasikan (meskipun akan sedikit aneh, dan mungkin orang dapat menawarkan saran yang lebih baik jika Anda memberi tahu kami apa yang ingin Anda capai).
Jika Anda ingin memiliki pengguna tanpa akses shell penuh, solusi alami adalah mengubah /etc/passwd
untuk meletakkan shell terbatas - mungkin rssh untuk memungkinkan hanya beberapa aplikasi tipe penyalin file seperti scp, rsync dan cvs. Anda juga dapat menggunakan perintah paksa di pengguna ~/.ssh/authorized_keys
berkas .
Jika Anda ingin melihat jejak apa yang dilakukan server ssh, jalankan daemon sebagai ssh -ddd
. Anda juga bisa mendapatkan pandangan klien ssh -vvv
, meskipun di sini tampilan server adalah yang paling menarik bagi Anda.
¹
OpenSSH hanya menggunakan PAM jika dikonfigurasi dengan dukungan PAM dan UsePAM
arahan diatur ke yes
dalam sshd_config
. Bahkan ketika menggunakan PAM, ia menawarkan metode otentikasi lain selain PAM; khususnya otentikasi kunci publik tidak melalui PAM.