我使用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()
并解析堆栈。但是,只会执行(请参阅auth
pam_exec.so
pam_authenticate()
pam_exec—调用外部命令),以便我们可以在此区分基于密钥的身份验证。
这只是一种解决方法。我更希望有一个特定于卷的选项来pam_mount.conf.xml
指示在没有密码的情况下不应尝试安装该卷。