Я пытаюсь настроить следующее: Разрешить доступ к серверу OpenSSH sftp только через ключи ssh, т.е. аутентификация по паролю не разрешена. Ключи SSH генерируются автоматически на сервере. Сервер предназначен для использования в качестве сервера веб-хостинга с одним пользователем на каждый веб-сайт. Этим пользователям разрешен только sftp-доступ, без оболочки.
Чтобы новые пользователи могли получить свои ключи через sftp, мы разрешаем им входить по паролю в первый раз (только в первый раз!). Пароль отправляется по SMS, и у каждого нового пользователя есть ограниченное время для подключения и получения ключей. После первого успешного подключения доступ по паролю отключен, и для этого пользователя разрешен только доступ на основе ключа.
Я уже настроил все шаги этого рабочего процесса, кроме одного: как определить, когда новый пользователь впервые подключается через sftp? Есть ли какой-либо элегантный метод, кроме анализа журналов?
Я могу придумать еще два способа, помимо анализа журналов.
Я бы выбрал №2, но №1 может быть полезен, если все усложняется.
Отвечая на свой вопрос, я хочу указать на другой метод, который не требует установки дополнительного программного обеспечения: модуль PAM pam_exec. Я черпал вдохновение из Вот (аналогичный вопрос, другой контекст): В моем случае имеет смысл поставить
auth optional pam_exec.so /path/to/command
в файле /etc/pam.d/ssh. Это работает только тогда, когда ssh / sftp выполняет аутентификацию по паролю, а не когда он выполняет аутентификацию на основе ключей. Команда в / path / to / command может затем
ИЛИ
Для получения отличных руководств по PAM, включая два упомянутых модуля, перейдите по следующим ссылкам:
http://linuxtutorial.info/modules.php?name=Howto&pagename=User-Authentication-HOWTO/x115.html