Как определить, известен ли пользователь или не использует pam_authenticate?
Я аутентифицирую пользователя и хочу определить, известен ли он (действительное имя пользователя) или неизвестен.
int ret = pam_authenticate(pamh, PAM_DISALLOW_NULL_AUTHTOK);
Теперь, даже если имя пользователя неизвестно, pam_authenticate
возвращается PAM_AUTH_ERR
вместо (ожидается) PAM_USER_UNKNOWN
,
Как узнать, известно ли имя пользователя или нет?
3 ответа
Поскольку программа будет работать внутри, вы можете определить, существует ли имя пользователя, прочитав /etc/passwd
, Первая запись файла - это имя пользователя. Сам PAM не сообщает, существует ли имя пользователя по причинам, указанным EJP.
Результат здесь зависит от результатов бэкэндов, используемых вашей системой. Эти серверные части и их порядок установлены в /etc/nsswitch.conf
Они в форме:
passwd: files MODNAME
group: files MODNAME
hosts: files dns
Где "MODNAME" соответствует файлу, расположенному в:/lib64/security/pam_MODNAME.so
(или / lib / security для 32-битных систем).
Модмэйн может быть что-то вроде compat
или же ldap
или любая связанная с сетью база данных.
Результат, который вы получите в pam_authenticate, зависит от конфигурации вашего /etc/pam.d/
и ваш /etc/nsswitch.conf
конфигурации.
Если у вас есть что-то кроме "file" в разделе "passwd", попробуйте удалить вторичный бэкэнд (но будьте осторожны, чтобы сохранить способ его восстановления).
Если только с базой данных "файлы" (которая соответствует / etc / passwd и /etc/shadow) вы все еще не получаете "PAM_USER_UNKNOWN", это определенно связано с PAM. В противном случае, это связано с бэкэндом.