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

Ошибка apache для пароля самообслуживания

Я установил apache2 и пароль самообслуживания, чтобы пользователи могли изменять свой пароль. Ниже представлена ​​конфигурация виртуального хоста:

<VirtualHost *:80>
    ServerName ldap.local.domain

    Redirect "/" "https://ldap.local.domain/"

    DocumentRoot /usr/share/self-service-password/

</VirtualHost>

<IfModule mod_ssl.c>
    <VirtualHost _default_:443>
        ServerName ldap.local.domain

        DocumentRoot /usr/share/self-service-password
        DirectoryIndex index.php

        <Directory /usr/share/self-service-password>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                <IfVersion < 2.3>
                    Order Allow,Deny
                    Allow from all
                </IfVersion>
                AuthType Basic
                AuthName "LDAP Auth"
                AuthBasicProvider ldap
                AuthLDAPURL "ldaps://ldap.local.domain:636/ou=users,dc=local,dc=domain?uid"
                AuthLDAPBindDN "cn=admin,dc=local,dc=domain"
                AuthLDAPBindPassword "password"
                AuthLDAPGroupAttribute memberUid
                AuthLDAPGroupAttributeIsDN off
                #Require valid-user
                Require ldap-group cn=users,dc=local,dc=domain
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        SSLEngine on

        SSLCertificateFile  /etc/ssl/certs/ldap.local.domain.crt
        SSLCertificateKeyFile /etc/ssl/private/ldap.local.domain.key

        <FilesMatch "\.(cgi|shtml|phtml|php)$">
                SSLOptions +StdEnvVars
        </FilesMatch>
        <Directory /usr/lib/cgi-bin>
                SSLOptions +StdEnvVars
        </Directory>
    </VirtualHost>
</IfModule>

вот соответствующая часть /usr/share/self-service-password/conf/config.inc.php:

# LDAP
$ldap_url = "ldaps://ldap.local.domain:636";
$ldap_starttls = false;
$ldap_binddn = "cn=admin,dc=local,dc=domain";
$ldap_bindpw = "password";
$ldap_base = "ou=users,dc=local,dc=domain";
$ldap_login_attribute = "uid";
$ldap_fullname_attribute = "cn";
$ldap_filter = "(&(objectClass=posixAccount)($ldap_login_attribute={login}))";

А вот мой olcDatabase = {1} mdb.ldif:

# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify.
# CRC32 66c2cad8
dn: olcDatabase={1}mdb
objectClass: olcDatabaseConfig
objectClass: olcMdbConfig
olcDatabase: {1}mdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=local,dc=domain
olcAccess: {0}to attrs=userPassword by self write by anonymous auth by * non
 e
olcAccess: {1}to attrs=shadowLastChange by self write by * read
olcAccess: {2}to * by * read
olcLastMod: TRUE
olcRootDN: cn=admin,dc=local,dc=domain
olcRootPW:: hash for password
olcDbCheckpoint: 512 30
olcDbIndex: objectClass eq
olcDbIndex: cn,uid eq
olcDbIndex: uidNumber,gidNumber eq
olcDbIndex: member,memberUid eq
olcDbMaxSize: 1073741824
structuralObjectClass: olcMdbConfig
entryUUID: 857185a4-3c66-1037-9df1-259f49a65dac
creatorsName: cn=config
createTimestamp: 20171003091101Z
entryCSN: 20171003091101.722630Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20171003091101Z

Когда я пытаюсь войти в систему с пользователем, apache_error.log выдает ошибку:

`[Fri Oct 06 12:23:27.417041 2017] [authz_core:error] [pid 20125:tid 139717928494848] [client 10.0.10.4:33488] AH01631: user test: authorization failure for "/":`

Когда я меняю директиву Require в vhost, я просто получаю исходный код приложения. Мне интересно, что я здесь делаю не так? Я запускаю приложение и openldap на одном хосте в Ubuntu 16.04 Спасибо за помощь.

Две очевидные вещи ошибочны:

  1. Интерпретатор PHP неправильно настроен на вашем веб-сервере, вы просто возвращаете необработанный код PHP. Вам нужно повторно посетить конфигурацию PHP (mod_php) и убедиться, что что-то вроде <?php phpinfo() ?> в тестовом файле возвращает обработанную страницу, показывающую установленную версию PHP и т. д.
  2. Require ldap-group cn=users,dc=local,dc=domain говорит, что все пользователи должны быть членами этой группы, тогда как вы указываете тот же DN в качестве базы поиска, поэтому я подозреваю, что это не так. Либо используйте Require valid-user что просто требует, чтобы каждый пользователь мог подключиться к каталогу со своим паролем или использовать существующую группу. Документация на https://httpd.apache.org/docs/2.4/mod/mod_authnz_ldap.html#requiredirectives показывает, как группы должны быть настроены, чтобы это работало.