LDAP 身份验证和子目录

LDAP 身份验证和子目录

当用户想要访问服务器的根目录时,我的 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 文档

相关内容