Насколько я знаю, 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
in sshd_config
. Даже когда он использует PAM, он предлагает другие методы аутентификации в дополнение к PAM; в частности, аутентификация с открытым ключом не проходит через PAM.
nis
, аdb
(или, возможно, пользовательский модуль).