Как настроить google-authenticator и настроить конкретные правила соответствия, чтобы разрешить разные правила входа?

Я пытаюсь установить Google-Authenticator (двухфакторная аутентификация Google).

Соответствующие файлы:

[root@srv01 ~]# cat /etc/pam.d/sshd
#%PAM-1.0
auth      required    pam_google_authenticator.so
auth      required    pam_sepermit.so
auth      include     password-auth
account   required    pam_nologin.so
account   include     password-auth
password  include     password-auth
# pam_selinux.so close should be the first session rule
session   required    pam_selinux.so close
session   required    pam_loginuid.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session   required    pam_selinux.so open env_params
session   required    pam_namespace.so
session   optional    pam_keyinit.so force revoke
session   include     password-auth


[root@srv01 ~]# egrep -v '^#' /etc/ssh/sshd_config | sed '/^$/d'
Protocol 2
SyslogFacility AUTHPRIV
PermitRootLogin no
PasswordAuthentication no
ChallengeResponseAuthentication yes
GSSAPIAuthentication yes
GSSAPICleanupCredentials yes
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
X11Forwarding yes
Subsystem       sftp    /usr/libexec/openssh/sftp-server
UsePAM yes
Match Address 10.13.0.*
  PermitRootLogin yes
  PasswordAuthentication yes

Следуя инструкциям по интернету, для включения Google-2fa необходимо отредактировать /etc/pam.d/sshd и добавьте эту строку:

auth      required    pam_google_authenticator.so

И тогда вам нужно отредактировать /etc/ssh/sshd_config и измените эти строки следующим образом:

PasswordAuthentication no
ChallengeResponseAuthentication yes

В моем случае Google 2FA работает и позволяет пользователям, которые настроили google-authenticator, войти в систему, предоставив как OTP, так и пароль, но когда я пытаюсь подключиться к пользователю root на машине с машины в той же сети, мой пароль отклоняется (даже хотя это правильный пароль). Когда я пытаюсь подключиться к root@machine, проблема выглядит так:

Using username "root".
Using keyboard-interactive authentication.
Password:
Access denied
Using keyboard-interactive authentication.
Password:

И в /var/log/secure:

 sshd(pam_google_authenticator)[10990]: Failed to read "/root/.google_authenticator"

Я никогда не запускал google_authenticator для пользователя root, поэтому не знаю, почему он его ищет.

То, что я пытаюсь достичь, заключается в следующем:

  1. Я хочу, чтобы "PermitRootLogin" был установлен на "нет" глобально (при подключении к серверу из внешнего мира), но что он будет установлен на "да", если IP-адрес удаленной машины соответствует правилу, которое определяет локальную сеть (как видно в файле конфигурации).

  2. Я хочу, чтобы пользователи, которые настроили google-2fa, по-прежнему могли входить в систему, предоставляя как OTP, так и пароль.

Может быть, что линия в /etc/pam.d/sshd неуместен, но я не уверен, куда мне его поместить.

Кто-нибудь знает, как заставить это работать с этими правилами?

1 ответ

Вы пропустили одну небольшую деталь из руководства:

nullok

Разрешить пользователям входить в систему без OTP, если они еще не настроили OTP.

Ваш pam.d/sshd файл должен включать это:

auth      required    pam_google_authenticator.so    nullok

Если вы не используете nullok, все пользователи без настройки аутентификации Google будут заблокированы. С помощью nullok, они все еще могут войти без 2FA, пока не настроят его.

Другие вопросы по тегам