Ограничение доступа с помощью .htaccess
Статья давно не обновлялась, поэтому информация могла устареть.
В случае использования для работы сайтов веб-сервера Apache, есть возможность ограничения доступа с помощью файла .htaccess, действие которого распространяется либо на одну директорию, либо на все вложенные поддиректории. Существует несколько видов ограничения доступа, которые могут пригодиться в разных случаях. Рассмотрим эти возможные варианты:
Содержание |
Ограничение по IP-адресу
Конструкция подобного ограничения очень проста:
order allow,deny deny from 1.1.1.1 deny from 2a01:230::6d0a:8406:c4e4:9e19 deny from 10.10 deny from 192.168.0.0/24 deny from domain.dom allow from all
Системные требования для работы этих правил: Веб-сервер Apache 2.2.x с подключенным модулем mod_authz_host.
В этом примере я привел все возможные вариации ограничения доступа. И ниже разберем каждую строку в отдельности.
Первая строка задает логику работы последующих правил. В каком порядке будут выполняться блокирующие и разрешающие правила.
Вторая и третья строки блокируют доступ по конкретным IP-адресам (ipv4 и ipv6 соответственно).
Четвертая строка показывает, что можно указывать частично IP-адрес и в таком случае (как указано в примере) будет обрабатываться как подсеть /16.
Пятая строка - можно блокировать целыми сетями и подсетями, указывая диапазон.
Для работы вариантов блокировки как в шестой строке потребуется включить параметр HostnameLookups.
И, наконец, последняя строка allow from all говорит о том, что всем остальным доступ разрешен.
Ограничение по паролю
Рассмотрим простейший вариант ограничения доступа с авторизацией по логину и паролю
AuthType Basic AuthName "Доступ ограничен паролем" AuthUserFile /path/to/.htpasswd
Системные требования для работы такой конструкции: Веб-сервер Apache 2.2.x с подключенными модулями auth_basic, authn_file.
Генерация пароля
Создание пары "логин-пароль" происходит с непосредственным участием приложения htpasswd, которая входит в дистрибутивную поставку Apache. При запуске без параметров данная утилита выведет справку, перевод которой я располагаю ниже
Использование: htpasswd [-cmdpsD] passwordfile username htpasswd -b[cmdpsD] passwordfile username password htpasswd -n[mdps] username htpasswd -nb[mdps] username password -c Создать новый файл. -n Не обновлять файл, вывести результат на экран. -m Зашифровать пароль с помощью [[MD5]]. -d Зашифровать пароль с помощью [[CRYPT]] (по умолчанию). -p Не шифровать пароль (открытый текст). -s Зашифровать пароль с помощью [[SHA]]. -b Указать пароль в параметре командной строки. -D Удалить указанного пользователя. На [[Windows]], [[NetWare]] и [[TPF]] системах флаг '-m' используется по умолчанию. На всех остальных системах флаг '-p' может не работать.
Примеры работы htpasswd
Таким образом, чтобы создать файл с логином и паролем для авторизации с зашифрованным паролем в MD5, потребуется выполнить команду:
- htpasswd -bcm /path/to/.htpasswd sampleuser samplepass
Adding password for user sampleuser
Результатом будет файл .htpasswd со строкой
sampleuser:$apr1$i5Kx715D$qkWbaZLztXohMGOdfCUy5/
Для того, чтобы добавить пользователя к уже существующим в файл, выполните команду
- htpasswd -bm /path/to/.htpasswd sampleuser1 samplepass1
Updating password for user sampleuser1
В случае, если в файле указано больше одного пользователя и вам требуется удалить какого-либо, то команда будет выглядеть так:
- htpasswd -D /path/to/.htpasswd sampleuser2
Deleting password for user sampleuser2
Полезные ссылки
- http://httpd.apache.org/docs/2.2/howto/htaccess.html - описание файла .htaccess
- http://httpd.apache.org/docs/2.2/mod/mod_auth_basic.html - описание модуля auth_basic
- http://httpd.apache.org/docs/2.2/mod/mod_authn_file.html - описание модуля authn_file
- http://tools.dynamicdrive.com/password/ - онлайн-генератор парольной защиты директории
- http://tools.dynamicdrive.com/userban/ - онлайн-генератор ограничения по IP-адресам