Попытка получить SSH с открытым ключом (без пароля) + аутентификатор Google, работающий на Ubuntu 14.04.1
Я использую Ubuntu 14.04.1 (с OpenSSH 6.6 и libpam-google-authenticator 20130529-2).
Я пытаюсь настроить SSH-входы, в которых открытый ключ аутентифицируется (без пароля), а пользователю предлагается ввести код от Google Authenticator.
Следуя / адаптируя эти инструкции, я получил запрос на ввод пароля и запрос на аутентификацию Google:
- https://scottlinux.com/2013/06/02/use-google-authenticator-for-two-factor-ssh-authentication-in-linux/
- http://www.howtogeek.com/121650/how-to-secure-ssh-with-google-authenticators-two-factor-authentication/
- https://wiki.archlinux.org/index.php/Google_Authenticator и https://wiki.archlinux.org/index.php/SSH_keys
- https://www.digitalocean.com/community/tutorials/how-to-protect-ssh-with-two-factor-authentication
Я установил пакет, отредактировал мой /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
также?
Что я делаю неправильно? Любая помощь будет оценена.
3 ответа
Получил это работает хорошо, сначала сделал:
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 г.
Ответ Линуса Кендалла должен работать на старых системах, но на более новых машинах 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 (например, 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 authenticator для ваших пользователей ssh и функциональная защищенная паролем учетная запись sftp для передачи данных.
Я, наконец, смог заставить это работать, поместив 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.