Linux PAM:SSH 密钥 + 2FA(谷歌身份验证器)+ 密码 - 指定每个用户的身份验证要求

Linux PAM:SSH 密钥 + 2FA(谷歌身份验证器)+ 密码 - 指定每个用户的身份验证要求

我已经在 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存在于他们的主目录中,则需要提供验证码。

相关内容