【发布时间】:2018-01-30 08:52:35
【问题描述】:
我创建了一个自定义 PAM 模块,以使用我的自定义身份验证方法登录 Linux。 在我的模块完成身份验证后,它会从数据库接收 Linux 用户帐户的实际用户名和密码(明文)。
现在我正在尝试使用以下方式设置用户名和密码:
pam_set_item(pamh, PAM_USER, user) 和pam_set_item(pamh, PAM_AUTHTOK, passwd),在做pam_start("m_pamconf", user, &conv, &pamh) 之后。
“m_pamconf”是我的 pam 配置文件,其中包含:
auth pam_unix.so nullok_secure use_first_pass
使用此方法成功设置了用户名,但密码似乎不起作用,因为我收到密码提示(如果使用我提供的密码,这当然不会发生)。
感谢任何帮助。谢谢。
我在使用 try_first_pass 标志时收到密码提示,
如果我改用use_first_pass,模块就会失败并在调试日志中给出以下错误:
auth could not identify password for [username]
这是我的 /etc/pam.d/sudo :
#%PAM-1.0
# my pam test
auth requisite pam_test.so
session required pam_env.so readenv=1 user_readenv=0
session required pam_env.so readenv=1 envfile=/etc/default/locale user_readenv=0
@include common-auth
@include common-account
@include common-session-noninteractive
第一行使用我创建的模块,我尝试通过执行pam_start("mypamd", user, &conv, &pamh) 然后pam_authenticate(pamh, 0) 使用上面“m_pamconf”中指定的pam_unix.so 的auth 方法对用户进行身份验证。
【问题讨论】:
-
密码应该永远以纯文本形式保存在任何地方。
-
如果您收到密码提示,那么我怀疑您的自定义 PAM 模块要么被完全忽略(设置错误?)要么失败,然后是另一个身份验证策略。
-
@arkascha 密码不以明文形式存储。我的意思是我以明文设置密码。而且我已将我的 pam 配置设置为“必需”,因此,我很确定它没有使用另一个模块进行身份验证。
-
此外,该模块不会被忽略,因为我正在从中获取调试控制台。
-
好吧,在您的问题中,您写道:“它从数据库接收 Linux 用户帐户的实际用户名和密码(明文)”。如果不这样存储怎么办?