Назад | Перейти на главную страницу

Как использовать ssh-сервер с PAM, но запретить аутентификацию по паролю?

Во многих руководствах вам предлагается настроить свой 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 модули. Контроль доступа и настройка сеанса - это хорошо.

Для начала составим список требований:

  • OTP через pam_google_authenticator.so. Это требует UsePAM yes и ChallengeResponseAuthentication yes. В конце концов, вы просите их ввести учетные данные!
  • Никаких других форм аутентификации по паролю через PAM. Это означает отключение любых auth модуль, который, возможно, позволит передать пароль через keyboard-interactive логины. (который мы должны оставить включенным для OTP)
  • Аутентификация на основе ключей. Нам нужно потребовать publickey аутентификация и, возможно, gssapi-with-mic если у вас настроен Kerberos.

Обычно аутентификация с помощью ключа полностью пропускает аутентификацию на основе PAM. Это остановило бы нас по пути со старыми версиями openssh, но Debian 8 (jessie) поддерживает AuthenticationMethods директива. Это позволяет нам требовать несколько методов аутентификации, но работает только с клиентами, реализующими SSHv2.


конфигурация sshd

Ниже приведены строки, которые я предлагаю /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

Нам еще нужно настроить 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