Назад | Перейти на главную страницу

Групповая аутентификация Apache LDAP

Я использую Apache 2.4.18 на Ubuntu 16.04.

Я пытаюсь запустить сайт WebDAV в Apache и аутентифицировать пользователей, которые являются членами определенной группы 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 файл. Эта проблема возникла до добавления дополнительных записей для локального файла.

FreeIPA, начиная с версии 4.0, не позволяет видеть информацию о членстве в неаутентифицированных привязках LDAP. Это контролируется разрешением «Система: Чтение членства в группе».