如何确定用户是否已知使用pam_authenticate?

时间:2013-10-30 10:41:40

标签: c++ linux pam

我正在验证用户,我想确定用户是否已知(有效的现有用户名)或未知用户。

int ret = pam_authenticate(pamh, PAM_DISALLOW_NULL_AUTHTOK);

现在,即使用户名未知,pam_authenticate也会返回PAM_AUTH_ERR而不是(预期)PAM_USER_UNKNOWN

如何查找用户名是否已知?

3 个答案:

答案 0 :(得分:3)

由于程序将在内部运行,因此您可以通过阅读/etc/passwd来检测用户名是否存在。该文件的第一个条目是用户名。由于EJP指出的原因,PAM本身不会告诉用户名是否存在。

答案 1 :(得分:1)

Ruben的答案是正确的,但我没有直接从/etc/passwd OR /etc/shadow阅读,而是使用了linux函数getpwnamgetspnam,它们为您做同样的工作。

答案 2 :(得分:0)

此处的结果取决于系统使用的后端的结果。 这些后端及其顺序在/etc/nsswitch.conf中设置

它们的形式为:

passwd: files MODNAME
group:  files MODNAME
hosts:  files dns

其中“MODNAME”对应于位于以下位置的文件: /lib64/security/pam_MODNAME.so(或32位系统的/ lib / security)。

Modname可以是compatldap或任何网络相关数据库。

您在pam_authenticate中获得的结果取决于/etc/pam.d//etc/nsswitch.conf配置的配置。

如果“passwd”部分中有“file”以外的任何内容,请尝试删除辅助后端(但要注意保留恢复它的方法)。

如果仅使用“files”数据库(对应于/ etc / passwd和/ etc / shadow),您仍然没有获得“PAM_USER_UNKNOWN”,那么它肯定与PAM相关。否则,它的后端是相关的。

相关问题