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

Защита директории сайта паролем через .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>

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