我已经在 Ubuntu 服务器上安装并配置了 PAM,它运行正常。要登录,我需要安装 SSH 密钥、提供密码以及来自身份验证器应用程序的有效代码。
我的问题是我想根据每个用户添加这些要求的例外情况。
例如,我想为我的用户帐户强制执行所有这些身份验证方法,但指定另一个用户(git - 用于我的 GitLab 安装)仅通过 SSH 密钥访问(无需密码或 2FA 代码),以便推送和拉取行为有效。
目前我发现解决这个问题的唯一方法是auth required pam_google_authenticator.so nullok
在 /etc/pam.d/sshd 文件中进行设置,这样 2FA 部分就是可选的,同时注释掉该@include common-auth
行。然而,这意味着虽然 2FA 部分有效,但我的主帐户不再要求我输入密码。
我尝试做了以下事情:
auth [success=1 default=ignore] pam_succeed_if.so user in git
@include common-auth
但这似乎不起作用。
我需要做什么才能默认启用上述所有身份验证方法,但为特定用户帐户等添加例外git
?
答案1
让我们稍微分解一下这些要求。
配置 SSH
首先,为了要求公钥和密码提供,您需要/etc/ssh/sshd_config
通过添加以下行来修改您的:
AuthenticationMethods publickey,keyboard-interactive
这样,每个人都必须有一个公钥,并且必须能够在登录时提供他们的密码。
要设置例外,请使用Match
块。例如,假设不受限制的用户在come-as-please
组中。然后将以下行添加到文件末尾sshd_config
:
Match Group come-as-please
AuthenticationMethods publickey keyboard-interactive
请注意,没有逗号,这意味着该组的成员可以使用公钥,或者键盘交互(密码)验证。
配置 google-authenticator
要使用 google authenticator 模块,您需要修改该/etc/pam.d/sshd
文件。
@include common-auth
行,添加这行:
auth required pam_google_authenticator.so nullok
此外,为了启用双因素身份验证,您需要修改文件/etc/ssh/sshd_config
,添加以下行:
ChallengeResponseAuthentication yes
此后,重新启动 SSH 守护程序。
设置用户访问权限
经过上述修改后,您拥有以下访问设置:
- 每个用户必须安装公钥,并且必须提供密码。
.google_authenticator
如果用户主目录中有一个文件,那么他们必须并提供相应的验证码。- 本团体的任何成员
come-as-please
:- 如果他们安装了公钥,他们就会不是需要提供密码或验证码,无论他们
.google_authenticator
家里是否有该文件, - 如果他们没有安装公钥,则需要指定密码。如果文件
.google_authenticator
存在于他们的主目录中,则需要提供验证码。
- 如果他们安装了公钥,他们就会不是需要提供密码或验证码,无论他们