Como configurar o pam sshd para permitir regras diferentes em diferentes usuários / grupos?

1

Estou configurando a autenticação de dois fatores do google em um servidor de saída na empresa em que trabalho.

Aqui estão as configurações relevantes: /etc/ssh/sshd_config :

ubuntu@stage-itai-1:~$ egrep -v '^#' /etc/ssh/sshd_config  | sed '/^\s*$/d'
Port 22
Protocol 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
UsePrivilegeSeparation yes
KeyRegenerationInterval 3600
ServerKeyBits 1024
SyslogFacility AUTH
LogLevel INFO
LoginGraceTime 120
PermitRootLogin without-password
StrictModes yes
RSAAuthentication yes
PubkeyAuthentication yes
IgnoreRhosts yes
RhostsRSAAuthentication no
HostbasedAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication yes
PasswordAuthentication no
X11Forwarding yes
X11DisplayOffset 10
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes
AcceptEnv LANG LC_*
Subsystem sftp /usr/lib/openssh/sftp-server
UsePAM yes
Match Group gauth
    AuthenticationMethods publickey,keyboard-interactive

/etc/pam.d/sshd :

ubuntu@stage-itai-1:~$ egrep -v '^#' /etc/pam.d/sshd  | sed '/^\s*$/d'
auth required pam_google_authenticator.so nullok
account    required     pam_nologin.so
@include common-account
session [success=ok ignore=ignore module_unknown=ignore default=bad]        pam_selinux.so close
session    required     pam_loginuid.so
session    optional     pam_keyinit.so force revoke
@include common-session
session    optional     pam_motd.so  motd=/run/motd.dynamic noupdate
session    optional     pam_motd.so # [1]
session    optional     pam_mail.so standard noenv # [1]
session    required     pam_limits.so
session    required     pam_env.so # [1]
session    required     pam_env.so user_readenv=1 envfile=/etc/default/locale
session [success=ok ignore=ignore module_unknown=ignore default=bad]        pam_selinux.so open
@include common-password

Os usuários que são membros do grupo "gauth" devem ser impostos para fornecer códigos de públicas e de verificação do Google, que sejam intencionais e funcionem.

Usuários que não são membros do grupo "gauth" devem ser obrigados a fornecer publickey, mas na realidade eles podem se conectar à máquina sem fornecer uma chave pública ou uma senha.

Existe um usuário especial na máquina que é chamado de "resgate" e este usuário deve ser forçado a fornecer apenas uma senha e seu objetivo é nunca ser bloqueado para fora da máquina, mas na realidade o usuário é capaz de conectar sem uma senha.

Minha pergunta é: como faço para impor minhas regras "supostas", o que significa que:

  • os usuários do grupo "gauth" devem fornecer a chave pública e o Google OTP
  • usuários que não são membros do grupo "gauth" devem poder fazer o login apenas fornecendo uma chave pública.
  • O
  • usuário "rescue" deve poder fazer o login apenas fornecendo uma senha (ou fornecendo também uma chave pública).

Como isso pode ser feito?

Editar # 1:

Após a resposta do FaCe, eu configurei /etc/ssh/sshd_config da seguinte forma:

Eu alterei PasswordAuthentication de volta para "Yes" e "ChallengeResponseAuthentication" de volta para "No" para o arquivo inteiro e, em seguida, adicionei na parte inferior do arquivo as seguintes linhas:

Match Group guath
    PasswordAuthentication no
    ChallengeResponseAuthentication yes
    AuthenticationMethods publickey,keyboard-interactive
Match User rescue
    PasswordAuthentication yes
    ChallengeResponseAuthentication no
    AuthenticationMethods password

Após a redefinição do serviço ssh, não consigo fazer login, independentemente do usuário que estou usando, recebo o seguinte erro:

ssh_exchange_identification: Connection closed by remote host

E nada é exibido em /var/log/auth.log .

Alguém por favor pode lançar alguma luz sobre o assunto?

    
por Itai Ganot 14.06.2016 / 10:28

2 respostas

1

Você precisa usar várias diretivas do Grupo de correspondências:

Match Group foo
    # blah settings
Match Group bar
    # blah settings
    ...
Standard settings
    
por 14.06.2016 / 10:57
0
Match Group guath
    PasswordAuthentication no
    ChallengeResponseAuthentication yes
    AuthenticationMethods publickey,keyboard-interactive

Não tenho certeza sobre sua versão do Ubuntu, mas no Debian Jessie, a palavra-chave ChallengeResponseAuthentication não pode fazer parte de um bloco Match . Como por man sshd_config :

Only a subset of keywords may be used on the lines following a Match keyword. 

Available keywords are:
             AcceptEnv, AllowAgentForwarding, AllowGroups, AllowTcpForwarding, AllowUsers, AuthenticationMethods,
             AuthorizedKeysCommand, AuthorizedKeysCommandUser, AuthorizedKeysFile, AuthorizedPrincipalsFile, Banner,
             ChrootDirectory, DenyGroups, DenyUsers, ForceCommand, GatewayPorts, GSSAPIAuthentication,
             HostbasedAuthentication, HostbasedUsesNameFromPacketOnly, KbdInteractiveAuthentication,
             KerberosAuthentication, MaxAuthTries, MaxSessions, PasswordAuthentication, PermitEmptyPasswords,
             PermitOpen, PermitRootLogin, PermitTTY, PermitTunnel, PermitUserRC, PubkeyAuthentication, RekeyLimit,
             RhostsRSAAuthentication, RSAAuthentication, X11DisplayOffset, X11Forwarding and X11UseLocalHost.
    
por 04.12.2016 / 11:42