针对 PAM 的 PostgreSQL 用户身份验证

针对 PAM 的 PostgreSQL 用户身份验证

我正在尝试通过 PAM 为 PostgreSQL 9.3 设置身份验证。我已经设法在 Ubuntu 12.04 服务器上运行它,但我无法在 Centos-6 安装上运行它。

相关pg_hba.conf行:

host    all             all             0.0.0.0/0               pam     pamservice=postgresql93

pam.d/postgressql93是官方 postgresql 9.3 包附带的默认配置:

#%PAM-1.0

auth            include         password-auth
account         include         password-auth

当用户尝试进行身份验证时,secure日志中会报告以下内容:

hostname unix_chkpwd[31807]: check pass; user unknown
hostname unix_chkpwd[31808]: check pass; user unknown
hostname unix_chkpwd[31808]: password check failed for user (myuser)
hostname  postgres 10.1.0.1(61459) authentication: pam_unix(postgresql93:auth): 
    authentication failure; logname= uid=26 euid=26 tty= ruser= rhost=  user=myuser

config相关内容password-auth为:

auth        required      pam_env.so
auth        sufficient    pam_unix.so nullok try_first_pass
auth        requisite     pam_succeed_if.so uid >= 500 quiet
auth        required      pam_deny.so

account     required      pam_unix.so
account     sufficient    pam_localuser.so
account     sufficient    pam_succeed_if.so uid < 500 quiet
account     required      pam_permit.so

问题出在pam_unix.so。它无法验证密码,也无法检索用户信息(当我删除auth的条目时pam_unix.so)。

Centos-6 安装才 5 天,所以没有太多负担。

unix_chkpwdsuid 并且对每个人都具有执行权限,因此它应该能够检查影子文件(根本没有权限?)。

答案1

我通过将 Centos 的设置更改为更像 Ubuntu 中的设置解决了该问题。

我创建了一个shadow组 ID 较低且没有成员的组。我将组 更改为/etc/shadow和 ,/sbin/unit_chkpwd并将其更改为创建的组shadow。最后我创建了unix_chkpwdSGID:

----r----- 1 root shadow 1049 Aug 22 16:38 /etc/shadow
-rwxr-sr-x 1 root shadow 34840 Nov 22  2013 /sbin/unix_chkpwd

通过这些更改,我能够使用 PAM 对 PostgreSQL 的系统用户进行身份验证。我不认为这些更改对安全性造成了很大损害。尽管现在非 root 用户(如果属于 shadow 组)可以读取 shadow 文件。

相关内容