我已经安装了 Apache 2.2 和mod_auth_pam2
来自 ports 的版本,但无法使本地 UNIX 身份验证正常工作。当我访问本地网站的受保护部分时,我确实收到了身份验证请求,并且使用pam_permit.so
,它可以正常工作。但是,当我更改pam_permit.so
为真正的 时,pam_unix.so
我在 中收到此消息httpd-error.log
:
[error] PAM: user 'foo' - not authenticated: authentication error
这是我的 Apache 配置的相关部分,尽管我不认为这是问题,因为 PAM 显然有效:
<Location /foo>
AuthBasicAuthoritative Off
AuthPAM_Enabled on
AuthPAM_FallThrough off
AuthType Basic
AuthName "Secret place"
Require valid-user
</Location>
这是我的/etc/pam.d/httpd
,虽然我也不认为这是问题,因为它适用于pam_permit.so
:
auth required pam_unix.so
account required pam_unix.so
那么我遗漏了什么?在 FreeBSD 下pam_unix.so
工作需要什么?httpd
答案1
我不确定问题出在哪里;我认为这是因为www
没有权限访问/etc/passwd
。我认为授予它此访问权限是个糟糕的主意(即使只是尝试),所以我从端口中删除mod_auth_pam2
并安装了mod_authnz_external
。pwauth
它还有一个显着的优势,那就是它是一个authnz
模块(而不是一个auth
模块),可以更好地与最新版本的 Apache 配合使用。效果很好!
这是我的新(相关)httpd 配置:
AddExternalAuth pwauth /usr/local/bin/pwauth
SetExternalAuthMethod pwauth pipe
<Location /foo>
AuthType Basic
AuthName "Secret place"
AuthBasicProvider external
AuthExternal pwauth
Require valid-user
Require group wheel
</Location>
和/etc/pam.d/pwauth
:
auth required pam_unix.so
account required pam_unix.so