|
В статье описывается настройка аутентификации Kerberos для web-сервера apache2 в доменах FreeIPA или ALD. В качестве примера создается одностраничный тестовый web-сайт, требующий для просмотра аутентификации Kerberos. Параметры стенда:
Компьютер с web-сервером зарегистрирован в домене, и далее служба web-сервера разворачивается на этом компьютере. Доступ к содержимому web-сайтов может осуществляться с помощью разных браузеров, требующих отдельных настроек аутентификации. Тестирование работы созданной web-службы выполняется с помощью команды curl, настройка web-браузеров рассматривается в отдельной главе.
Служба web-сервера представлена в Astra Linux пакетом apache2. При установке ОС пакет apache2 по умолчанию не устанавливается, но может быть выбран для установки на этапе выбора программного обеспечения во время установки ОС.
Только для Astra Linux Special Edition: Службы, устанавливаемые при установке Astra Linux Special Edition (кроме службы SSH), по умолчанию не запускаются автоматически, так как запуск не настроенных служб может создавать угрозу безопасности.
|
Если пакет apache2 не был установлен ранее, то установить его можно с помощью графического менеджера пакетов или командой:
| sudo apt install apache2 |
Для использования аутентификации Kerberos для службы apache2 в составе дистрибутивов Astra Linux имеются два пакета:
Установка пакетов:
Рекомендованный вариант (libapache2-mod-auth-gssapi):
| sudo apt install libapache2-mod-auth-gssapi |
Устаревший вариант (libapache2-mod-auth-kerb):
| sudo apt install libapache2-mod-auth-kerb |
| При установке контроллера (реплики контроллера) домена FreeIPA служба apache2 будет установлена и настроена автоматически, однако настройка аутентификации Kerberos при этом не производится. |
В конфигурационных файлах web-сайтов, доступ к которым предоставляется службой apache2, должны быть заданы параметры аутентификации. Пример настройки параметров:
Рекомендованный вариант. Для пакета 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:
| sudo a2dissite 000-default.conf |
Разрешить использование созданного конфигурационного файла для предоставления доступа к web-сайту:
| sudo a2ensite auth-kerberos |
Создать каталог /var/www/html/auth-kerberos для документов web-сайта:
| 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: В файле /etc/apache2/apache2.conf установить параметр AstraMode в значение off:
AstraMode off |
Получить права администратора домена:
| kinit admin |
Зарегистрировать доменную службу
| ipa service-add HTTP/<полное_доменное_имя_web-сервера> |
Получить права администратора домена от имени суперпользователя:
| sudo kinit admin |
Действуя от имени суперпользователя с правами администратора домена получить и сохранить таблицу ключей новой службы:
| sudo ipa-getkeytab -s ipa0.ipadomain0.ru -k /etc/apache2/keytab -p HTTP/`hostname` |
Установить права доступа на файл с таблицей ключей:
| sudo chown www-data:www-data /etc/apache2/keytab |
Перезапустить службу apache2:
sudo systemctl restart apache2 |
Для домена ALD сценарий настройки состоит таких же операций, как сценарий для FreeIPA, и отличается только синтаксисом команд. Сценарий настройки для ALD может выглядеть так:
На контроллере домена выполнить команды:
ald-admin service-add HTTP/<полное_доменное_имя_web-сервера> |
На web-сервере выполнить команды:
keytab="/etc/apache2/keytab" |
Перезапустить службу apache2:
sudo systemctl restart apache2 |
Созданный на этапе настройки apache2 тестовый сайт должен быть доступен по адресу http://<полное_доменное_имя_web-сервера>. Далее для получения содержимого сайта используется команда curl. Особенностью работы этой команды является то, что для выполнения аутентификации Kerberos она использует имя таблицы билетов Kerberos, хранящейся в переменной окружения KRB5CCNAME. Если тестирование выполняется не от имени доменного пользователя, значение переменной окружения KRB5CCNAME должно быть установлено вручную.
Попытаться прочитать содержимое web-сайта без выполнения аутентификации:
| <!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:
| kdestroy |
Попытаться прочитать содержимое сайта использую аутентификацию Kerberos:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> |
Получен отказ в доступе.
Получить билет Kerberos:
| kinit admin |
Убедиться, что переменная окружения KRB5CCNAME содержит верное указание на таблицу ключей, например:
| KEYRING:persistent:67200 |
Расположение таблицы ключей зависит от выбранного способа входа (способа получения билетов Kerberos) и от установленного клиента домена. Например, возможный вариант значения, когда таблица ключей хранится в файле:
FILE:/tmp/krb5cc_1000 |
Проверить корректность значения переменной окружения можно командой klist: выполнить команду klist и использовать указанное в выводе расположение таблицы как значение переменной. Например:
Получить данные:
Ticket cache: KEYRING:persistent:1000:1000 Valid starting Expires Service principal |
Задать значение переменной окружения:
export KRB5CCNAME=KEYRING:persistent:1000:1000 |
Прочитать содержимое сайта используя аутентификацию Kerberos:
<html> |
Команда должна завершиться успехом.
Для работы с web-сервером, настроенным в соответствии с настоящей статьей, web-браузер пользователя должен поддерживать аутентификацию negotiate.
Для включения аутентификации в 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’]); |
В современных версиях браузера Konqueror поддержка аутентификации присутствует автоматически.