我试图让 PAM 使用托管系统的“passwd”和“shadow”文件来验证正在使用 Web 应用程序的用户。
我使用的是RedHat 6,Apache是2.2,Apache的模块mod_authnz_pam。
apache( httpd.conf
)中的PAM配置如下:
<Location />
AuthType Basic
AuthName "basic_auth"
AuthBasicProvider PAM
AuthPAMService httpd
Require valid-user
</Location>
httpd
我创建了一个名为in 的文件,/etc/pam.d
配置如下:
auth required pam_unix.so
account required pam_unix.so
session required pam_unix.so
SELinux 已启用。getenforce
返回“强制执行”。我还运行了以下
setsebool -P allow_httpd_mod_auth_pam 1
因此,当我尝试访问该 IP 地址时,系统会提示我要求提供用户凭据。但是当我输入系统凭据时,我收到以下日志
unix_chkpwd[29856]:检查通过;用户未知
unix_chkpwd[29856]:用户(用户名)密码检查失败
localhost httpd: pam_unix(httpd:auth): 身份验证失败; logname= uid=48 euid=48 tty= ruser= rhost=xxx.xx.xx.x user=用户名
我的用户名肯定存在于 passwd 和影子文件中,但不知何故 PAM 说它不存在。
我还缺少什么?
答案1
/etc/pam.d/httpd
像这样或类似的设置。
#%PAM-1.0
auth include system-auth
account required pam_nologin.so
account include system-auth
password include system-auth
session optional pam_keyinit force revoke
session include system-auth
session required pam_loginuid.so
这个想法是让 pam 堆栈查看其他文件,而不是尝试验证登录。system-auth
通常由许多其他 pam 服务调用,例如login
、su
和sudo
。