Ssh
如何配置 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”組成員的使用者應該被強制提供公鑰,但實際上他們可以在不提供公鑰或密碼的情況下連接到機器。
機器上有一個稱為“救援”的特殊使用者,該使用者應該被強制只提供密碼,其目的是永遠不會被鎖定在機器之外,但實際上使用者可以在沒有密碼的情況下連接密碼。
我的問題是,我如何執行我的“假定”規則,這意味著:
- “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
.任何人都可以對此事有所了解嗎?
您需要使用多個匹配組指令:
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.