我在 Ubuntu 16.04 上运行 Apache 2.4.18。
我正在尝试在 Apache 中运行 WebDAV 站点并对属于特定 LDAP 组的用户进行身份验证。LDAP 服务器是 FreeIPA,尽管我认为这并不重要。
以下(使用真实主机名)不起作用 -
<Location /webdav>
DAV On
AuthName "webdav"
AuthType Basic
LogLevel Debug
AuthBasicProvider ldap file
AuthLDAPURL ldap://server0.subdomain.example.com:389/cn=users,cn=accounts,dc=subdomain,dc=example,dc=com?uid TLS
#AuthLDAPBindDN "uid=myuser,cn=users,cn=accounts,dc=subdomain,dc=example,dc=com"
#AuthLDAPBindPassword mypassword
AuthUserFile "/usr/local/apache/passwd/passwords"
AuthGroupFile "/usr/local/apache/passwd/groups"
Require ldap-group cn=itsupport,cn=groups,cn=accounts,dc=subdomain,dc=example,dc=com
Require group itsupport
</Location>
以下具有有效的主机名做工作 -
<Location /webdav>
DAV On
AuthName "webdav"
AuthType Basic
LogLevel Debug
AuthBasicProvider ldap file
AuthLDAPURL ldap://server0.subdomain.example.com:389/cn=users,cn=accounts,dc=subdomain,dc=example,dc=com?uid TLS
AuthLDAPBindDN "uid=myuser,cn=users,cn=accounts,dc=subdomain,dc=example,dc=com"
AuthLDAPBindPassword mypassword
AuthUserFile "/usr/local/apache/passwd/passwords"
AuthGroupFile "/usr/local/apache/passwd/groups"
Require ldap-group cn=itsupport,cn=groups,cn=accounts,dc=subdomain,dc=example,dc=com
Require group itsupport
</Location>
如您所见,唯一的区别是第二个版本使用经过身份验证的绑定。LDAP 服务器不是需要绑定才能进行只读访问。这已在 PHP、ldapsearch 甚至同一个 Apache2 文件中得到证实,如果我执行以下操作 -
<Location /webdav>
DAV On
AuthName "webdav"
AuthType Basic
AuthBasicProvider ldap file
AuthLDAPURL ldap://server0.subdomain.example.com:389/cn=users,cn=accounts,dc=subdomain,dc=example,dc=com?uid TLS
#AuthLDAPBindDN "uid=myuser,cn=users,cn=accounts,dc=subdomain,dc=example,dc=com"
#AuthLDAPBindPassword mypassword
AuthUserFile "/usr/local/apache/passwd/passwords"
AuthGroupFile "/usr/local/apache/passwd/groups"
#Require ldap-group cn=itsupport,cn=groups,cn=accounts,dc=subdomain,dc=example,dc=com
#Require group itsupport
Require valid-user
</Location>
(这个第三个版本仅仅验证 ldap 用户并不检查组成员身份,即使没有绑定也可以工作。)
使用经过身份验证的绑定的版本确实有效,因此可以用作解决方案,但它需要在 Apache 文件中以纯文本形式输入密码,并且在 LDAP 服务器上拥有一个不会过期的帐户,这就是为什么我尝试让它在没有绑定的情况下工作。
注意:除了上述情况之外,我还成功地将 LDAP 与文件中本地存储的帐户结合使用/usr/local/apache/passwd/passwords
。此问题早于为本地文件添加额外条目。
答案1
从 4.0 版开始,FreeIPA 不允许查看未经身份验证的 LDAP 绑定的成员信息。这由“系统:读取组成员”权限控制。