我正在我工作的公司的出站服务器上配置谷歌双重身份验证。
以下是相关配置
/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”组成员的用户应该被强制提供公钥和谷歌验证码,这是预期的和有效的。
不是“gauth”组成员的用户应该被强制提供公钥,但实际上他们可以在不提供公钥或密码的情况下连接到机器。
机器上有一个称为“救援”的特殊用户,该用户应该被强制只提供密码,其目的是永远不会被锁定在机器之外,但实际上用户可以在没有密码的情况下连接密码。
我的问题是,我如何执行我的“假定”规则,这意味着:
- “gauth”组的用户必须同时提供公钥和 Google OTP
- 不是“gauth”组成员的用户只能通过提供公钥登录。
- 用户“rescue”应该只能通过提供密码(或同时提供公钥)登录。
怎么做到呢?
编辑#1:
按照 FaCe 的回答,我的配置/etc/ssh/sshd_config
如下:
对于整个文件,我已将 PasswordAuthentication 改回“是”,将“ChallengeResponseAuthentication”改回“否”,然后在文件底部添加以下行:
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
.
任何人都可以对此事有所了解吗?
您需要使用多个匹配组指令:
不确定您的 Ubuntu 版本,但在 Debian Jessie 上,
ChallengeResponseAuthentication
关键字不能是Match
块的一部分。根据man sshd_config
: