Я прочитал ответ на этот вопрос:
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- Могу ли я разрешить все IP-адреса, хранящиеся в базе данных, с помощью конфигурации в Apache?
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, извините, но я не понимаю, о чем вы спрашиваете, может быть, пример?