Использование директив файла .htaccess — часть вторая: парольная защита

Здравствуйте, гости и подписчики блога 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 в следующих выпусках.

Метки: , , htpasswd, , , , сервер
Другие статьи похожей тематики:

Поделитесь материалом с другими, воспользуйтесь этими кнопками:
Получать обновления и новые материалы блога по E-mail

11 комментариев к “Использование директив файла .htaccess — часть вторая: парольная защита”

  1. Xsaika:

    Что-то я начал экспериментировать с генератором паролей и не могу понять почему не удаляется пароль из файла? вот например для юзера proba1:
    htpasswd.exe -d .htpasswd proba1

    Ответить
    • Xsaika, будьте внимательнее, в параметрах ключ для удаления пароля должен быть «D», а не «d», то есть заглавную D нужно использовать. В списке параметров я там специально перевел на русский даже для тех, кто с английским не очень хорошо ладит. Для вашего случая команда должна быть такая:
      htpasswd.exe -D .htpasswd proba1

      Ответить
  2. Игорь А.:

    Ну под 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» вам нужно прописывать свой путь, и не забывайте, что путь должен быть именно абсолютным.

      Ответить
  3. Xsaika:

    Владимир, у вас тут есть ссылка, по которой я скачал утилитку htpasswd.zip… а из какой версии Apache она?

    Ответить
    • Эта утилита из дистрибутива Apache 2.2.22 для Windows (httpd-2.2.22-win32-x86-no_ssl.msi).
      Но особой разницы нет из какой из последних версий Апача она, по крайней мере в последние несколько лет все параметры и ключи в ней не менялись.

      Ответить
  4. Вит:

    А возможно ли использовать при шифровании пароля через директивы .htaccess еще и собственную «соль»? Есть такие примеры? А то как-то просто MD5 и SHA доверия не вызывают. Спасибо

    Ответить
    • Для более «сильного» шифрования и обработки паролей тогда уж лучше использовать стандартную функцию PHP crypt() и применением алгоритма шифрования CRYPT_SHA256.

      Ответить
  5. artis72:

    А сейчас в бесплатных СМС данный файл шифруется по умолчанию или что-то ручками надо делать?

    Ответить
    • В большинстве CMS файла .htpasswd вообще нет, так что вся ответственность за сохранность и защиту этого файла ложится на плечи админа (или хостинг-владельца).

      Ответить
  6. Андрей:

    очень детально, спасибо.

    Ответить

Оставить комментарий

Подписаться на обновления блога 4remind.ru по RSS
Новости блога в социальных сетях

="4remind.ru