我已启用以下行/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 后,如何检查没有主文件夹的用户的密码?
答案1
代码到处都是;open_secret_file
只需设置一个
SECRETNOTFOUND
标志(如果nullok
设置)并且失败open
,就像对于缺少主目录的用户一样。设置debug
更好的跟踪可能有助于准确显示日志消息的结果,并且从那里您可以更好地了解代码的确切去向。
同时,仅当 is non-open_secret_file
时才被调用,如果是这样,我们可能需要知道 is是什么(它在不同的地方使用,有时被分配,有时是,恶心)来知道事情是否 发生。secret_filename
NULL
buf
buf[1000]
stopped_by_rate_limit
无论如何,get_secret_filename
表明秘密文件的默认位置可以更改为主目录之外的某个位置。您的“没有主文件夹的人”到底是什么意思?因为如果该字段为空,则其中之一
if (!pw->pw_dir) {
log_message(LOG_ERR, pamh, "user(\"%s\") has no home dir", username);
goto errout;
}
if (*pw->pw_dir != '/') {
log_message(LOG_ERR, pamh, "User \"%s\" home dir not absolute", username);
goto errout;
}
将匹配(这是添加debug
PAM 标志可能会有所帮助的地方),这意味着get_secret_filename
返回NULL
,这意味着if (secret_filename) {
失败,这意味着SECRETNOTFOUND
无法设置该标志,因为open_secret_file
从未被调用。然后是很多代码,但我猜它会失败,正如您所观察的那样(debug
可能会在这里告诉您更多信息)。
解决这种情况的几种不同选择不言自明。
修补代码
因此,一种解决方法可能是修补get_secret_filename
以设置
params->nullok = SECRETNOTFOUND;
当主目录不存在(在各个地方)时,或者可能默认设置但在返回不存在的内容params->nullok = SECRETNOTFOUND
时关闭 。加上逻辑审核,以帮助确保您不会以某种方式在此处创建安全漏洞。get_secret_filename
NULL
为用户提供一个他们无法写入的空主目录
一个更简单的选择可能是使用/var/empty
或某些内容作为这些用户的主目录,在这种情况下,该SECRETNOTFOUND
标志可能会被正确设置。 (您可能想要审核是否没有添加任何内容/var/empty
,并且这些用户当然不得具有更改该目录的权限。)
PAM 并发症
Linux PAM 允许您跳过后续规则,因此也许有一个 PAM 模块,如果主目录为空(或类似情况),其结果就是跳过后续pam_google_authenticator.so
规则。
(我可能会给用户一个他们无法写入的主目录。)