fbpx
Перейти к содержимому

Защита директории сайта паролем через .htaccess

Очень часто, во время разработки сайта либо веб сервиса появляется необходимость запретить доступ к конкретной странице либо конкретному разделу сайта (директории). Один из вариантов это сделать — использовать htpasswd.

В данном примере мы рассмотрим блокировку доступа к директории test которая находится в корне сайта.

Видео инструкция

Создание htpasswd

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

Для создания файла htpasswd подключается к серверу, на котором мы будем ограничивать доступ, подключаемся по SSH и выполняем следующую команду:

htpasswd -c -B /var/www/passwd/.htpasswd username

Разберем подробнее каждый ключ

— отвечает за создание нового файла
-B — в качестве шифрования использует алгоритм bcrypt
/var/www/passwd/.htpasswd — путь и имя создаваемого файла
username — имя пользователя

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

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

htpasswd -B /home/unixhost/web/.htpasswd username2

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

htpasswd -D /var/www/passwd/.htpasswd username2

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

chmod 644 /var/www/passwd/.htpasswd

Установка AllowOverride в конфигурации веб сервера

Для того чтобы наша «блокировка» работала нам необходимо изменить значение у переменной AllowOverride с None на All. Для этого открываем файл конфигурации вашего вебсервера , обычно данный файл находится по адресу /etc/apache2/apache2.conf либо /etc/apache2/conf.d/ либо /etc/apache2/sites-enabled/ в файле который отвечает за подключение вашего доменного имени ищем значение AllowOverride и меняем его на All.

Мой файл выглядит следующим образом, ваш может отличаться.

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
</Directory>

После внесения изменений перегружаем вебсервер

sudo service apache2 restart

Закрываем сайт/директорию в .htaccess

После создания файла htpasswd нам необходимо будет создать либо отредактировать уже имеющийся файл .htaccess .

Корневая директория сайта у меня находится по адресу /var/www/html , в данной директории находится папка test и в ней php файл который выводит информацию о версии php.
Для того чтобы ограничить доступ к в папке test создадим в ней файл .htaccess в который добавим следующие строки :

AuthName "Authentication Required"
AuthType Basic
AuthUserFile /var/www/passwd/.htpasswd
Require valid-user

В переменную AuthUserFile указываем путь к нашему файлу который мы создавали.

Теперь если мы перейдем по адресу сайта sitename.com/test то нас попросит ввести логин и пароль.

После ввода логина и пароль мы увидим нашу страницу.

В случаи если вам нужно ограничить доступ лишь к одной странице (файлу) для этого нужно указать имя файла для доступу к которому будет запрашиваться имя пользователя и пароль

<Files admin.php>
AuthName "Authentication Required"
AuthType Basic
AuthUserFile /var/www/passwd/.htpasswd
Require valid-user
</Files>

Вот таким простым способом вы можете ограничивать доступ к определенным частям вашего сайта.