Авторизация Apache для разрешенных пользователей?

726
Networker

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

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

0
Я не следую "имя пользователя будет потеряно". Вы можете объяснить? Кроме того, обычной практикой является создание этих файлов конфигурации динамически в подобном случае. Не можете ли вы создать эту директиву при обновлении БД? Charlie Schliesser 9 лет назад 0
«имя пользователя будет потеряно» означает, что Apache может следить за пользователями так же, как и при использовании информации аутентификации, «вы не можете создать эту директиву при обновлении БД?» это будет очень плохо влиять на производительность (перезапуск `httpd` после каждого изменения в БД). плюс моя БД сильно меняется @ CharlieS Networker 9 лет назад 0
Не перезагружайте его, просто перезагрузите конф. Charlie Schliesser 9 лет назад 0
«перезагрузка» не достаточно хороша, это не очень хорошее решение Networker 9 лет назад 0
Ответ на http://stackoverflow.com/a/4677061/630614 может решить часть этого. Но если вы хотите использовать Auth, это может потребовать другой привязки или перезагрузки конфигурации (что не вредит работе пользовательских сеансов). Charlie Schliesser 9 лет назад 0
@CharlieS, спасибо, это может помочь, как насчет второй проблемы. Networker 9 лет назад 0
Сделайте еще немного поиска :) http://httpd.apache.org/docs/2.2/mod/mod_authn_dbd.html Charlie Schliesser 9 лет назад 0
эта страница полезна для аутентификации пользователей, чтобы не авторизовать его Networker 9 лет назад 0

2 ответа на вопрос

1
Tyson

In answer to #1 you can have as many IP's allowed as you want... examples:

Allow from 192.168.1.2 Allow from 192.168.1.3 Allow from 192.168.1.4 

or even

Allow from 192.168.1.2 192.168.1.3 192.168.1.4 

and many others including ranges.

for #2, sorry but I'm not understanding what you're asking, perhaps an example?

Я не хочу статического решения, я хочу, чтобы Apache разрешил все IP-адреса из упомянутой таблицы в БД, см. Обновления Networker 9 лет назад 0
@ Networker Я задержал еще один ответ, пока у меня не было возможности просматривать документы Apache. Я не уверен, что полезно предоставлять «пользователя» для доступа, предоставляемого IP. За исключением того, что это имя используется для поиска в файле .htpasswd, я не вижу способа получить значение, которое использовалось из другого приложения. Аутентификация Httpclient также не очень хорошая безопасность, пароли отправляются на сервер в виде открытого текста. Если вам нужны пользовательские входы в систему для приложения, используйте более сложную систему в этом приложении. Для чего хорош httpclient Auth - это держать поисковых роботов, любопытных пользователей и т. Д. Вне сайта разработки или тестирования. Tyson 9 лет назад 1
@Networker Тем не менее ... У вас может быть задание cron, которое запрашивает базу данных и повторно генерирует файл .htaccess каждые X минут, чтобы справиться с необходимостью обновления авторизованных IP-адресов. Tyson 9 лет назад 0
1
Charlie Schliesser

Вы можете попробовать ответ, предложенный здесь для использования mod_rewriteв черный список из файла:

## WHITELIST IPS ## RewriteMap ipslist txt:/path/to/whitelist.txt RewriteCond % ^(.*)$ RewriteCond $ ^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> 
+1, потому что это имеет смысл, но не решает мою вторую проблему Networker 9 лет назад 0
Извините, но я перечитываю вторую проблему и не понимаю, о чем вы спрашиваете. Что вы подразумеваете под «пользователь потерян», «аутентифицируется, но не авторизуется»? Charlie Schliesser 9 лет назад 0
аутентификация: кто вы, авторизация: что вы можете сделать? поэтому я хочу, чтобы пользователи, которые не проходили аутентификацию, авторизовались по IP или БД Networker 9 лет назад 0
Я лично реализовал бы это на уровне приложений, поскольку это стало бы более легко переносимым и тестируемым. Charlie Schliesser 9 лет назад 1

Похожие вопросы