我正在尝试通过 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_chkpwd
suid 并且对每个人都具有执行权限,因此它应该能够检查影子文件(根本没有权限?)。
答案1
我通过将 Centos 的设置更改为更像 Ubuntu 中的设置解决了该问题。
我创建了一个shadow
组 ID 较低且没有成员的组。我将组 更改为/etc/shadow
和 ,/sbin/unit_chkpwd
并将其更改为创建的组shadow
。最后我创建了unix_chkpwd
SGID:
----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 文件。