Я использую 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. Это контролируется разрешением «Система: Чтение членства в группе».