禁用组的PAM模块


10

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

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

PS:我用 openssh-server


在此comment-希望回答它有助于askubuntu.com/a/1051973/846342
Abhimanyu加尔格

Answers:


13

您可以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
可能应该[success=1 default=ignore]改为required。我认为,目前,不在组中的用户将导致身份验证失败。success=1将使其跳过下一个方法,default=ignore这意味着不在组中的用户将简单地转到下一个方法。
muru

@muru是的,您显然是正确的。仍在学习PAM堆栈的细节和所有魔术:)
Jakuje,2016年

这是否取决于您在/ etc / ssh / sshd_config中是否具有多个“ AuthenticationMethods”?添加以上行后,我仍然收到“权限被拒绝(键盘交互)”
Arj

@Arj这意味着您具有不同的配置,因此此特定的答案不适用于您。
雅库耶

1

某些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
    

而已。


这如何回答这个问题?您在修改的内容sshd_config以使用其他PAM堆栈而不使用2FA?
雅库耶

@Jakuje我已经更新了答案。
pa4080 '16

好的,重点是“不使用PAM”。它在某些情况下可能会起作用,但是PAM不仅与身份验证有关,而且还与会话设置有关,因此,PAM可能会每天停止工作。此外,更改端口非常令人困惑,尤其是如果您希望第三方连接到服务器时。是的,可能的解决方案。
雅库耶

是的,这只是一个可能的解决方案,仍然不完整,因为我不知道在系统启动时启动这些单独的ssh实例的优雅方法。
pa4080

0

以下内容将使所有属于sudoadmin组的用户
以外的所有用户必须使用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安全使用此处。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.