Введение
При настройке веб-сервера часто возникают разделы сайта, к которым вы хотите ограничить доступ. Веб-приложения часто предоставляют собственные методы аутентификации и авторизации, но сам веб-сервер может использоваться для ограничения доступа, если они недоступны.
В этом руководстве мы покажем, как защитить паролем ресурсы на веб-сервере Apache, работающем на Ubuntu 24.04.
Установите пакет утилит Apache
Для создания файла, в котором будут храниться пароли, необходимые для доступа к нашему ограниченному контенту, мы воспользуемся утилитой под названием htpasswd
. Она находится в apache2-utils
пакете в репозиториях Ubuntu.
Обновите локальный кэш пакетов и установите пакет, введя эту команду. Мы воспользуемся этой возможностью, чтобы также захватить сервер Apache2, если он еще не установлен на сервере:
sudo apt-get update
sudo apt-get install apache2 apache2-utils
Создайте файл паролей
Теперь у нас есть доступ к htpasswd
команде. Мы можем использовать это для создания файла паролей, который Apache может использовать для аутентификации пользователей. Для этой цели мы создадим скрытый файл с именем .htpasswd
в нашем /etc/apache2
каталоге конфигурации.
При первом использовании этой утилиты нам нужно добавить -c
опцию создания указанного файла. Мы указываем имя пользователя ( sammy
в этом примере) в конце команды, чтобы создать новую запись в файле:
sudo htpasswd -c /etc/apache2/.htpasswd sammy
Вам будет предложено ввести и подтвердить пароль для пользователя.
Оставьте -c
для дополнительных пользователей, которых вы хотите добавить:
sudo htpasswd /etc/apache2/.htpasswd another_user
Если просмотреть содержимое файла, то можно увидеть имя пользователя и зашифрованный пароль для каждой записи:
nano /etc/apache2/.htpasswd
Outputsammy:$apr1$lzxsIfXG$tmCvCfb49vpPFwKGVsuYz.
another_user:$apr1$p1E9MeAf$kiAhneUwr.MhAE2kKGYHK.
Настройте аутентификацию по паролю в Apache
Теперь, когда у нас есть файл с нашими пользователями и паролями в формате, который может прочитать Apache, нам нужно настроить Apache для проверки этого файла перед обслуживанием нашего защищенного контента. Мы можем сделать это двумя разными способами.
Первый вариант — отредактировать конфигурацию Apache и добавить нашу защиту паролем в файл виртуального хоста. Это, как правило, обеспечивает лучшую производительность, поскольку позволяет избежать расходов на чтение распределенных файлов конфигурации. Если у вас есть эта возможность, этот метод рекомендуется.
Если у вас нет возможности изменить файл виртуального хоста (или если вы уже используете файлы .htaccess)
, чтобы разрешить установку определенных элементов конфигурации в файле в каталоге контента. Недостатком является то, что Apache должен перечитывать эти файлы при каждом запросе, который затрагивает каталог, что может повлиять на производительность.
Выберите ниже вариант, который наилучшим образом соответствует вашим потребностям.
Настройка виртуального хоста
Начните с открытия файла виртуального хоста, к которому вы хотите добавить ограничение. Для нашего примера мы будем использовать файл 000-default.conf
, содержащий виртуальный хост по умолчанию, установленный через пакет Apache Ubuntu:
sudo nano /etc/apache2/sites-enabled/000-default.conf
Внутри, без комментариев, файл должен выглядеть примерно так: /etc/apache2/sites-enabled/000-default.conf
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Аутентификация выполняется на основе каталога. Чтобы настроить аутентификацию, вам нужно будет указать каталог, который вы хотите ограничить блоком <Directory ___>
. В нашем примере мы ограничим весь корневой каталог документов, но вы можете изменить этот список, чтобы указать только определенный каталог.
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory "/var/www/html">
</Directory>
</VirtualHost>
В этом блоке каталога укажите, что мы хотим настроить базовую аутентификацию. Для AuthName
выберите имя области, которое будет отображаться пользователю при запросе учетных данных. Используйте AuthUserFile
директиву, чтобы указать Apache на созданный нами файл паролей. Наконец, нам потребуется valid-user
для доступа к этому ресурсу, что означает, что любой, кто знает пароль, будет допущен в: /etc/apache2/sites-enabled/000-default.conf
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory "/var/www/html">
AuthType Basic
AuthName "Restricted Content"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
</Directory>
</VirtualHost>
Сохраните и закройте файл, когда закончите. Перезапустите Apache, чтобы реализовать вашу политику паролей:
sudo service apache2 restart
Указанный вами каталог теперь должен быть защищен паролем.
Настройка контроля доступа с помощью файлов .htaccess
Если вы хотите настроить защиту паролем с использованием .htaccess
файла, вам следует начать с редактирования основного файла конфигурации Apache, чтобы разрешить использование .htaccess
файла:
sudo nano /etc/apache2/apache2.conf
Найдите <Directory>
блок для /var/www
каталога, который содержит корень документа. Включите .htaccess
обработку, изменив AllowOverride
директиву в этом блоке с «None» на «All»: /etc/apache2/apache2.conf
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
Сохраните и закройте файл, когда закончите.
Далее нам нужно добавить .htaccess
файл в каталог, который мы хотим ограничить. В нашей демонстрации мы ограничим весь корневой каталог документов (весь веб-сайт), который находится в /var/www/html
, но вы можете поместить этот файл в любой каталог, к которому вы хотите ограничить доступ:
sudo nano /var/www/html/.htaccess
В этом файле укажите, что мы хотим настроить базовую аутентификацию. Для AuthName
выберите имя области, которое будет отображаться пользователю при запросе учетных данных. Используйте AuthUserFile
директиву, чтобы указать Apache на созданный нами файл паролей. Наконец, нам потребуется valid-user
для доступа к этому ресурсу, что означает, что любой, кто знает пароль, будет допущен в: /var/www/html/.htaccess
AuthType Basic
AuthName "Restricted Content"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
Сохраните и закройте файл. Перезапустите веб-сервер, чтобы защитить паролем все содержимое в каталоге с .htaccess
файлом или ниже:
sudo service apache2 restart
Проверьте пароль
Чтобы убедиться, что ваш контент защищен, попробуйте получить доступ к вашему ограниченному контенту в веб-браузере. Вам должно быть представлено приглашение на ввод имени пользователя и пароля, которое выглядит следующим образом:

Если вы введете правильные учетные данные, вам будет разрешен доступ к контенту. Если вы введете неправильные учетные данные или нажмете «Отмена», вы увидите страницу ошибки «Неавторизовано»:

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