我已启用以下行/etc/pam.d/common-auth
:
auth required pam_google_authenticator.so nullok
使用 nullok 选项,它不应该在未设置时询问 OTP(例如:当主文件夹中不存在 .google_authenticator 文件时)。
我有一些用户,他们没有主文件夹(我使用 PAM 系统验证该用户的密码,仅此而已)
通过以下库进行测试:https ://github.com/FirefighterBlu3/python-pam
python3 pam.py
Username: ...
Password: ...
Auth result: Authentication failure (7)
当我禁用auth required pam_google_authenticator.so nullok
时,身份验证正常:
python3 pam.py
Username: ...
Password: ...
Auth result: Success (0)
启用 google_authenticator 后,如何检查没有主文件夹的用户的密码?
代码到处都是;如果设置失败,
open_secret_file
只需设置一个SECRETNOTFOUND
标志,对于缺少主目录的用户应该如此。设置更好的跟踪可能有助于准确显示日志消息的结果,并且从那里您可能会更好地了解代码的确切位置。nullok
open
debug
同时,
open_secret_file
仅在secret_filename
非时才被称为NULL
,如果是,我们可能需要知道是什么buf
(在不同的地方使用,有时是分配的,有时是 abuf[1000]
,呸)才能知道stopped_by_rate_limit
事情是否发生。无论如何,
get_secret_filename
表明秘密文件的默认位置可以更改为非主目录的位置。您的“没有主文件夹的人”到底是什么意思?因为如果该字段为空,则其中之一将匹配(这是添加
debug
PAM 标志可能有帮助的地方),这意味着get_secret_filename
返回NULL
,这意味着if (secret_filename) {
失败,这意味着SECRETNOTFOUND
无法设置标志,因为open_secret_file
从未调用过。然后是很多代码,但我猜它会在你观察到的时候失败(debug
可能会在这里告诉你更多)。解决这种情况的几种不同选择建议了它们自己。
修补代码
因此,一种解决方法可能是修补
get_secret_filename
以设置当主目录不存在时(在不同的地方),或者可能默认设置但在返回不存在的内容
params->nullok = SECRETNOTFOUND
时关闭 。加上对逻辑的审核,以帮助确保您不会在此处以某种方式创建安全漏洞。get_secret_filename
NULL
为用户提供他们无法写入的空主目录
一个更简单的选项可能是
/var/empty
为这些用户使用主目录或其他东西,在这种情况下,SECRETNOTFOUND
标志可能会正确设置。(并且您可能想要审核没有添加任何内容/var/empty
,当然这些用户必须无权更改该目录。)PAM 并发症
Linux PAM 允许您跳过后续规则,因此可能有一个 PAM 模块,如果主目录为空(或其他),其结果是跳过后续
pam_google_authenticator.so
规则。(我可能会给用户一个他们无法写入的主目录。)