Как настроить авторизацию по паролю на Apache с Ubuntu 16.04

Обсудить

Введение

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

Из данной статьи вы узнаете, как установить авторизацию при помощи пароля на веб-сервер Apache, работающий на Ubuntu 16.04.

Требования

Перед тем, как приступить к выполнению дальнейших шагов, убедитесь, что у вас есть доступ к серверу Ubuntu 16.04.

Также для выполнения инструкции вам понадобится следующее:

  • пользователь, который может выполнять команды sudo на вашем сервере;
  • веб-сервер Apache;
  • сайт, на котором установлен SSL-сертификат (к примеру, Let’s Encrypt).

Если все вышеперечисленное у вас в наличии, тогда авторизуйтесь на сервере как пользователь с sudo-правами и перейдите к выполнению первого шага.

Шаг 1: устанавливаем пакет с утилитами Apache

Вам понадобится утилита под названием htpasswd, которая является частью пакета apache2-utils. Она используется для создания файла, а также имени пользователя и паролей, которые будут использоваться для доступа к запрещенному для просмотра обычными пользователями контенту.

Введите следующие команды:

$ sudo apt-get update
$ sudo apt-get install apache2-utils

Шаг 2: создаем файл с паролями

Теперь вы можете воспользоваться командой htpasswd. При помощи нее вам будет необходимо создать файл с паролями, который Apache будет использовать для аутентификации пользователей. Для этих целей вам следует создать скрытый файл под названием .htpasswd внутри директории с настройками /etc/apache2.

При первом использовании данной утилиты вам будет необходимо прибавить к команде ключ –c для того, чтобы создать указанный файл. Также в конце команды вам необходимо указать имя пользователя (sinatra в данном примере) – это нужно для того, чтобы создать новую запись внутри файла:

$ sudo htpasswd -c /etc/apache2/.htpasswd sinatra

У вас будет запрошен пароль и его подтверждение для созданного пользователя.

Если вы хотите добавить еще каких-либо других пользователей (к примеру, another_user), используйте эту же команду, но уже без ключа –c:

$ sudo htpasswd /etc/apache2/.htpasswd another_user

Посмотрите содержимое этого файла:

$ cat /etc/apache2/.htpasswd

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

Output

sinatra:$apr1$.0CAabqX$rb8lueIORA/p8UzGPYtGs/
another_user:$apr1$fqH7UG8a$SrUxurp/Atfq6j7GL/VEC1

Шаг 3: настраиваем авторизацию при помощи пароля на Apache

Теперь у вас есть файл с именами пользователей и паролями в формате, доступном для чтения Apache.

Следующим шагом вам необходимо настроить Apache так, чтобы он сверялся с этим файлом всегда, когда собирается предоставить доступ к защищенному от посторонних глаз контенту. Вы можете сделать это двумя путями: либо прямо в файле виртуального хоста сайта, либо добавив файлы .htaccess в директории, доступ к которым вы хотите ограничить.

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

То есть выбирайте путь, исходя из своих требований.

Путь 1 (предпочтительный): настраиваем авторизацию через виртуальный хост

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

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

$ sudo nano /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>

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

<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>

После редактирования сохраните и закройте файл.

Перед перезагрузкой сервера проверьте настройки следующей командой:

$ sudo apache2ctl configtest

Если все нормально, и вы увидели Syntax OK, тогда перезагрузите сервер для того, чтобы новая политика доступа с запросом пароля вступила в силу. Для этого введите следующие команды:

$ sudo systemctl restart apache2
$ sudo systemctl status apache2

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

Путь 2: настраиваем авторизацию при помощи файлов .htaccess

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

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

$ sudo nano /etc/apache2/apache2.conf

Далее найдите блок <Directory> для директории /var/www, который содержит корневой каталог документов. Включите поддержку файлов .htaccess, изменив значение директивы AllowOverride с "None" на "All" – в этом случае сервер будет допускать все директивы .htaccess файла:

. . .

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

После этого сохраните и закройте файл.

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

$ sudo nano /var/www/html/.htaccess

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

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

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

$ sudo systemctl restart apache2
$ sudo systemctl status apache2

Шаг 4: проверяем наличие защиты при аутентификации

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

Как настроить авторизацию по паролю на Apache с Ubuntu 16.04Если вы введете правильные данные, то вы сможете увидеть запрашиваемые данные. Если вы введете некорректные данные или нажмете отмену (Cancel), то вы увидите страницу с ошибкой (Unauthorized), которая говорит о том, что для не прошедших аутентификацию пользователей доступ запрещен:

UnauthorizedЗаключение

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

VDS Timeweb

Комментарии