我讀過這個問題的答案:
https://stackoverflow.com/questions/4102763/apache-basic-authentication- except-for-those-allowed
它幫助我了解如何不對某些用戶進行身份驗證(根據 IP):
<Directory /var/www/files/>
Order deny,allow
Deny from all
Allow from 192.168.1.2
Satisfy Any
AuthUserFile /etc/apache2/basic.pwd
AuthName "Please enter username and password"
AuthType Basic
Require valid-user
</Directory>
假設我有這個資料庫(與用於身份驗證的資料庫不同):
User IP
Mark 192.168.1.2
Mike 192.168.1.3
Karl 192.168.1.4
1- 我可以使用 Apache 中的配置允許儲存在資料庫中的所有 IP 位址嗎?
2-另一個問題是允許的IP的授權遺失,如果允許使用者無需身份驗證即可取得頁面,Apache可以使用此資料庫進行授權嗎?
更新:
需要明確的是:
1-我不需要靜態解決方案,我希望 Apache 允許資料庫中提到的表中的所有 IP(資料庫正在動態更改)。
2-我們知道,當Apache對用戶進行身份驗證時,它從身份驗證憑證中知道用戶名,但是如果允許,用戶名將會丟失,我希望Apache從它提取的同一個表中提取其允許的IP的用戶名IP位址?
答案1
您可以嘗試建議的答案這裡使用mod_rewrite
文件黑名單:
## WHITELIST IPS ##
RewriteMap ipslist txt:/path/to/whitelist.txt
RewriteCond %{REMOTE_ADDR} ^(.*)$
RewriteCond ${ipslist:%1|black} ^black$ [NC]
RewriteRule (.*) - [F]
您可以嘗試使用動態的東西,例如mod_authn_dbd從資料庫中選擇使用者名稱和密碼:
# mod_dbd configuration
DBDriver pgsql
DBDParams "dbname=apacheauth user=apache password=xxxxxx"
DBDMin 4
DBDKeep 8
DBDMax 20
DBDExptime 300
<Directory /usr/www/myhost/private>
# core authentication and mod_auth_basic configuration
# for mod_authn_dbd
AuthType Basic
AuthName "My Server"
AuthBasicProvider dbd
# core authorization configuration
Require valid-user
# mod_authn_dbd SQL query to authenticate a user
AuthDBDUserPWQuery \
"SELECT password FROM authn WHERE user = %s"
</Directory>
答案2
在回答#1時,你可以擁有任意數量的IP...範例:
Allow from 192.168.1.2
Allow from 192.168.1.3
Allow from 192.168.1.4
甚至
Allow from 192.168.1.2 192.168.1.3 192.168.1.4
以及許多其他內容,包括範圍。
對於#2,抱歉,我不明白你在問什麼,也許是一個例子?