如果没有提供密码(即使用 ssh-key 进行身份验证),如何禁用 pam_mount?

如果没有提供密码(即使用 ssh-key 进行身份验证),如何禁用 pam_mount?

我使用pam_mount自动挂载 SMB/CIFS 共享在用户登录时运行,到目前为止,这种方法是有效的,但是当有人在没有密码的情况下进行身份验证(通过 ssh-key)时,挂载会失败,因为没有密码可以传递给挂载程序。这将导致错误Permission denied,并算作一次失败的身份验证尝试。问题是,用户帐户在多次身份验证尝试失败后会被锁定。因此,如果您使用 ssh-key,一段时间后您将被锁定。

有没有办法告诉 PAM 如果没有提供密码就不要尝试挂载某些东西?

我在他们的邮件列表中发现了一个选项soft_try_pass可以解决这个问题(https://sourceforge.net/p/pam-mount/mailman/message/19574581/),但此选项不再可用。

这是 Ubuntu 18.04 上的libpam-mount版本2.16-3ubuntu0.1

答案1

我们的 Debian 客户端在 Active Directory 环境中也遇到了同样的问题。为了表明身份验证过程通过密码成功,您可以设置一个环境变量,然后在会话设置期间有条件地挂载该变量。

在以下位置创建 pam mount 配置的修改版本/usr/share/pam-configs/libpam-mount-pw-only

Name: Mount volumes for user (pw auth only)
Default: yes
Priority: 128
Auth-Type: Additional
Auth:
        [success=ok default=2]          pam_exec.so /bin/true
        optional                        pam_env.so envfile=/etc/default/pam-authenticate
        optional                        pam_mount.so
Session-Interactive-Only: yes
Session-Type: Additional
Session:
        [success=ok default=1]          pam_exec.so quiet /usr/bin/printenv PAM_AUTHENTICATE
        optional                        pam_mount.so
Password-Type: Additional
Password:
        optional                        pam_mount.so disable_interactive

然后创建环境文件echo 'PAM_AUTHENTICATE=TRUE' > /etc/default/pam-authenticate并运行pam-auth-update以激活修改后的配置(并停用原始配置)。

如果用户使用 ssh 密钥登录,您将看到pam_exec(sshd:session): /usr/bin/printenv failed: exit code 1(即PAM_AUTHENTICATE未设置)/var/log/auth.log而不是失败的挂载尝试。


注意:如果使用 ssh 密钥,sshd 仍将调用pam_setcred()并解析堆栈。但是,只会执行(请参阅authpam_exec.sopam_authenticate()pam_exec—调用外部命令),以便我们可以在此区分基于密钥的身份验证。

这只是一种解决方法。我更希望有一个特定于卷的选项来pam_mount.conf.xml指示在没有密码的情况下不应尝试安装该卷。

相关内容