Я запускаю Apache 2.4.6-93 на CentOS 7. Мне нужно: у каждого пользователя должен быть свой домашний каталог (достигается через UserDir), но каталоги должны быть Пароль защищен. Один пользователь не должен видеть каталог другого пользователя.
Мне удалось настроить аутентификацию с помощью AD следующим образом:
<Directory "/mnt/shared/apache_userdir/*/private_html">
AllowOverride FileInfo AuthConfig Limit Indexes
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
Require method GET POST OPTIONS
AuthName "Please Login"
AuthBasicProvider ldap
AuthType Basic
AuthLDAPGroupAttribute member
AuthLDAPGroupAttributeIsDN On
AuthLDAPURL ldap://x.x.x.x:389/DC=example,DC=org?sAMAccountName?sub?(objectClass=*)
AuthLDAPBindDN CN=binduser,OU=someou,OU=anotherou,DC=example,DC=org
AuthLDAPBindPassword somepassword
Require ldap-group CN=group-test-1-,OU=someou,OU=anotherou,DC=example,DC=org
Это работает. Пользователь может получить доступ к своему домашнему каталогу, используя: https://example.com/~username
Но аутентификация указывает на жестко заданную группу (в данном случае: group-test-1). Любой пользователь, входящий в эту группу, получит доступ к другим пользовательским каталогам. Я также мог бы жестко запрограммировать некоторых пользователей, используя Требовать ldap-user foobar
, но я хочу, чтобы это требование было динамическим для пользователя, который обращается к веб-сайту.
Что-то вроде: Требовать ldap-user% имя пользователя
Есть ли способ получить имя пользователя в URL-адресе и использовать его в качестве переменной для этого параметра?
Спасибо.
<DirectoryMatch "/mnt/shared/apache_userdir/(?<username>[^/]+)/private_html">
...
Require ldap-user %{env:MATCH_USERNAME}
</DirectoryMatch>
См. DirectoryMatch, где есть очень похожий пример. Вам нужен Apache 2.4.8 или выше, чтобы он работал.