Я использую Ubuntu 14.04.1 (с OpenSSH 6.6 и libpam-google-Authenticator 20130529-2).
Я пытаюсь настроить вход по SSH, при котором открытый ключ аутентифицируется (без пароля), а пользователю предлагается ввести код от Google Authenticator.
Следуя этим инструкциям / адаптируя их, я получил запрос пароля, а также запрос Google Auth:
Я установил пакет, отредактировал свой /etc/ssh/sshd_config
и /etc/pam.d/ssh
файлы
В /etc/ssh/sshd_config
:
ChallengeResponseAuthentication yes
AuthenticationMethods publickey,keyboard-interactive
UsePAM yes
и внизу /etc/pam.d/ssh
:
auth required pam_google_authenticator.so nullok # (I want to give everyone a chance to set up their 2FA before removing "nullok")
Я знаю, что PAM зависит от заказа, но sshd_config
также?
Что я делаю не так? Любая помощь будет оценена.
Получил, что он работает хорошо, сначала сделал:
apt-get install libpam-google-authenticator
В /etc/pam.d/sshd
Я изменил / добавил следующие строки (вверху):
# @include common-auth
auth required pam_google_authenticator.so
И в /etc/ssh/sshd_config
:
ChallengeResponseAuthentication yes
UsePAM yes
AuthenticationMethods publickey,keyboard-interactive
PasswordAuthentication no
Работает хорошо, и теперь я получаю запрос «Проверочный код» после аутентификации с открытым ключом. Я не уверен, как разрешить аутентификацию с паролем + токеном ИЛИ ключом + токеном, поскольку теперь я фактически удалил метод аутентификации по паролю из PAM.
Использование Ubuntu 14.04.1 LTS (GNU / Linux 3.8.0-19-generic x86_64) с ssh -v: OpenSSH_6.6.1p1 Ubuntu-2ubuntu2, OpenSSL 1.0.1f 6 января 2014 г.
Я наконец смог заставить это работать, разместив auth [success=done new_authtok_reqd=done default=die] pam_google_authenticator.so nullok
на вершине /etc/pam.d/sshd
.
Согласно страница руководства pam.d:
success=done
означает, что если Google Authenticator выйдет из системы, аутентификация больше не будет выполняться, то есть не будет запрашиваться дополнительный пароль.default=die
означает, что если Google Authenticator отклонит попытку входа в систему, аутентификация немедленно завершится неудачно, запрос пароля будет пропущен.Так [success=done new_authtok_reqd=done default=die]
это своего рода смесь между sufficient
и requisite
управляющие значения, так как мы хотим поведения обоих: в случае успеха - немедленно прекратить (достаточно), а в случае неудачи - также немедленно прекратить (обязательно).
Обратите внимание, что nullok
аргумент pam_google_authenticator.so означает, что если ~/.google_authenticator
файл не найден для пользователя, аутентификация с открытым ключом выполняется в обычном режиме. Это полезно, если я хочу заблокировать только часть своих учетных записей с помощью 2FA.
Ответ Линуса Кендалла должен работать на старых системах, но на новых машинах Linux это проблематично; на моем веб-сервере на основе Arch Linux, эта конфигурация приводит к тому, что pam запрашивает мой код аутентификатора и мой пароль после получения моего ключа ssh (т.е. мне нужны все 3).
Более простое решение, которое предотвращает эту проблему и которое должно работать в каждой системе, - это изменить запись в /etc/pam.d/sshd
кому:
auth sufficient pam_google_authenticator.so
А затем внести те же изменения в `` / etc / ssh / sshd`, о которых упоминал Линус:
ChallengeResponseAuthentication yes
UsePAM yes
AuthenticationMethods publickey,keyboard-interactive
PasswordAuthentication no
Это должно запросить ваш токен аутентификатора после того, как сервер примет ваш открытый ключ. Он не должен запрашивать ваш пароль.
В качестве побочного примечания: если вы хотите иметь учетную запись пользователя sftp, вам, вероятно, потребуется обойти аутентификатор Google, чтобы заставить его работать. Вот предложение, как сделать это безопасно с помощью sftp jail. В etc/ssh/sshd_config
:
Subsystem sftp internal-sftp
Match User ftp-user
PasswordAuthentication yes
AuthenticationMethods password
ChrootDirectory /path/to/ftp/dir
ForceCommand internal-sftp
Вам нужно будет сделать разрешения только для / path / to / ftp / dir root write (например, chown root:root /path/to/ftp/dir
, chmod 755 /path/to/ftp/dir
. Всем родителям, указанным в этом каталоге, также нужны безопасные разрешения. Обычно я делаю это, создавая каталог chroot /home/shared/user
, создав там каталог (например, 'data'), а затем монтируя любой каталог, которым я хочу поделиться, вот так: sudo mount -o bind /path/to/ftp/dir /home/shared/user/data
Если вы выполните все эти шаги, у вас будет открытый ключ + логин аутентификатора Google для ваших пользователей ssh и функциональная защищенная паролем учетная запись sftp для передачи данных.