Как закрыть доступ к авторизации через 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-userAuthName - текст содержащийся в данной директиве, выводится в окне ввода пароля. Он должен быть написан в одну строку и заключен в двойные кавычки.
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), например так:
Теперь, кода файл с паролями создан и защищен, можно приступать к парольной защите конкретного каталога. Для этого в целевом каталоге нужно разместить файл.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
Если у Вас возникнут вопросы, то задавайте их в комментариях к этой статье.
На этом пока все, но мы еще продолжим тему использования директив файла.htaccess в следующих выпусках.
Укажите данные для создания.htpasswd и.htaccess файлов:
Данный пароль сгенерирован при помощи htpasswd и подходит для Linux и Windows
Скопируйте эту строку в ваш .htpasswd
файл:
Admin:SbMAWhf7pD0aYЭж
Помните, только одна запись может быть в строке!
Для ограничения доступа к выбранной директории скопируйте эти строчки в ваш .htaccess файл:
AuthType Basic
AuthName "Thats protected Area!"
AuthUserFile /usr/host/mysite/.htpasswd
Require valid-user
Для запрета доступа только к файлу private.zip скопируйте эти строчки в ваш .htaccess файл:
Обратите внимание что файлы.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
.