Как настроить аутентификацию по паролю с Apache в Ubuntu 14.04

Вступление

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

В этом руководстве мы покажем, как защитить паролем ресурсы на веб-сервере Apache, работающем в Ubuntu 14.04.

Предпосылки

Для начала вам понадобится доступ к серверной среде Ubuntu 14.04. Вам понадобится пользователь без полномочий root с привилегиямиsudo для выполнения административных задач. Чтобы узнать, как создать такого пользователя, следуйте нашимUbuntu 14.04 initial server setup guide.

Установите пакет утилит 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

Если мы просмотрим содержимое файла, мы увидим имя пользователя и зашифрованный пароль для каждой записи:

cat /etc/apache2/.htpasswd
Outputsammy:$apr1$lzxsIfXG$tmCvCfb49vpPFwKGVsuYz.
another_user:$apr1$p1E9MeAf$kiAhneUwr.MhAE2kKGYHK.

Настройте проверку подлинности с помощью пароля Apache

Теперь, когда у нас есть файл с нашими пользователями и паролями в формате, который может прочитать Apache, нам нужно настроить Apache для проверки этого файла перед обслуживанием нашего защищенного содержимого. Мы можем сделать это двумя разными способами.

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

Если у вас нет возможности изменить файл виртуального хоста (или если вы уже используете.htaccess files for other purposes), you can restrict access using an.htaccess`file. Apache использует файлы.htaccess, чтобы разрешить установку определенных элементов конфигурации в файле в каталоге содержимого. Недостатком является то, что Apache должен перечитывать эти файлы при каждом запросе, который касается каталога, что может повлиять на производительность.

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

Настройка контроля доступа в определении виртуального хоста

Начните с открытия файла виртуального хоста, для которого вы хотите добавить ограничение. В нашем примере мы будем использовать файл000-default.conf, содержащий виртуальный хост по умолчанию, установленный с помощью пакета Apache Ubuntu:

sudo nano /etc/apache2/sites-enabled/000-default.conf

Внутри, с удаленными комментариями, файл должен выглядеть примерно так:

/etc/apache2/sites-enabled/000-default.conf


    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

Аутентификация выполняется для каждого каталога. Чтобы настроить аутентификацию, вам нужно будет указать каталог, который вы хотите ограничить, с помощью блока<Directory ___>. В нашем примере мы ограничим весь корень документа, но вы можете изменить этот список так, чтобы он предназначался только для определенного каталога в веб-пространстве:

/etc/apache2/sites-enabled/000-default.conf


    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    
    

В этом блоке каталога укажите, что мы хотим настроить аутентификациюBasic. ДляAuthName выберите имя области, которое будет отображаться пользователю при запросе учетных данных. Используйте директивуAuthUserFile, чтобы указать Apache на созданный нами файл паролей. Наконец, нам потребуетсяvalid-user для доступа к этому ресурсу, что означает, что любой, кто может подтвердить свою личность с помощью пароля, будет допущен к:

/etc/apache2/sites-enabled/000-default.conf


    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    
        AuthType Basic
        AuthName "Restricted Content"
        AuthUserFile /etc/apache2/.htpasswd
        Require valid-user
    

Сохраните и закройте файл, когда вы закончите. Перезапустите 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

. . .


    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted


. . .

Сохраните и закройте файл, когда вы закончите.

Затем нам нужно добавить файл.htaccess в каталог, который мы хотим ограничить. В нашей демонстрации мы ограничим весь корень документа (весь веб-сайт), основанный на/var/www/html, но вы можете поместить этот файл в любой каталог, к которому хотите ограничить доступ:

sudo nano /var/www/html/.htaccess

В этом файле укажите, что мы хотим настроить аутентификациюBasic. Для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

Подтвердите аутентификацию по паролю

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

Apache2 password prompt

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

Apache2 unauthorized error

Заключение

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

Related