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/只有吉姆才能看到。

您可以找到有關不同要求選項的文檔在 Apache HTTPD 2.4 文件中 mod_authz_core / Require 下。對於 Apache 2.2,您需要mod_authnz_ldap 的 Apache HTTPD 2.2 文檔

相關內容