Я установил 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 Спасибо за помощь.
Две очевидные вещи неверны:
Php phpinfo ()?>
в тестовом файле возвращает обработанную страницу, показывающую установленную версию PHP и т. Д. Требовать 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 показано, как группы должны быть настроены для работы.