Оглавление |
---|
Информация | ||
---|---|---|
| ||
|
Аннотация
В статье описывается настройка аутентификации Kerberos для web-сервера apache2 в доменах FreeIPA (ALD Pro) или ALD. В качестве примера создается одностраничный тестовый web-сайт, требующий для просмотра аутентификации Kerberos. Параметры стенда:
- Имя домена: ipadomain0.ru.
- Контроллер домена:
- Имя сервера контроллера: ipa0.ipadomain0.ru.
- В качестве web-сервера используется отдельный сервер, введенный в домен:
- Имя сервера: web.ipadomain0.ru.
Компьютер web-сервера зарегистрирован в домене, и служба web-сервера разворачивается на этом компьютере. Доступ к содержимому web-сайтов может осуществляться с помощью разных браузеров, требующих индивидуальных настроек аутентификации. Тестирование работы созданной web-службы выполняется с помощью команды curl, настройка web-браузеров рассматривается в отдельной главе.
Далее предполагается, что web-сервер введен в домен. Порядок ввода в домен см. в статье Ввод компьютера Astra Linux в домен FreeIPA.
Установка пакетов
Служба web-сервера представлена в Astra Linux пакетом apache2. При установке ОС пакет apache2 по умолчанию не устанавливается, но может быть выбран для установки во время установки ОС на этапе выбора программного обеспечения.
Информация | |||||
---|---|---|---|---|---|
Только для Astra Linux Special Edition: Службы, устанавливаемые при установке Astra Linux Special Edition (кроме службы SSH), по умолчанию не запускаются автоматически, так как запуск не настроенных служб может создавать угрозу безопасности.
|
Если пакет apache2 не был установлен ранее, то установить его можно с помощью графического менеджера пакетов или командой:
Command |
---|
sudo apt install apache2 |
Для использования аутентификации Kerberos для службы apache2 в составе дистрибутивов Astra Linux имеются два пакета:
- libapache2-mod-auth-gssapi - рекомендуется к использованию ;в Astra Linux Special Edition x.7. Является единственным вариантом для очередного обновления Astra Linux Special Edition x.8.
- libapache2-mod-auth-kerb - устарел и не рекомендуется к использованию. Недоступен начиная с очередного обновления Astra Linux Special Edition x.8.
Установка пакетов:
Рекомендованный вариант (libapache2-mod-auth-gssapi):
Command sudo apt install libapache2-mod-auth-gssapi
Устаревший вариант (libapache2-mod-auth-kerb):
Command sudo apt install libapache2-mod-auth-kerb
Информация |
---|
При установке контроллера (реплики контроллера) домена FreeIPA служба apache2 будет установлена и настроена автоматически, однако настройка аутентификации Kerberos при этом не производится. |
Настройка конфигурации apache2
В конфигурационных файлах web-сайтов, доступ к которым предоставляется службой apache2, должны быть заданы параметры аутентификации. Пример настройки параметров:
- Создать файл /etc/apache2/sites-available/auth-kerberos.conf со следующим содержимым:
Рекомендованный вариант. Для пакета libapache2-mod-auth-gssapi:
Блок кода <VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined <Directory /var/www> AuthType GSSAPI AuthName "test" #GssapiBasicAuth On GssapiCredStore keytab:<путь_к_таблице_ключей> # Включить 3 нижних параметра, если нужно кешировать сессии (настройка web-браузеров для работы с Kerberos в данной статье не рассматривается) #GssapiUseSessions On #Session On #SessionCookieName myapp_web_gssapi_session path=/my_url;httponly;secure; Require valid-user </Directory> </VirtualHost>
Полное описание параметров настройки web-сайтов доступно в документации apache2;
Устаревший вариант. Для пакета libapache2-mod-auth-kerb:
Блок кода <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 Kerberos # Имя области (realm) Керберос - имя домена ЗАГЛАВНЫМИ буквами KrbAuthRealms <РЕАЛМ_КЕРБЕРОС> # Имя доменной службы, предоставляемой сервером KrbServiceName HTTP/<полное_доменное_имя_сервера> # Имя файла, в котором сохранены ключи доменной службы Krb5Keytab /etc/apache2/keytab KrbMethodNegotiate on KrbMethodK5Passwd off require valid-user KrbSaveCredentials on </Directory> </VirtualHost>
В этом варианте особо можно выделить параметр KrbMethodK5Passwd: если его значение изменить на on, то при входе на web-сайт будут интерактивно запрашиваться имя и пароль для выполнения аутентификации Kerberos. Использование интерактивного ввода может быть удобно для проверки доступности сайта с помощью web-браузеров;
Запретить использование web-сайта, устанавливаемого по умолчанию при установке apache2:
Command sudo a2dissite 000-default.conf Разрешить использование созданного конфигурационного файла для предоставления доступа к web-сайту:
Command sudo a2ensite auth-kerberos Создать каталог /var/www/html/auth-kerberos для документов web-сайта:
Command sudo mkdir /var/www/html/auth-kerberos Создать в каталоге /var/www/html/auth-kerberos файл /var/www/html/auth-kerberos/index.html со страницей web-сайта:
Блок кода <html> <body> <div style="width: 100%; font-size: 40px; font-weight: bold; text-align: center;"> Тестовая страница для проверки аутентификации Kerberos. Если вы видите этот текст, то аутентификация выполнена успешно. </div> </body> </html>
Для того чтобы кириллица в содержимом web-страниц отображалась корректно добавить в файл /etc/apache2/apache2.conf параметр:
Блок кода AddDefaultCharset UTF-8
- Только для Astra Linux Special Edition: настроить использование параметра AstraMode. В целях тестирования можно в файле /etc/apache2/apache2.conf установить параметр AstraMode в значение off:
Для настройки при эксплуатации подробнее см. Параметр AstraMode службы apache2 в Astra Linux.Блок кода AstraMode off
Настройка аутентификации Kerberos в домене FreeIPA
- На контроллере домена:
Получить права администратора домена:
Command kinit admin Зарегистрировать доменную службу
Command ipa service-add HTTP/<полное_доменное_имя_web-сервера>
- На web-сервере:
Получить права администратора домена от имени суперпользователя:
Command sudo kinit admin Действуя от имени суперпользователя с правами администратора домена получить и сохранить таблицу ключей новой службы:
Command sudo ipa-getkeytab -s ipa0.ipadomain0.ru -k /etc/apache2/keytab -p HTTP/`hostname` Установить права доступа на файл с таблицей ключей:
Command sudo chown www-data:www-data /etc/apache2/keytab
Перезапустить службу apache2:
Подсказка icon false sudo systemctl restart apache2
Настройка аутентификации Kerberos в домене ALD
Для домена ALD сценарий настройки состоит таких же операций, как сценарий для FreeIPA, и отличается только синтаксисом команд. Сценарий настройки для ALD может выглядеть так:
На контроллере домена выполнить команды:
Command icon false ald-admin service-add HTTP/<полное_доменное_имя_web-сервера>
ald-admin sgroup-svc-add HTTP/<полное_доменное_имя_web-сервера> --sgroup=macНа web-сервере выполнить команды:
Command icon false keytab="/etc/apache2/keytab"
ald-client update-svc-keytab HTTP/`hostname` --ktfile="$keytab"
chown www-data "$keytab"
chmod 644 "$keytab"Перезапустить службу apache2:
Подсказка icon false sudo systemctl restart apache2
Проверка работы аутентификации
Созданный на этапе настройки apache2 тестовый сайт должен быть доступен по адресу http://<полное_доменное_имя_web-сервера>. Далее для получения содержимого сайта используется команда curl. Особенностью работы этой команды является то, что для выполнения аутентификации Kerberos она использует имя таблицы билетов Kerberos, хранящейся в переменной окружения KRB5CCNAME. Если тестирование выполняется не от имени доменного пользователя, значение переменной окружения KRB5CCNAME должно быть установлено вручную.
- Проверка отказа в доступе:
Попытаться прочитать содержимое web-сайта без выполнения аутентификации:
Command Title curl http://`hostname`/auth-kerberos <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>401 Unauthorized</title>
</head><body>
<h1>Unauthorized</h1>
<p>This server could not verify that you
are authorized to access the document
requested. Either you supplied the wrong
credentials (e.g., bad password), or your
browser doesn't understand how to supply
the credentials required.</p>
<hr>
<address>Apache/2.4.46 (Debian) Server at web.ipadomain0.ru Port 80</address>
</body></html>Получен отказ в доступе.
Удалить билеты Kerberos:
Command kdestroy Попытаться прочитать содержимое сайта использую аутентификацию Kerberos:
Command Title curl --negotiate -u : http://`hostname`/auth-kerberos/ <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>401 Unauthorized</title>
</head><body>
<h1>Unauthorized</h1>
<p>This server could not verify that you
are authorized to access the document
requested. Either you supplied the wrong
credentials (e.g., bad password), or your
browser doesn't understand how to supply
the credentials required.</p>
<hr>
<address>Apache/2.4.46 (Debian) Server at web.ipadomain0.ru Port 80</address>
</body></html>Получен отказ в доступе.
- Проверка предоставления доступа;
Получить билет Kerberos:
Command kinit admin Убедиться, что переменная окружения KRB5CCNAME содержит верное указание на таблицу ключей, например:
Command Title echo $KRB5CCNAME KEYRING:persistent:67200 Расположение таблицы ключей зависит от выбранного способа входа (способа получения билетов Kerberos) и от установленного клиента домена. Например, возможный вариант значения, когда таблица ключей хранится в файле:
Блок кода FILE:/tmp/krb5cc_1000
Проверить корректность значения переменной окружения можно командой klist: выполнить команду klist и использовать указанное в выводе расположение таблицы как значение переменной. Например:
Получить данные:
Command Title klist Ticket cache: KEYRING:persistent:1000:1000
Default principal: admin@IPADOMAIN0.RUValid starting Expires Service principal
03.11.2021 11:26:24 04.11.2021 11:26:22 krbtgt/IPADOMAIN0.RU@IPADOMAIN0.RUЗадать значение переменной окружения:
Command export KRB5CCNAME=KEYRING:persistent:1000:1000
Прочитать содержимое сайта используя аутентификацию Kerberos:
Command Title curl --negotiate -u : http://`hostname`/auth-kerberos/ <html>
<body>
<div style="width: 100%; font-size: 40px; font-weight: bold; text-align: center;">
Тестовая страница для проверки аутентификации Kerberos.
Если вы видите этот текст, то аутентификация выполнена успешно.
</div>
</body>
</html>Команда должна завершиться успехом.
Настройка web-браузеров
Для работы с web-сервером, настроенным в соответствии с настоящей статьей, web-браузер пользователя должен поддерживать аутентификацию negotiate.
Настройка web-браузера Mozilla Firefox
Для включения аутентификации в web-браузере Mozilla Firefox в настройках, доступных по адресу about:config, необходимо указать для каких серверов доступна аутентификация negotiate. Для выполнения данной настройки в качестве значений параметра
Блок кода |
---|
network.negotiate-auth.trusted-uris |
задать маски доменов или, в общем случае, разрешить использовать любые http- и https-соединения, указав, например, значения:
Блок кода |
---|
http://, https:// |
При необходимости обеспечения сквозной аутентификации в браузере Mozilla Firefox в настройках в качестве значений параметра
Блок кода |
---|
network.negotiate-auth.delegation-uris |
задать маски доменов, которым можно передавать данные для сквозной аутентификации. При этом в запускаемых сценариях должна быть определена переменная окружения KRB5CCNAME. Например, для сценариев php это будет выглядеть так:
Блок кода |
---|
putenv("KRB5CCNAME=".$_SERVER[’KRB5CCNAME’]); |
Настройка web-браузера Konqueror
В современных версиях браузера Konqueror поддержка аутентификации присутствует автоматически.