Иногда жизненно необходимо ограничить доступ к hhtp серверу или какой либо директории этого сервера. Это делается с помощью настроек в файле .htaccess. Данный файл с настройками помещается в требуемую директорию сайта или в корень сайта.
Чтобы файл .htaccess нормально отрабатывал необходимо в конфиге apache httpd.conf включить директиву AllowOverride на значения All или AuthConfig.
- AllowOverride none – файлы .htaccess игнорируются веб-сервером.
- AllowOverride All – обрабатываются все директивы из файлов .htaccess.
- AllowOverride AuthConfig – разрешены директивы аутентификации-авторизации, такие как AuthName, AuthType, AuthUserFile, AuthGroupFile, Require и т.д.
В конфиге httpd.conf также должны присутствовать строки
AccessFileName .htaccess
<Files ~ "^\.ht">
Order allow,deny
Deny from all
Satisfy All
</Files>
После внесения изменений в httpd.conf не забудьте перезапустить сервер apache.
Basic аутентификация.
Давайте разберемся на примере файла .htaccess
AuthName "Private area. Access denied."
AuthType Basic
AuthUserFile "/usr/local/apache/conf/passwords"
require user user1 user2 user3
Немного поясню..
- AuthName – запрос авторизации, слова можете выдумать свои 🙂
- AuthType Basic – тип аутентификации базовый, пароль по сети передается в открытом виде.
- AuthUserFile – указание файла, где хранятся связка имя пользователя пароль (пароль хранится в зашифрованном виде)
- require user – какие пользователи могут авторизовываться. Ведь иногда бывает так что не всем пользователям из списка можно разрешать доступ к чему-то
Создаем файл связки имя пользователя – пароль. Делается это с помощью команды, которая входит в состав apache сервера – htpasswd. Первый раз файл с паролем создаем с ключем “-с”, в дальнейшем это делать не надо, иначе перетрете файл.
#htpasswd -c /usr/local/apache/conf/passwords mik
#New password:
#Re-type new password:
#Adding password for user mik
В следующий раз для добавления пользователей используйте команду
#htpasswd -n user2
New password:
Re-type new password:
user2:IUqTwlxNkMHSg
и копируете получившийся результат в новую строку файла паролей.
Опция “require valid-user” воспринимает всех пользователей из списка паролей.
Можно еще сделать доступ по группам. Для этого необходимо создать файл для групп, например с названием groups. Структура файла должа быть такой
group1: user1 user2
group2: user3 user4
теперь мы имеем две группы group1 и group2 с перечислением пользователей в каждой из групп.
Файл .htaccess для авторизации по группе только по group1 выглядит так:
AuthName "Private area. Access denied."
AuthType Basic
AuthUserFile "/usr/local/apache/conf/passwords"
AuthGroupFile "/usr/local/apache/conf/groups"
Require group group1
Чуть не забыл, можно не создавать файл .htaccess а прописывать все это внутри httpd.conf. Например так
<Directory "/usr/local/apache/htdocs">
AuthType Basic
AuthName "Private area. Access denied."
AuthUserFile "/usr/local/apache/conf/passwords"
AuthGroupFile "/usr/local/apache/conf/groups"
Require valid-user
AllowOverride All
Options Indexes FollowSymLinks
</Directory>
Не забывайте перезапускать apache после изменений.
Digest аутентификация
Это более продвинутый и сложный тип авторизации. Связка имя пользователя – пароль передается по сети в зашифрованном виде, что затрудняет перехват и ее расшифровку. Единственное, что надо от apache – это поддержка модуля mod_auth_digest. Если вы собираете apache сами, то собирать надо с ключем –enable-auth-digest.
Все остальное как и в basic авторизации. Немного отличается создание связки имя пользователя – пароль. Здесь еще надо указывать секретную область. Делается все это с помощью команды htdigest.
# ./htdigest -c /usr/local/apache/conf/dpasswords private mik
Adding password for mik in realm private.
New password:
Re-type new password:
Здесь private – указываем секретную область, mik – имя пользователя.
Файл .htacces будет выглядеть так:
AuthType Digest
AuthName private
AuthUserFile "/usr/local/apache/conf/dpasswords"
Require user mik
Для авторизации по группам структура файла groups такая же как и в basic и точно также задается переменной AuthGroupFile. Можно также прописывать авторизацию в конфиг httpd.conf.