Como configurar o google-authenticator e definir regras de correspondência específicas para permitir regras de login diferentes?

6

Estou tentando definir o Google-Authenticator (autenticação de fator do google 2).

Os arquivos relevantes são:

[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

Seguindo os guias na Internet, para ativar o Google-2fa, você precisa editar /etc/pam.d/sshd e adicionar esta linha:

auth      required    pam_google_authenticator.so

Você precisa editar /etc/ssh/sshd_config e alterar essas linhas da seguinte maneira:

PasswordAuthentication no
ChallengeResponseAuthentication yes

No meu caso, o Google 2FA funciona e permite que os usuários que configuraram o google-authenticator façam login fornecendo tanto OTP quanto senha, mas quando tento me conectar ao usuário raiz na máquina de uma máquina na mesma rede, minha senha é rejeitado (mesmo que seja a senha correta). Quando tento me conectar ao root @ machine, o problema parece assim:

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

E em /var/log/secure :

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

Eu nunca executei google_authenticator no usuário do root, então não sei por que ele está procurando por ele.

O que estou tentando alcançar é o seguinte:

  1. Eu quero que "PermitRootLogin" seja definido como "no" globalmente (ao conectar-se ao servidor a partir do mundo externo), mas que ele será definido como "yes" se o IP da máquina remota corresponder à regra que especifica a rede local (como pode ser visto no arquivo de configuração).

  2. Eu quero que os usuários que configuraram o google-2fa ainda consigam se conectar, fornecendo tanto OTP quanto senha.

Pode ser que a linha em /etc/pam.d/sshd esteja mal colocada, mas não tenho certeza onde devo colocá-la.

Alguém sabe como fazer isso funcionar com essas regras?

    
por Itai Ganot 17.07.2016 / 16:35

1 resposta

1

Você perdeu um pequeno detalhe do manual :

nullok

Allow users to log in without OTP, if they haven't set up OTP yet.

Seu arquivo pam.d/sshd deve incluir isso:

auth      required    pam_google_authenticator.so    nullok

Se você não usa nullok , todos os usuários sem a configuração de autenticação do google serão bloqueados. Usando nullok , eles ainda podem fazer o login sem o 2FA até configurá-lo.

    
por 13.09.2017 / 20:00