Я использую 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#Two-factor_authentication_and_public_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
также?
Что я делаю неправильно? Любая помощь будет оценена.
PasswordAuthentication no
, но это было не так. Проблема была / была в том, что у меня были / haveControlMaster auto
иControlPath
директивы в моем ~ / .ssh / config файле. Я хотел убедиться, что я не блокируюсь, поэтому я всегда оставляю сеанс SSH открытым. Так как мой компьютер просто использовал бы их повторно, я всегда входил без системы, запрашивающей токен. Я пометил ваш ответ как правильный, так как кто-то, следовавший ему, действительно получил бы рабочую установку. Благодарность!PasswordAuthentication no
,ChallengeResponseAuthentication yes
,AuthenticationMethods publickey,keyboard-interactive
иUsePAM yes
вsshd_config
. Он проверяет мой ключ, а затем запрашивает у меня токен Google Authenticator, а также запрашивает мой пароль. Заставляет меня делать все три - не могу пропустить ни одного из них. Я также попробовал,AuthenticationMethods publickey,keyboard-interactive:pam
как предложено на странице руководства, но это ничего не изменило. Любые идеи?@include common-auth
строку, которую показывают ответы.pam_google_authenticator
Сначала я подумал, что это комментарий к строке в /etc/pam.d/sshd.auth substack password-auth
), но ваш комментарий решил мою проблему!Я, наконец, смог заставить это работать, разместив
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
на:А затем внести те же правки в `` / etc / ssh / sshd`, которые упоминал Линус:
Это должно спросить вас о вашем токене аутентификатора после того, как сервер примет ваш открытый ключ. Он не должен спрашивать ваш пароль.
В качестве примечания: если вы хотите иметь учетную запись пользователя sftp, вам, вероятно, потребуется обойти аутентификатор google, чтобы заставить его работать. Вот предложение о том, как сделать это безопасно с помощью sftp jail. В
etc/ssh/sshd_config
:Вам нужно будет сделать разрешения только для записи / 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 для передачи данных.
источник