當使用者想要存取伺服器的根目錄時,我的 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 文檔