Какие шаги выполняет система при обработке соединения SSH?

9

Какие шаги выполняет система при обработке соединения SSH?

  1. Мы пытаемся войти через SSH
  2. sshd запускает модуль pam и pam для аутентификации
  3. В зависимости от конфигурации pam, мы должны предоставить имя пользователя и пароль (проверки pam passwdи shadowфайлы)
  4. ПАМ проверяет hosts.allow/deny, /etc/shellsи другие вещи
  5. Если все идет хорошо, мы вошли в систему
  6. ???
  7. Shell запущен

Поэтому у меня вопрос: какой механизм отвечает за проверку того, какая оболочка назначена пользователю в его passwdфайле (на шаге 6)? Это сам pam, какой-то конкретный модуль pam sshdили что-то еще? Я знаю, что могу заменить passwdфайл (для проверки имени пользователя и пароля), написав модуль pam, но как я могу заменить passwdфайл для записи оболочки?

постоянный репер
источник

Ответы:

8

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

Жиль "ТАК - перестань быть злым"
источник
Я хочу разрешить пользователям моего приложения входить в оболочку как обычный пользователь без создания учетной записи в системе. Данные пользователей (имя пользователя, пароль и оболочка) будут храниться в sqlite db. Первым шагом является модуль sqlite pam, который проверяет подлинность пользователей против БД. Второй шаг - предоставить оболочку, прочитанную из базы данных. Поэтому я думаю, что это можно сделать, написав соответствующий модуль nis. Спасибо за ответ ...
pbm
@pbm: Я не думаю, что вы хотите nis, а db(или, возможно, пользовательский модуль).
Жиль "ТАК - перестань быть злым"
это опечатка .. Я имел в виду "написанием правильного (нестандартного) модуля nss" ...
pbm