禁用组的 PAM 模块

禁用组的 PAM 模块

我最近在 SSH 服务器上使用 google-authenticator 启用了双因素身份验证。但是我现在面临一个问题:

我的服务器上有一组不同的用户,我将其用于 SFTP,但该组不再能够登录,因为未为该组中的用户设置 2FA。是否可以为该组禁用 google-authenticator 模块?无法为该组中的用户启用它,因为多个用户将使用此帐户。

附言:我用openssh-server

答案1

您可以使用pam_succeed_if模块(参见手册页)之前pam_google_authenticator为您的组跳过此部分:

# the other authentication methods, such as @include common-auth
auth [success=1 default=ignore] pam_succeed_if.so user ingroup group
auth required pam_google_authenticator ...

答案2

一些 SFTP 客户端可以处理 2FA。例如,我将 2FA 与 FileZilla 和 WinSCP 结合使用,它们可以正常工作。此外,我还设置了 ssh-key 身份验证,它可以与 2FA 一起使用。

不过你的问题很有趣,我做了一个简短的调查。我发现这个答案

因此,可以(并且很容易)运行单独的 ssh 实例。我已经测试过了。

  1. 对文件进行单独复制sshd_config

    $ sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config_pwd
    $ sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config_2fa
    
  2. 编辑这些新config文件。您必须更改的内容之一是 shh 端口。根据示例:

    2.a)sshd_config_pwd具体线路为:

    Port 1022
    ...
    PasswordAuthentication yes
    ChallengeResponseAuthentication no
    UsePAM no
    

    2.b)sshd_config_2fa具体线路为:

    Port 2022
    ...
    PasswordAuthentication no
    ChallengeResponseAuthentication yes
    UsePAM yes
    
  3. 在防火墙中打开必要的端口。根据示例:

    $ sudo ufw limit 1022
    $ sudo ufw limit 2022
    
  4. 运行新的 ssh 实例:

    $ sudo /usr/sbin/sshd -f /etc/ssh/sshd_config_pwd
    $ sudo /usr/sbin/sshd -f /etc/ssh/sshd_config_2fa
    

就是这样。

答案3

以下情况将强制使用 Google 2FA全部用户
除了属于须藤行政
(意味着如果来自组 sudo 或 admin 的用户没有配置 2FA,它将根据他们的公钥对他/她进行身份验证):

文件:/etc/pam.d/sshd

auth required pam_google_authenticator.so nullok
auth optional pam_succeed_if.so user ingroup sudo
auth optional pam_succeed_if.so user ingroup admin

文件:/etc/ssh/sshd_config

AuthenticationMethods publickey,keyboard-interactive
UsePAM yes
ChallengeResponseAuthentication yes

结果:

          |  Belongs to sudo or  |  Has 2FA Already Setup      |  Authentication Result
          |  admin group         |  in ~/.google_authenticator | 
----------+----------------------+-----------------------------+------------------------
User A    |          NO          |       NO                    | DENIED LOGIN UNTIL 2FA IS SETUP
User B    |          YES         |       NO                    | CAN LOGIN (PRIVATE/PUBLIC KEY USED)

User C    |          NO          |       YES                   | CAN LOGIN (PRIVATE/PUBLIC KEY AND 2FA USED)

User D    |          YES         |       YES                   | CAN LOGIN (PRIVATE/PUBLIC KEY AND 2FA USED)

根据Google Authenticator 的 README.md 文档

努洛克

PAM 要求模块至少有一个 SUCCESS 答案,而 nullok 会导致此模块说 IGNORE。这意味着如果使用此选项,则必须至少有一个其他模块说 SUCCESS。一种实现方法是将 auth required pam_permit.so 添加到 PAM 配置的末尾。

这使得这里的使用nullok很安全。

相关内容