我正在验证用户,我想确定用户是否已知(有效的现有用户名)或未知用户。
int ret = pam_authenticate(pamh, PAM_DISALLOW_NULL_AUTHTOK);
现在,即使用户名未知,pam_authenticate
也会返回PAM_AUTH_ERR
而不是(预期)PAM_USER_UNKNOWN
。
如何查找用户名是否已知?
答案 0 :(得分:3)
由于程序将在内部运行,因此您可以通过阅读/etc/passwd
来检测用户名是否存在。该文件的第一个条目是用户名。由于EJP指出的原因,PAM本身不会告诉用户名是否存在。
答案 1 :(得分:1)
答案 2 :(得分:0)
此处的结果取决于系统使用的后端的结果。 这些后端及其顺序在/etc/nsswitch.conf中设置
它们的形式为:
passwd: files MODNAME
group: files MODNAME
hosts: files dns
其中“MODNAME”对应于位于以下位置的文件:
/lib64/security/pam_MODNAME.so
(或32位系统的/ lib / security)。
Modname可以是compat
或ldap
或任何网络相关数据库。
您在pam_authenticate中获得的结果取决于/etc/pam.d/
和/etc/nsswitch.conf
配置的配置。
如果“passwd”部分中有“file”以外的任何内容,请尝试删除辅助后端(但要注意保留恢复它的方法)。
如果仅使用“files”数据库(对应于/ etc / passwd和/ etc / shadow),您仍然没有获得“PAM_USER_UNKNOWN”,那么它肯定与PAM相关。否则,它的后端是相关的。