Здравствуйте, гости и подписчики блога 4remind.ru. Сегодня мы продолжим знакомиться с директивами файла .htaccess. В предыдущей статье приводились примеры использования наиболее популярных директив сервера Apache в файле .htaccess, а здесь ознакомимся с чуть менее популярными, но тем временем очень важным моментами, а именно со способами парольной защиты каталогов и файлов.
Парольная защита каталогов и файлов
Итак, если Вы например решили ограничить доступ к каким-либо каталогам или файлам своего сайта, то есть разрешить доступ к ним только определенным лицам с использованием пароля, то стоит опять же прибегнуть к использованию файла дополнительной конфигурации веб-сервера Apache .htaccess. Однако сначала нужно удостовериться, что Вам разрешено использовать парольную защиту на сервере в пределах вашего аккаунта. Для этого создайте например в корне вашего сайта директорию «test» и скопируйте в нее файл .htaccess
со следующим содержимым:
AuthType Basic AuthName test require valid-user
Затем попытайтесь в браузере доступиться к созданному вами для проверки каталогу по адресу: http://www.vash-sait.ru/test/
Если Вам разрешено использовать парольную защиту на сервере, то Вы получите примерно вот такую форму для ввода логина и пароля:
Если же ничего похожего в окне браузера не появилось, то по видимому у вас нет прав на использование парольной защиты, и для решения этого вопроса вам придется обратиться за разъяснениями к администратору сервера (хостинга). Далее мы будем считать, что нужные права все таки есть, и мы начинаем готовить парольную защиту каталога или файлов. Саму процедуру подготовки мы разделим на два этапа, которые необходимы для достижения ожидаемого результата, а именно это создание файла-хранилища паролей .htpasswd
и файла .htaccess
с конкретным содержимым.
Файл-хранилище паролей .htpasswd
Файл .htpasswd
может быть как текстовым, так и бинарным, и пароли в нем могут храниться как в открытом виде, так и в зашифрованном (методы шифрования: md5
, sha
). Для каждого пользователя имя и пароль (разделенные двоеточием) определяется в отдельной строке. Вот пример файла .htpasswd
без шифрования паролей:
admin1:abcd111 admin2:abcd222 user1:12345
А вот пример уже с шифрованием паролей:
admin3:$apr1$T6/.....$8EvY3RdhSSuMLztZ.aUbK0 admin4:{SHA}PU8r8H3BvjiyDNbkaUmhBx+dDj0=
Причем в этом примере для пользователей указан одинаковый пароль 111111
, но для admin3
он шифрован по алгоритму «MD5», а для admin4
по алгоритму «SHA».
С целью безопасности нешифрованные пароли вообще-то лучше никогда не использовать!
А для создания файлов .htpasswd
и генерации паролей лучше использовать специальные утилиты, такие как например htpasswd.exe
, которая устанавливается вместе с сервером Apache под Windows. Найти эту утилиту можно в подкаталоге «bin» относительно директории, где установлен сам Apache
.
Утилиту htpasswd.exe можно скачать с этого же блога: htpasswd.zip
Параметры утилиты htpasswd.exe
для создания или изменения файла-хранилища паролей можно уточнить введя в командной строке следующую команду:
htpasswd.exe /?
На всякий случай приведу список параметров здесь:
Формат использования: 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 параметр '-p' может не работать. Алгоритм SHA менее устойчив, чем алгоритм MD5.
Например, Вы решили создать новый файл .htpasswd
и сразу добавить в него пароль для пользователя admin
, тогда вам понадобится выполнить команду:
htpasswd -cm .htpasswd admin
После ее выполнения у вас будет запрошен пароль, который нужно ввести дважды, и после этого уже будет создан файл .htpasswd
с паролем для пользователя admin
, зашифрованный по алгоритму MD5
.
Если же Вам понадобится к уже существующему файлу добавить нового пользователя, то выполните следующую команду, уже без ключа «c» в параметрах, в том же каталоге:
htpasswd -m .htpasswd user1
Файл .htaccess
Итак, коль файл .htpasswd
уже создан, то его нужно закачать на сервер. Хранить же файл-хранилище паролей .htpasswd
лучше всего за пределами каталога, в котором находится собственно ваш сайт, то есть там, куда нет доступа извне. Но если такой возможности у вас нет, то конечно можно .htpasswd разместить в доступном для вас каталоге, но в целях безопасности (предотвращения кражи) стоит запретить к нему доступ при помощи файла .htaccess (в каталоге, куда Вы поместите файл .htpasswd), например так:
deny from all
Теперь, кода файл с паролями создан и защищен, можно приступать к парольной защите конкретного каталога. Для этого в целевом каталоге нужно разместить файл .htaccess
примерно со следующим содержимым:
AuthType Basic AuthName "Доступ ограничен! Разрешено только для VIP-пользователей!" AuthUserFile /usr/host/site/.htpasswd require valid-user
Внимание! В директиве AuthUserFile
должен быть прописан абсолютный путь к файлу .htpasswd
от корня сервера, но никак не относительный!
В файле .htaccess
для парольной защиты директорий и файлов могут быть использованы следующие директивы:
-
AuthType
— Тип используемой аутентификации. Для базовой аутентификации эта директива должна иметь значение: Basic -
AuthName
— Имя аутентификации. Текст, который информирует посетителя о том, куда он пытается получить доступ и какие на это имеются ограничения. Текст может быть любым, например: «Доступ ограничен! Разрешено только для VIP-пользователей!» -
AuthUserFile
— абсолютный путь к файлу с паролями (.htpasswd); -
AuthGroupFile
— абсолютный путь к файлу групп, если он существует; - Require — Одно или несколько требований, которые должны быть выполнены для получения доступа к защищенной области;
Директива Require
определяет пользователей или группы пользователей, которым доступ разрешен:
-
require valid-user
— доступ разрешен всем прошедшим аутентификацию; -
require admin user1 tester99
— доступ разрешен только посетителям с именами admin user1 tester99. Разумеется, что они должны пройти аутентификацию согласно записям в файле .htpasswd; -
require group administrators
— доступ разрешен всем пользователям из группы administrators;
Вот собственно и все, что касается базовой парольной защиты файлов и каталогов сайта с использованием файлов .htaccess
и .htpasswd
. Напоследок несколько примеров файла .htaccess:
Разрешаем доступ всем, кто прошел авторизацию:
AuthType Basic AuthName "Доступ ограничен! Разрешено только для VIP-пользователей!" AuthUserFile /usr/host/site/.htpasswd require valid-user
Разрешаем доступ только для пользователей admin, user1 и vasya
AuthType Basic AuthName "Доступ ограничен! Разрешено только для VIP-пользователей!" AuthUserFile /usr/host/mysite/.htpasswd require admin user1 vasya
Запрещаем доступ всем, но только к файлу mysecret.xls
AuthType Basic AuthName "Доступ ограничен! Разрешено только для VIP-пользователей!" AuthUserFile /usr/host/mysite/.htpasswd require valid-user
Если у Вас возникнут вопросы, то задавайте их в комментариях к этой статье.
На этом пока все, но мы еще продолжим тему использования директив файла .htaccess в следующих выпусках.
Что-то я начал экспериментировать с генератором паролей и не могу понять почему не удаляется пароль из файла? вот например для юзера proba1:
htpasswd.exe -d .htpasswd proba1
Xsaika, будьте внимательнее, в параметрах ключ для удаления пароля должен быть «D», а не «d», то есть заглавную D нужно использовать. В списке параметров я там специально перевел на русский даже для тех, кто с английским не очень хорошо ладит. Для вашего случая команда должна быть такая:
htpasswd.exe -D .htpasswd proba1
Ну под Windows все просто, а вот как генерировать файл .htpasswd и пароли для юзеров на Линуксе? Вот например у меня есть доступ по SSH к моему аккаунту на хостинге, а какую утилиту использовать я пока не понял потому что Линукс только поверхностно знаю :(
Игорь А,
Под Linux тоже все просто и параметры с ключами точно такие же, как и представленные в статье. Если у вас есть доступ по SSH, то как правило должны быть и права на выполнение таких команд, как htpasswd. В консоли SSH выполняете следующие команды:
чтобы создать файл .htpasswd и пароль для юзера User1:
# htpasswd -cm /home/www/.htpasswd User1
чтобы добавить нового пользователя и пароль для User2:
# htpasswd -m /home/www/.htpasswd User2
Кстати, ключ «m» можно не использовать, т.к. по умолчанию пароль будет шифроваться по алгоритму MD5.
Естественно вместо «/home/www/.htpasswd» вам нужно прописывать свой путь, и не забывайте, что путь должен быть именно абсолютным.
Владимир, у вас тут есть ссылка, по которой я скачал утилитку htpasswd.zip… а из какой версии Apache она?
Эта утилита из дистрибутива Apache 2.2.22 для Windows (httpd-2.2.22-win32-x86-no_ssl.msi).
Но особой разницы нет из какой из последних версий Апача она, по крайней мере в последние несколько лет все параметры и ключи в ней не менялись.
А возможно ли использовать при шифровании пароля через директивы .htaccess еще и собственную «соль»? Есть такие примеры? А то как-то просто MD5 и SHA доверия не вызывают. Спасибо
Для более «сильного» шифрования и обработки паролей тогда уж лучше использовать стандартную функцию PHP crypt() и применением алгоритма шифрования CRYPT_SHA256.
А сейчас в бесплатных СМС данный файл шифруется по умолчанию или что-то ручками надо делать?
В большинстве CMS файла .htpasswd вообще нет, так что вся ответственность за сохранность и защиту этого файла ложится на плечи админа (или хостинг-владельца).