Apache LDAP 组身份验证

Apache LDAP 组身份验证

我在 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 绑定的成员信息。这由“系统:读取组成员”权限控制。

相关内容