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

13

Многие учебные пособия говорят вам настроить ваш 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» в «no», чтобы действительно отключить PAM-аутентификацию. Об этом говорится в справочных страницах FreeBSD, что может помочь немного прояснить ситуацию:

Обратите внимание, что если ChallengeResponseAuthentication имеет значение «yes», и политика аутентификации PAM для sshd включает pam_unix (8), аутентификация по паролю будет разрешена через механизм запроса-ответа независимо от значения PasswordAuthentication.

http://www.unixlore.net/articles/five-minutes-to-more-secure-ssh.html

c33s
источник

Ответы:

23

может быть, точный вопрос, как настроить PAM для запрета паролей?

Верный. Вы уже наткнулись на тот факт, что настройка, UsePAM noкак правило, плохой совет. Он не только предотвращает любую форму проверки подлинности на основе PAM, но также отключает accountи sessionмодули. Контроль доступа и настройка сеанса - это хорошо.

Сначала создадим список требований:

  • ОТП через 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 config

Нам все еще нужно настроить PAM. Предполагая чистую установку Debian 8 (по вашему вопросу):

  • Комментарий @include common-authот /etc/pam.d/sshd.
  • Проверьте /etc/pam.d/sshdи подтвердите, что строки, начинающиеся с auth, отсутствуют. Не должно быть, если это чистая установка, но лучше быть безопасным.
  • Добавить authзапись для pam_google_authenticator.so.

Помните, что локальные пароли все еще работают.

Мы не вносили никаких изменений, которые могли бы повлиять на вход в систему через локальную консоль или запретить пользователям использовать пароли для обновления своих привилегий через sudo.Это было за рамками вопроса. Если вы решили пойти дальше, помните, что root всегда должен иметь возможность локального входа в систему с помощью пароля. В противном случае вы рискуете заблокировать себя из системы.

Андрей Б
источник
еще не проверял это, но это выглядит логичным и с 5 голосами против, я думаю, что могу принять это.
c33s
Я проверил себя. если вы хотите полностью отключить пароль, вы также должны установить ChallengeResponseAuthentication no. см. blog.tankywoo.com/linux/2013/09/14/…
анонимный
@anonymous Обратитесь к вопросу ОП и первому пункту. Отключение ChallengeResponseAuthenticationнарушает метод интерактивной аутентификации с помощью клавиатуры, который необходим для модулей аутентификации PAM, которые обрабатывают OTP. (желательно для OP) Отключение CRA безопасно выполнять только в том случае, если в стеке действительно есть нулевые модули PAM, authкоторые необходимо запустить. Если PasswordAuthenticationи GSSAPIAuthenticationотключены, пароль не будет принят, если PAM не имеет включенного модуля авторизации, который запрашивает его.
Андрей Б
(тем не менее, это все еще отличная ссылка)
Эндрю Б
1

запретить запрос пароля

прокомментировать эту строку

#auth       substack     password-auth

в /etc/pam.d/sshd

и убедитесь, что в конце этой строки не будет nullok, за исключением случаев, когда будет нормально проходить аутентификацию через ssh без использования OTP

auth required pam_google_authenticator.so
JOduMonT
источник