PAM身份验证+ pgAdmin远程失败,但在本地工作

时间:2016-09-22 09:52:10

标签: postgresql authentication ssh pgadmin pam

我一直在尝试在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

提前致谢!

1 个答案:

答案 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被使用,我相信这是常见的情况),它无法完成它的工作。