启用 pam_google_authenticator 后 libPAM 库身份验证失败

启用 pam_google_authenticator 后 libPAM 库身份验证失败

我已启用以下行/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_filenameNULLbufbuf[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;
} 

将匹配(这是添加debugPAM 标志可能会有所帮助的地方),这意味着get_secret_filename返回NULL,这意味着if (secret_filename) {失败,这意味着SECRETNOTFOUND无法设置该标志,因为open_secret_file从未被调用。然后是很多代码,但我猜它会失败,正如您所观察的那样(debug可能会在这里告诉您更多信息)。

解决这种情况的几种不同选择不言自明。

修补代码

因此,一种解决方法可能是修补get_secret_filename以设置

params->nullok = SECRETNOTFOUND;

当主目录不存在(在各个地方)时,或者可能默认设置但在返回不存在的内容params->nullok = SECRETNOTFOUND时关闭 。加上逻辑审核,以帮助确保您不会以某种方式在此处创建安全漏洞。get_secret_filenameNULL

为用户提供一个他们无法写入的空主目录

一个更简单的选择可能是使用/var/empty或某些内容作为这些用户的主目录,在这种情况下,该SECRETNOTFOUND标志可能会被正确设置。 (您可能想要审核是否没有添加任何内容/var/empty,并且这些用户当然不得具有更改该目录的权限。)

PAM 并发症

Linux PAM 允许您跳过后续规则,因此也许有一个 PAM 模块,如果主目录为空(或类似情况),其结果就是跳过后续pam_google_authenticator.so规则。

(我可能会给用户一个他们无法写入的主目录。)

相关内容