Apache: basic/digest авторизация ·

Введение

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

Более подробную версию настоящего обучающего руководства с более подробным описанием каждого действия можно найти в статье Настройка аутентификации по паролю для Apache в Ubuntu 18.04.

Introduction

When setting up a web server, there are often sections of the site that you wish to restrict access to. Web applications often provide their own authentication and authorization methods, but the web server itself can be used to restrict access if these are inadequate or unavailable.

In this guide, we’ll demonstrate how to password protect assets on an Apache web server running on Ubuntu 14.04.

2: создание файла паролей

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

При первом запуске утилита требует флаг -c, который создаёт необходимый файл .htpasswd. Чтобы создать новую запись в файле, укажите в конце команды имя пользователя:

sudo htpasswd -c /etc/apache2/.htpasswd 8host

Команда запросит пароль текущего пользователя.

Чтобы добавить в этот файл данные других пользователей, используйте команду htpasswd без флага –с.

3: настройка аутентификации apache

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

Выберите наиболее подходящий метод настройки и следуйте инструкциям соответствующего раздела.

4: тестирование авторизации

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

Apache c kerberos-аутентификацией и pam авторизацией

Для работы Kerberos аутентификации в домене AD можно создать отдельную сервисную учётную запись, для которой в дальнейшем зарегистрировать servicePrincipalName (SPN)веб-сервера и сгенерировать keytab-файл, содержащий данную SPN-запись.

Повторяться не буду, так как эта процедура пошагово рассмотрена в одной из прошлых заметок (см. пункт “Создание в домене AD сервисной учётной записи” и “Создание keytab-файла для сервисной учётной записи”). Предполагая, что необходимый keytab-файл у нас уже есть, размещаем его в доступном для службы веб-сервера месте и ограничиваем к нему доступ:

Configuring access control with .htaccess files

If you wish to set up password protection using .htaccess files instead, you should begin by editing the main Apache configuration file to allow .htaccess files:

  1. sudonano /etc/apache2/apache2.conf

Digest

Работа Digest авторизации чуть сложнее. Прежде всего, при первом сообщении клиенту о необходимости прохождения авторизации (шаг 2), сервер передает в заголовке ряд параметров

  • realm – имя защищенной области (помните, мы акцентировали на ней внимание при настроке файла конфигурации?) Здесь значение этого параметра играет роль (в отличии от Basic авторизации)
  • nonce – уникальный ключ, генерируемый сервером в момент отправки сообщения клиенту
  • algorithm – название алгоритма (как правило, MD5)

Install the apache utilities package

In order to create the file that will store the passwords needed to access our restricted content, we will use a utility called htpasswd. This is found in the apache2-utils package within the Ubuntu repositories.

Update the local package cache and install the package by typing this command. We will take this opportunity to also grab the Apache2 server in case it is not yet installed on the server:

  1. sudoapt-get update
  2. sudoapt-getinstall apache2 apache2-utils

Вариант 1: настройка аутентификации через виртуальный хост

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

Откройте файл виртуального хоста того сайта, доступ к которому нужно ограничить. В данном мануале используется стандартный файл default-ssl.conf , который поставляется вместе с apache.

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

Внутри файл выглядит так (для удобства закомментированные строки опущены):

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

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

Чтобы включить поддержку аутентификации по файлам .htaccess, откройте конфигурационный файл Apache:

sudo nano /etc/apache2/apache2.conf

Найдите блок <Directory> для каталога /var/www (document root по умолчанию). Чтобы включить поддержку файлов .htaccess, нужно изменить значение директивы AllowOverride с None на All.

. . .<Directory /var/www/>Options Indexes FollowSymLinksAllowOverride AllRequire all granted</Directory>. . .

Сохраните и закройте файл.

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

sudo nano /var/www/html/.htaccess

Добавление пользователя с правами сетевого доступа

Создаём пользователя и на вкладке Dial-in предоставляем права сетевого доступа:

image

Другие обучающие руководства

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

Контроль по ip

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

Внимание! Если вы хотите использовать эти директивы в файле .htaccess, проверьте, что бы для вашего хоста директива AllowOverride корневого файла конфигурации Apache включала опцию Limit

