我一直在尝试在Red Hat服务器上使用PAM配置postgresql,以便我可以通过pgAdmin远程访问服务器,并使用PAM进行本地(服务器)身份验证。
我编辑了pg_hba.conf文件并更改了相应的行:
host postgres all 0.0.0.0/0 md5
并添加了这个:
host pam_testing all 0.0.0.0/0 pam pamservice=postgresql95
此外,我使用与用于使用putty登录的用户名相同的用户名创建数据库用户(无密码,只需创建用户xxx)
当我尝试使用pgAdmin远程登录到postgres数据库(使用md5)和我的数据库用户时,一切运行顺利。
但是当我尝试使用我的服务器用户名(使用putty通过ssh登录)连接(也是远程,使用pgAdmin)到pam_testing数据库并输入密码时出现以下错误:
连接到服务器时出错:致命:PAM身份验证失败 用户XXX
BUT!当我通过putty连接到本地登录到pam_testing时,它可以工作!我的系统用户登录并进行身份验证,没有任何问题。它只发生在用户身上,我使用create user添加到数据库中。
我猜它一定是某种身份验证问题(可能是服务器?它属于公司,我不知道它使用的其他身份验证方法)但我不确定。有什么想法吗?
系统:红帽6.8, Postgresql:9.5
提前致谢!
答案 0 :(得分:0)
执行systemctl | grep unix_chkpwd
,如果您看到这样的行
unix_chkpwd[13081]: check pass; user unknown
unix_chkpwd[13081]: password check failed for user (<username>)
然后你遇到了同样的问题。
要解决此问题,您需要授予postgres
用户对/etc/shadow
文件的读取权限。您可以通过acl:setfacl -m g:postgres:r /etc/shadow
执行此操作,也可以创建一些组,授予其权限,然后向其添加postgres
。然后执行systemctl restart postgresql.service
。
在this post中描述了使用pam进行身份验证的基本机制。关键时刻如下:unix_chkpwd
在想要验证某人的进程的uid下运行,因此如果它不是root(并且/etc/shadow
被使用,我相信这是常见的情况),它无法完成它的工作。