我已阅读过这个问题的答案:
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 是否可以使用此 DB 进行授权?
更新:
要明确的是:
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_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,抱歉,但我不明白你在问什么,也许可以举个例子?