Наскільки мені відомо, PAM не визначає оболонку користувача, це залишається програмі. Модулі сеансу PAM виконують загальні дії та перевірки, які необхідно зробити для кожного входу за допомогою даної послуги. Якщо програма потім хоче запустити оболонку, вона може це зробити і зазвичай шукає оболонку в базі даних користувачів.
Якщо припустити, що ваше питання стосується OpenSSH , це саме те, що він робить: як тільки користувач проходить автентифікацію, і дані сеансу PAM зроблено (якщо налаштовано використовувати PAM¹), ssh-сервер шукає оболонку в базі даних користувачів (безпосередньо, не через бібліотеку PAM).
База даних користувачів не обмежується /usr/passwd
і друзями. У Linux (який, я вважаю, ви використовуєте з моменту згадування shadow
), те, що складається з бази даних користувачів, визначається passwd
налаштуваннями в /etc/nsswitch.conf
. У налаштуваннях для багатьох комп’ютерів поширеними доповненнями до локальної бази даних є NIS та LDAP . Якщо ви хочете скористатись оболонкою, яка не є такою /etc/passwd
, можливо налаштувати (хоча це було б трохи дивно, і, можливо, люди можуть запропонувати кращі пропозиції, якщо ви скажете нам, що ви намагаєтеся виконати).
Якщо ви хочете мати користувачів без повного доступу до оболонки, природним рішенням є змінити /etc/passwd
на встановлення обмеженої оболонки - можливо, rssh, щоб дозволити лише кілька додатків типу копіювання файлів, таких як scp, rsync та cvs. Ви також можете використовувати примусові команди у ~/.ssh/authorized_keys
файлі користувача .
Якщо ви хочете побачити слід того, що робить ssh-сервер, запустіть демон як ssh -ddd
. Ви також можете отримати уявлення клієнта ssh -vvv
, хоча тут погляд на сервер - це те, що вас найбільше зацікавить.
¹
OpenSSH використовує тільки PAM , якщо він налаштований з підтримкою PAM і UsePAM
директива встановлена в yes
в sshd_config
. Навіть коли він використовує PAM, він пропонує інші методи аутентифікації на додаток до PAM; зокрема аутентифікація відкритих ключів не проходить через PAM.