Order

Значения: Order (allow,deny | deny,allow)

Директива Order указывает порядок, в котором будет производиться чтение из директив Allow и Deny

  • Allow,deny – сначала читаются директивы Allow. Если пользователя нет в этом списке, то он блокируется. Если же он есть, то далее считываются директивы Deny(процесс еще не закончен). Если же пользователь есть и там, то он блокируется. Если его там нет, то он пропускается. Т.е пользователь пропускается только при наличии только в списке Allow, но не в Deny
  • Deny,allow – сначала обрабатываются директивы Deny и отсеиваются те пользователи, которые есть в этом списке. Любые другие пропускаются. Т.е пользователь пропускается всегда, но если его нет в списке Deny

Allow и Deny

Формат директив: (Allow | Deny) from (IP | IPs | all) (IP | IPs | all) : (IP | IPs | all)

Директивы Allow и Deny определяют клиентов, которым разрешить или запретить доступ к серверу.

Директивы допускают использование:

  • Одиночного IP(IP) – обычный вид IP, например, 127.0.0.1
  • Группы IP(IPs) – группа IP, например, для доступа, только из локальной сети, 192.168.1.0/24
  • Любого IP(all) – обозначает любой IP

После слова from может идти любое количество указанных директив, разделенных пробелом

Примеры

Файл .htaccess

Order allow,deny
# Deny from all # если вы это напишите, то даже те адреса,
# которые указаны в директивах Allow не будет пропущены
Allow from 192.168.1.0/24 11.11.11.12

В этом файле указывается доступ только для клиентов из локальной сети или с IP 11.11.11.12

Контроль по имени пользователя или группе

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

Настройка web-сервера

1. Устанавливаем модуль radius для apache2:

sudo apt install libapache2-mod-auth-radius
sudo a2enmod auth_radius

2. Выбираем нужный сайт и в его конфигурации делаем изменения:

Настройка сервера jas


В консоли управления JAS добавляем любой из указанных выше OTP-аутентификаторов.

В свойствах указываем имя пользователя:

image

Более подробно о настройке сервера JAS написано в документации по продукту, а также в

Настройка сервера radius (nps)


Запускаем консоль управления NPS.

1. Добавим наш Web-сервер в качестве клиента:
image
image

Подключаем к веб-серверу модуль mod_authnz_pam

Посмотрим информацию о модуле mod_authnz_pam, который доступен нам в репозиториях CentOS Linux 7.2:

Предварительные требования

Для выполнения этого обучающего руководства вам потребуется доступ к следующим компонентам на сервере Ubuntu 18.04:

  • Пользователь sudo на сервере

  • Веб-сервер Apache2

  • Защищенный с помощью SSL сайт

Примеры паролирования

Файл .htaccess

Создаём службу pam

Создадим в каталоге /etc/pam.d/ файл описания собственной службы PAM, которая для процедур аутентификации и авторизации будет вызывать библиотеку SSSD (имя файла используем то, которое нам удобно):

Требования

Войдите в сессию вашего пользователя sudo и приступайте к работе.

Шаг 1 — установка пакета утилит apache

Мы установим утилиту с названием htpasswd, которая является частью пакета apache2-utils, для управления именами пользователя и паролями для доступа к ограниченному контенту.

  1. sudoapt update
  2. sudoaptinstall apache2-utils

Conclusion

You should now have everything you need to set up basic authentication for your site. Keep in mind that password protection should be combined with SSL encryption so that your credentials are not sent to the server in plain text. To learn how to create a self-signed SSL certificate to use with Apache, follow this guide. To learn how to install a commercial certificate, follow this guide.

Configuring access control within the virtual host definition

Begin by opening up the virtual host file that you wish to add a restriction to. For our example, we’ll be using the 000-default.conf file that holds the default virtual host installed through Ubuntu’s apache package:

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

Inside, with the comments stripped, the file should look similar to this:

/etc/apache2/sites-enabled/000-default.conf
Похожее:  Пишем чат бота для ВКонтакте на python с помощью longpoll / Хабр

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *