Назад | Перейти на главную страницу

Debian: Как определить, когда пользователь впервые подключается к SFTP?

Я пытаюсь настроить следующее: Разрешить доступ к серверу OpenSSH sftp только через ключи ssh, т.е. аутентификация по паролю не разрешена. Ключи SSH генерируются автоматически на сервере. Сервер предназначен для использования в качестве сервера веб-хостинга с одним пользователем на каждый веб-сайт. Этим пользователям разрешен только sftp-доступ, без оболочки.

Чтобы новые пользователи могли получить свои ключи через sftp, мы разрешаем им входить по паролю в первый раз (только в первый раз!). Пароль отправляется по SMS, и у каждого нового пользователя есть ограниченное время для подключения и получения ключей. После первого успешного подключения доступ по паролю отключен, и для этого пользователя разрешен только доступ на основе ключа.

Я уже настроил все шаги этого рабочего процесса, кроме одного: как определить, когда новый пользователь впервые подключается через sftp? Есть ли какой-либо элегантный метод, кроме анализа журналов?

Я могу придумать еще два способа, помимо анализа журналов.

  1. Установите incron. Затем вы можете создать сценарий для выполнения при чтении и закрытии файла. Этот сценарий может заблокировать доступ по паролю и т. Д.
  2. Используйте OTP (одноразовые пароли). Это отличное решение. http://www.linotp.org/doc/latest/index.html

Я бы выбрал №2, но №1 может быть полезен, если все усложняется.

Отвечая на свой вопрос, я хочу указать на другой метод, который не требует установки дополнительного программного обеспечения: модуль PAM pam_exec. Я черпал вдохновение из Вот (аналогичный вопрос, другой контекст): В моем случае имеет смысл поставить

auth    optional     pam_exec.so /path/to/command

в файле /etc/pam.d/ssh. Это работает только тогда, когда ssh / sftp выполняет аутентификацию по паролю, а не когда он выполняет аутентификацию на основе ключей. Команда в / path / to / command может затем

  • назначить пользователя в группу, которой разрешена только аутентификация на основе ключей (директива MatchGroup в sshd_config).

ИЛИ

  • добавить имя пользователя в простой текстовый файл. Если вы затем поместите "auth required pam_listfile.so item = user sense = deny file = / path / to / text / file" в /etc/pam.d/ssh, модуль pam_listfile позаботится о том, чтобы отклонить этого пользователя в следующий раз.

Для получения отличных руководств по PAM, включая два упомянутых модуля, перейдите по следующим ссылкам:

http://linuxtutorial.info/modules.php?name=Howto&pagename=User-Authentication-HOWTO/x115.html

http://susefaq.sourceforge.net/howto/pam.html