我补充道
auth requisite pam_deny.so
/etc/pam.d/
作为 中每个文件(包括)的第一行sshd
,但 SSH 连接仍然成功,没有问题。这是在默认的 Google Cloud Ubuntu 实例上,因此它设置了某种神秘的身份验证。我怎样才能使我的拒绝命令被应用?
基本检查
/etc/ssh/sshd_config
有线UsePAM yes
/etc/ssh/sshd_config
已禁用其他身份验证方法:HostbasedAuthentication no IgnoreUserKnownHosts yes IgnoreRhosts yes PasswordAuthentication no ChallengeResponseAuthentication no KerberosAuthentication no GSSAPIAuthentication no UseLogin no
/etc/nsswitch.conf
没有自passwd
定义条目:passwd: compat group: compat shadow: compat gshadow: files hosts: files dns networks: files protocols: db files services: db files ethers: db files rpc: db files
重启
sshd
服务google
停止名称中包含的所有服务journalctl -f
通过 SSH 登录时没有关于身份验证机制的提示- Google Cloud 项目的 OS Login 已停用,
google_oslogin_control
其状态显示为deactivated
我使用在 Google Cloud 项目元数据中配置的项目范围 SSH 密钥登录。实例用于cloud-init
设置 SSH 密钥等,但我找不到任何关于可以配置哪些内容来覆盖 PAM 的身份验证机制的提示。
任何关于什么可以覆盖 PAM 的身份验证机制的提示都将不胜感激!
注意:这样做的目的是最终启用 PAM 模块进行双因素身份验证。
答案1
由于两个不同的原因,deny 命令会被忽略,这对应于两个绕过 PAM 身份验证的系统。
运行时它将被忽略
sudo
,因为用户配置了该标志。此标志在包含以下行的NOPASSWD
文件中启用:/etc/sudoers.d
%google-sudoers ALL=(ALL:ALL) NOPASSWD:ALL
并且我的用户属于该
google-sudoers
组。由于手动的说:默认情况下,sudo 要求用户在运行命令之前进行身份验证。此行为可以通过 NOPASSWD 标记进行修改。
因此使用可以
sudo
完全绕过身份验证(包括 PAM)。使用公钥通过 SSH 登录时会忽略它,因为 SSH 公钥身份验证会绕过 PAM。
man sshd_config
在 Ubuntu 18.04 上通过以下方式访问的手册称如果设置为是,这将启用使用 ChallengeResponseAuthentication 和 PasswordAuthentication 的 PAM 身份验证,以及所有身份验证类型的 PAM 帐户和会话模块处理。
因此,PAM 身份验证仅适用于两种类型的身份验证:质询响应和密码。PAM 不适用于公钥身份验证。
AuthenticationMethods publickey,keyboard-interactive
您可以通过添加到 来强制应用拒绝/etc/sshd_config
。这要求用户使用两种方法进行身份验证:首先通过公钥(这不会使用 PAM),然后通过质询响应(这将使用 PAM)。