我在 CentOS 7 上运行 Apache 2.4.6-93。我需要的是:每个用户都应该有自己的主目录(通过 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/~用户名
但身份验证指向一个硬编码组(在本例中为:group-test-1)。任何属于该组的用户都可以访问其他用户目录。我也可以使用对某些用户进行硬编码Require ldap-user foobar
,但我希望此要求对于访问网站的用户来说是动态的。
就像是:Require ldap-user %username
有没有办法获取 URL 中的用户名并将其用作此参数的变量?
谢谢。
答案1
<DirectoryMatch "/mnt/shared/apache_userdir/(?<username>[^/]+)/private_html">
...
Require ldap-user %{env:MATCH_USERNAME}
</DirectoryMatch>
看目錄匹配,其中有一个与此非常相似的示例。您需要 Apache 2.4.8 或更高版本才能运行。