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

Как настроить pam sshd, чтобы разрешить разные правила для разных пользователей / групп?

Я настраиваю двухфакторную аутентификацию Google на исходящем сервере в компании, в которой я работаю.

Вот соответствующие конфигурации: /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

Пользователи, которые являются членами группы "gauth", должны быть обязаны предоставить как открытый ключ, так и код проверки Google, который предназначен и работает.

Предполагается, что пользователи, которые не являются членами группы «gauth», должны предоставлять открытый ключ, но на самом деле они могут подключаться к машине без предоставления открытого ключа или пароля.

На машине есть один специальный пользователь, который называется «спасатель», и предполагается, что этого пользователя заставят предоставить только пароль, и его цель - никогда не блокироваться на машине, но на самом деле пользователь может подключиться без пароль вообще.

Мой вопрос в том, как мне обеспечить соблюдение моих «предполагаемых» правил, что означает следующее:

Как это сделать?

Редактировать # 1:

Следуя ответу FaCe, я настроил /etc/ssh/sshd_config вот так:

Я изменил PasswordAuthentication обратно на «Yes» и «ChallengeResponseAuthentication» обратно на «No» для всего файла, а затем добавил в конец файла следующие строки:

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

После сброса службы ssh я не могу войти в систему, независимо от того, какого пользователя я использую, я получаю следующую ошибку:

ssh_exchange_identification: Connection closed by remote host

И ничего не отображается в /var/log/auth.log.

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

Вам необходимо использовать несколько директив Match Group:

Match Group foo
    # blah settings
Match Group bar
    # blah settings
    ...
Standard settings
Match Group guath
    PasswordAuthentication no
    ChallengeResponseAuthentication yes
    AuthenticationMethods publickey,keyboard-interactive

Не уверен насчет вашей версии Ubuntu, но в Debian Jessie ChallengeResponseAuthentication ключевое слово не может быть частью Match блок. Согласно 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.