Во многих руководствах вам предлагается настроить свой ssh-сервер следующим образом:
ChallengeResponseAuthentication no
PasswordAuthentication no
UsePAM no
но с этой настройкой вы не можете использовать PAM, так как я планирую использовать двухфакторную аутентификацию с Google Authenticator (OTP Onetime Password), мне нужен PAM.
Итак, как настроить свежий debian jessie ssh deamon, если я хочу предотвратить вход с обычным паролем, но все же разрешить использовать PAM.
может быть, точный вопрос в том, как настроить pam для запрета паролей?
Подробная информация об аутентификации PAM
Отключение аутентификации по паролю на основе PAM довольно неинтуитивно. Он необходим практически во всех дистрибутивах GNU / Linux (за заметным исключением Slackware) вместе с FreeBSD. Если вы не будете осторожны, вы можете установить для PasswordAuthentication значение «no» и по-прежнему входить в систему, используя только пароль через аутентификацию PAM. Оказывается, вам нужно установить «ChallengeResponseAuthentication» на «нет», чтобы действительно отключить аутентификацию PAM. На страницах руководства FreeBSD есть следующее, что может немного прояснить ситуацию:
Обратите внимание, что если ChallengeResponseAuthentication имеет значение «yes», а политика аутентификации PAM для sshd включает pam_unix (8), аутентификация по паролю будет разрешена через механизм запроса-ответа независимо от значения PasswordAuthentication.
http://www.unixlore.net/articles/five-minutes-to-more-secure-ssh.html
может быть, точный вопрос в том, как настроить pam для запрета паролей?
Верный. Вы уже сталкивались с тем, что настройка UsePAM no
это вообще плохой совет. Он не только предотвращает любую форму аутентификации на основе PAM, но также отключает account
и session
модули. Контроль доступа и настройка сеанса - это хорошо.
Для начала составим список требований:
pam_google_authenticator.so
. Это требует UsePAM yes
и ChallengeResponseAuthentication yes
. В конце концов, вы просите их ввести учетные данные!auth
модуль, который, возможно, позволит передать пароль через keyboard-interactive
логины. (который мы должны оставить включенным для OTP)publickey
аутентификация и, возможно, gssapi-with-mic
если у вас настроен Kerberos.Обычно аутентификация с помощью ключа полностью пропускает аутентификацию на основе PAM. Это остановило бы нас по пути со старыми версиями openssh, но Debian 8 (jessie) поддерживает AuthenticationMethods
директива. Это позволяет нам требовать несколько методов аутентификации, но работает только с клиентами, реализующими SSHv2.
Ниже приведены строки, которые я предлагаю /etc/ssh/sshd_config
. Убедитесь, что у вас есть способ получить доступ к этой системе без sshd
на случай, если что-нибудь сломаешь!
# Require local root only
PermitRootLogin no
# Needed for OTP logins
ChallengeResponseAuthentication yes
UsePAM yes
# Not needed for OTP logins
PasswordAuthentication no
# Change to to "yes" if you need Kerberos. If you're unsure, this is a very safe "no".
GSSAPIAuthentication no
# Require an OTP be provided with key based logins
AuthenticationMethods publickey,keyboard-interactive
# Use this instead for Kerberos+pubkey, both with OTP
#
#AuthenticationMethods gssapi-with-mic,keyboard-interactive publickey,keyboard-interactive
Не забудьте перезагрузить sshd
после внесения этих изменений.
Нам еще нужно настроить PAM. Предполагая чистую установку Debian 8 (на ваш вопрос):
@include common-auth
из /etc/pam.d/sshd
./etc/pam.d/sshd
и убедитесь, что нет строк, начинающихся с auth
присутствуют. Не должно быть, если это чистая установка, но лучше перестраховаться.auth
запись для pam_google_authenticator.so
.Мы не вносили никаких изменений, которые могли бы повлиять на вход в систему через локальную консоль или запретить пользователям использовать пароли для обновления своих привилегий через sudo.
Это выходило за рамки вопроса. Если вы решите пойти дальше, помните, что root всегда должен иметь разрешение на локальный вход через пароль. В противном случае вы рискуете случайно заблокировать себя из системы.
запретить запрос пароля
#auth substack password-auth
в /etc/pam.d/sshd
и убедитесь, что в конце этой строки нет nullok, если только не будет нормально проходить аутентификацию через ssh без использования OTP
auth required pam_google_authenticator.so