Я прочитал ответ на этот вопрос:

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-адреса, разрешенного им, из той же таблицы, которую он извлекает. Айпи адрес?

2 ответа2

1

В ответе на вопрос № 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, извините, но я не понимаю, о чем вы спрашиваете, возможно, пример?

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>

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .