Как закрыть доступ к авторизации через apache. Проверка работы файла.htaccess на сервере. Пароль на группу файлов

Бывают ситуации, когда сделанный вами сайт не должен быть публичным, а используется как некий сервис для ограниченного круга лиц. Можно, конечно, нагородить аутентификацию через PHP, но есть почти элементарный способ – закрыть папку на сайте средствами Apache. Например, с помощью файлов .htaccess и .htpasswd . Вот об этом мы сейчас и поговорим.

Создаём файл.htpasswd с паролями

Для того, чтобы установить пароль, сначала мы должны сгенерировать файл .htpasswd . Делается это с помощью утилиты htpasswd, которая существует в версии как для Linux, так и для Windows .

htpasswd -c .htpasswd admin

Ключ указывает, что необходимо создать новый файл с паролями. .htpasswd - имя генерируемого файла. admin – логин пользователя, которому будет разрешен доступ в закрытую часть сайта. После запуска утилиты со всеми нужными параметрами, появится запрос на ввод пароля и его повтор. Если файл.htaccess у вас уже создан, и вы хотите добавить в него нового пользователя, просто запустите утилиту, указав файл с паролями без ключа –c .

Создаваемый файл является текстовым и содержит логин пользователя и хеш-пароля, которые, разделены двоеточием. По умолчания, алгоритм хеширования – DES. Но его можно сменить и использовать алгоритм MD5 с ключом –m , но лучший вариант использование алгоритма SHA(ключ -s ).

Защита сайта с помощью.htaccess

Итак, файл создан, затем добавляем к корневую директорию сайт файл.htaccess или дописываем в уже существующий следующие строки:


# Закрываем доступ к файлу.htaccess
Order allow,deny
Deny from all
Satisfy All

# Указываем место положение файла.htpasswd, включаем аутентификация
AuthUserFile /etc/apache2/passwd/.htpasswd
AuthName "Password Protected Area"
AuthType Basic
Require valid-user

Параметр AuthUserFile указывает на абсолютный путь к файлу .htpasswd . По неизвестной мне причине, во многих мануалах которые я видел, файл паролей зачем-то хранят в домашней директории пользователя. Я бы не советовал хранить этот файл в домашней директории, а тем более в корневой директории сайта.

После создания файла и размещения файл .htaccess в корне сайта, неплохо было бы перезагрузить процесс apache.

Также хотелось бы обратить ваше внимание, что неплохо было бы закрыть сайт от индексации поисковыми системами. Для этого в корневой директории сайт создаём файл robots.txt со следующим содержанием:


User-agent: *
Disallow: /

На этом я думаю можно, и закончить этот пост. Если у Вас есть какие-то ещё вопросы по теме, жду их в комментариях.

Бывают случаи, когда нужно ограничить доступ пользователей к определенной папке на сайте (разделу сайта) и пускать туда посетителей только по паролю. Например, в раздел администратора. В этой статье я приведу инструкцию когда в качестве веб-сервера вы используете Apache.

Как настроить доступ по паролю

Параметры файла.htaccess

Настройка доступа к папке по паролю в веб-сервере Apache производится в служебном файле .htaccess . Этот файл должен находиться в той папке для которой мы настраиваем ограничения. Иными словами, инструкции из файла .htaccess распространяются на ту папку, в которой этот файл расположен.

Чтобы доступ к необходимой нам папке был ограничен необходимо добавить в файл .htaccess следующие строки (если такого файла нет, то создайте его):

AuthType Basic AuthName "WellCome" AuthUserFile "/home/username/data/.htpasswd" Require valid-user

Где,
AuthName — это приветствие, которое увидят посетители, вы можете изменить его на свое,
AuthUserFile — полный путь к файлу паролей от корня диска, у вас должен быть свой (не путать с адресом запароленной директории).

Файл .htpasswd нужно размещать вне папок сайта, чтобы к нему не было доступа из интернета.

Формат файла.htpasswd

Файл состоит из строк, в каждой из которых содержатся пары логин и хеш пароля. Логин отделяется от хеша двоеточием. Пример содержимого файла:

Admin:$apr$Gg/NNV$2OIMrVrviCk User1:gbDwY2f5$GMrVrvW6qgbDwY

Как создать файл.htpasswd

Так как файл .htpasswd не содержит пароль в открытом виде, а лишь его хеш, то внести изменения в этот файл вручную с помощью обычного текстового редактора не получится. Нужно использовать специальную утилиту. В линукс системах для работы с файлом паролей используется утилита htpasswd , входящая в состав дистрибутива веб-сервера Apache. Я писал о ее использовании в этой .

Чтобы создать файл с паролями .htpasswd и добавить пользователя используйте команду:

# htpasswd -c /home/username/data/.htpasswd NewUser

Если файла.htpasswd уже существует, то исключите ключ -c :

# htpasswd /home/username/data/.htpasswd NewUser

Здесь:
/home/username/data/.htpasswd — это полный путь от корня диска к файлу с паролями, а
NewUser — имя пользователя.

При вводе команды вам будет предложено указать пароль, а затем подтвердить его, то есть ввести пароль нужно будет два раза.

С помощью этой утилиты, так же можно изменить уже присвоенный пользователю пароль, то есть изменить пароль для существующего пользователя.

Не редко на сайтах можно встретить аутентификацию, реализованную с помощью конфигурационного файла .htaccess . Простота настроек и надежность, основные преимущества данного вида авторизации.

Директивы файла. htaccess.

AuthName "Текст выводится в окне авторизации" AuthType Basic AuthUserFile Полный путь/.htpasswd require valid-user

AuthName - текст содержащийся в данной директиве, выводится в окне ввода пароля. Он должен быть написан в одну строку и заключен в двойные кавычки.

AuthType - типы аутентификации: Basic или Digest . Рекомендуется использовать первый, т.к. второй поддерживается не всеми браузерами.

AuthUserFile - полный путь к файлу с логинами и паролями, для аутентификации пользователей. Пароли содержаться в шифрованном виде. Рекомендуется хранить данный файл в папке, к которой нет доступа для пользователей, это необходимо, чтобы предотвратить кражу паролей.

require valid-user - директива предписывает, что к URL получают доступ только, пользователи, успешно прошедшие аутентификацию.

Где можно реализовать?

Авторизацию можно прикрутить к любой директории вашего сайта, будь то корень, либо папка из иерархии. Очень часто можно встретить защиту с помощью .htaccess , для входя в “Панель управления” сайтом. Также с помощью этой технологии можно ограничить доступ к папкам, где лежат конфиденциальные данные.

Итак, давайте создадим директорию с названием CMS (можете выбрать любое название). В ней будут находиться: файл конфигурации.htaccess и файл с паролями.htpasswd ., а также все остальные файлы и папки, к которым вы хотите сделать ограниченный доступ.

Настройка файла.htaccess

Создайте с помощью обычного блокнота файл .htaccess (точка перед названием обязательна), в папке CMS, заполните его директивами указанными выше. Для заполнения директивы AuthUserFile необходимо указать полный путь к файлу с паролями .htpasswd , который находится в этой же папке.

Как узнать полный путь к файлу?

Полный путь к файлу, можно узнать с помощью функции phpinfo() . Результатом ее выполнения будет подробная таблица настроек веб-сервера.

Создайте файл info.php, с содержимым , в директории CMS. Запустите файл через браузер. В полученной таблице, найдите переменную SCRIPT_FILENAME , которая содержит полный путь к файлу .

После получения нужных данных, обязательно удалите файл info.php, чтобы информация о настройках веб-сервера не стала общедоступной.

Рис 1. Полный путь к файлу. Результат выполнения функции phpinfo()

Скопируйте полученный путь, замените в нем имя файла, info.php на .htpasswd , и поместите его в директиву AuthUserFile .

AuthUserFile Z:/home/localhost/www/scripts/CMS/.htpasswd

Таким образом, готовый файл.htaccess , будет содержать следующие директивы:

AuthName "Authentication" AuthType Basic AuthUserFile Z:/home/localhost/www/scripts/CMS/.htpasswd require valid-user

Создание файла. htpasswd

Переходим к созданию файла с паролями . htpasswd , для этого воспользуемся утилитой htpasswd.exe . Работать с которой нужно через командную строку. Далее рассмотрены примеры работы с утилитой:

. Создать новый файл с паролями , назначить ему имя.htpasswd, задать шифрование паролей по алгоритму MD5 и добавить в него логин admin:

Htpasswd -cm .htpasswd admin

-cm - ключи утилиты:

- указывает, что необходимо создать новый файл

-m -шифрует пароли по алгоритму MD5

.htpasswd - имя файла с паролями

admin - логин

Рис. 2. Создание нового файла с паролями, утилитой htpasswd.exe

. Добавить в уже существующий файл с паролями нового пользователя . Для этого нужно в команде указать один ключ -m, ключ -c, опустить.

Htpasswd -m .htpasswd user

Рис. 3. Добавление в уже существующий файл с паролями нового пользователя, утилитой htpasswd.exe.

. Чтобы изменить пароль для существующего пользователя, используйте ту же команду, что и при добавлении.

Htpasswd -m .htpasswd user

Рис 4. Изменение пароля для существующего пользователя, с помощью утилиты htpasswd.exe.

После создания файла с паролями, поместите его в директорию, путь к которой указан в директиве AuthUserFile файла.htaccess. (в нашем случае в папку CMS)

Доступ к данным авторизации, через переменные массива $_SERVER

После успешного прохождения аутентификации, логин и пароль, вбитые пользователем, помещаются в суперглобальный массив$_SERVER, который можно обрабатывать с помощью php скрипта.

  • $_SERVER["PHP_AUTH_USER"] - логин;
  • $_SERVER["PHP_AUTH_PW"] - пароль;

Результат

Теперь если вы перейдете в браузере в папку, где лежит конфигурационный файл.htaccess, вы получите всплывающее окно, где нужно вбить логин и пароль. При успешной авторизации доступ к папке будет открыт.

Рис. 5. Окно аутентификации.

Подведем итоги:

  • С помощью конфигурационного файла .htaccess , можно ограничить доступ к любой директории вашего сайта;
  • Чтобы создать файл .htaccess воспользуйтесь обычным блокнотом;
  • Чтобы указать полный путь к файлу с паролями .htpasswd , в директиве AuthUserFile файла .htaccess , воспользуйтесь функцией phpinfo();
  • Для создания файла с паролями.htpasswd , воспользуйтесь утилитой htpasswd.exe ;
  • Размещайте файл с паролями .htpasswd , в папке, к которой нет доступа для пользователей , чтобы предотвратить кражу паролей;
  • Доступ к данным авторизации осуществляется через переменные суперглобального массива $_SERVER : $_SERVER["PHP_AUTH_USER"] , $_SERVER["PHP_AUTH_PW"];

Здравствуйте, гости и подписчики блога . Сегодня мы продолжим знакомиться с директивами файла.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

А вот пример уже с шифрованием паролей:

Причем в этом примере для пользователей указан одинаковый пароль 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 passwordfile username password htpasswd -n username htpasswd -nb 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 примерно со следующим содержимым:

Внимание! В директиве 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 и.htaccess файлов:

Логин:
Пароль:
Полный путь к файлу.htpasswd

Приветствие(заголовок):

Формат ХЕШ-пароля: MD5 crypt SHA


Данный пароль сгенерирован при помощи htpasswd и подходит для Linux и Windows
Скопируйте эту строку в ваш .htpasswd файл:

Admin:SbMAWhf7pD0aYЭж Помните, только одна запись может быть в строке!

Для ограничения доступа к выбранной директории скопируйте эти строчки в ваш .htaccess файл:

AuthType Basic AuthName "Thats protected Area!" AuthUserFile /usr/host/mysite/.htpasswd Require valid-user

Для запрета доступа только к файлу private.zip скопируйте эти строчки в ваш .htaccess файл:

AuthType Basic AuthName "Thats protected Area!" AuthUserFile /usr/host/mysite/.htpasswd Require valid-user deny from all #запрет доступа из браузера к.htpasswd

Обратите внимание что файлы.htaccess и.htpasswd должны быть сохранены в unix-формате. Например, в Far Manager этого можно достичь если в режиме редактирования файла нажать комбинацию Shift+F2 и в появившемся меню выбрать “в формате UNIX (LF)”.

Директивы и описание файла.htaccess, используемые для ограничения доступа

  • AuthType - Тип используемой аутентификации. Для базовой аутентификации эта директива должна иметь значение: Basic
  • AuthName - Имя области действия аутентификации. Текст, помогающий посетителю понять, куда он пытается получить доступ. Например, может быть написано: "Private zone. Only for administrator!"
  • AuthUserFile - полный путь к файлу с паролями (.htpasswd). Относительные пути работать не будут.
  • AuthGroupFile - путь к файлу групп, если он существует.
  • Require - Одно или несколько требований, которые должны быть выполнены для получения доступа к закрытой области.
    • require valid-user - разрешен доступ всем прошедшим проверку
    • require user admin alex mango - разрешен доступ только посетителям с именами admin, alex, mango. Естественно, они должны пройти аутентификацию.
    • require group admins - разрешен доступ всем пользователям из группы admins

Файлы групп

Если к защищаемой области сайта должна иметь доступ группа людей, то удобно объединить людей в группы, и разрешать доступ, определяя принадлежность пользователей к группе.

Формат файла групп - это текстовый файл, каждая строка, которого описывает отдельную группу. Первым в строке должно идти название группы с двоеточием. А затем через пробел перечисляются посетители, входящие в группу.

Пример файла групп:

Admins: admin alex mango Users: guest user max23

В группу Admins входят посетители с именами admin, alex, mango. А группу Users входят посетители с именами guest, user, max23.

Пример файла.htaccess для доступа всем пользователям, прошедшим авторизацию:

AuthType Basic AuthName "Private zone. Only for administrator!" AuthUserFile /usr/host/mysite/.htpasswd require valid-user

Пример файла.htaccess для доступа только пользователям admin и root:

AuthType Basic AuthName "Private zone. Only for administrator!" AuthUserFile /usr/host/mysite/.htpasswd require user admin root

Доступ только пользователей из группы admins:

AuthType Basic AuthName "Private zone. Only for administrator!" AuthUserFile /usr/host/mysite/.htpasswd AuthGroupFile /usr/host/mysite/group require group admins

C остальными директивами и возможностями файла.htaccess Вы можете ознакомиться в статье .htaccess


.
Похожие публикации