当用户想要访问服务器的根目录时,我的 apache 服务器使用 LDAP 来验证用户身份。
我想添加另一个身份验证(无需提示)来允许/禁止已在网站上经过身份验证的用户组(在服务器上的文件中定义)访问特定目录中的页面。
我怎样才能在我的 apache 配置文件中做到这一点?
目前看起来是这样的:
NameVirtualHost *:443
<VirtualHost *:443>
ServerName some.ip.address
SSLEngine on
SSLCertificateFile /etc/ssl/certs/ssl-cert.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert.key
<Directory /var/www/mywebsite>
AllowOverride All
Order deny,allow
Deny from All
AuthType Basic
AuthName "LDAP Access - Mywebsite"
AuthBasicProvider ldap
AuthzLDAPAuthoritative on
AuthLDAPURL "ldap://myldapserver:389/ou=mygroup,dc=mydc,dc=com?uid?sub?(objectClass=*)"
AuthLDAPBindDN "uid=someuser,ou=apache,dc=mydc,dc=com"
AuthLDAPBindPassword "mysuperpassword"
Require valid-user
Satisfy all
</Directory>
<Directory /var/www/mywebsite/directory>
#What do I put in here ?
</Directory>
</VirtualHost>
答案1
假设您想要允许所有有效用户(但不允许未经身份验证的用户)访问您网站的大部分内容,但只允许少数用户或群组访问某些区域,那么您需要执行以下操作:
<Directory /var/www/mywebsite>
# Ldap authentication bits here as now
</Directory>
<Location /secure/>
<RequireAll>
Require group secure
Require not group sales
</RequireAll>
</Location>
<Location /secure/jim/>
<RequireAll>
Require user jim
</RequireAll>
</Location>
另外,如果您仍然停留在 Apache 2.2 上,那么您可以选择如下方法:
<Directory /var/www/mywebsite>
# Ldap authentication bits here as now
</Directory>
<Location /secure/>
Require ldap-group cn=secure
# Negative matching not possible with 2.2
</Location>
<Location /secure/jim/>
Require ldap-user jim
</Location>
有了这样的设置,所有有效用户都可以访问/
,以及网站的大部分内容。然后,在 2.4 版中,只有 LDAP 组中的用户secure
才能访问不是LDAP 组中的用户sales
将能够访问 下的内容/secure/
(在 2.2 中,只有secure
组中的用户才可以访问)。系统不会提示用户重新进行身份验证,将重新使用他们现有的身份验证,并检查用户名/组。最后, 下的内容/secure/jim/
只有 jim 可见。
您可以找到有关不同要求选项的文档在 Apache HTTPD 2.4 文档的 mod_authz_core / Require 下. 对于 Apache 2.2,您需要Apache HTTPD 2.2 的 mod_authnz_ldap 文档