Данная статья применима к:
- Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7)
- Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6)
- Astra Linux Special Edition РУСБ.10015-16 исп. 1 и исп. 2
- Astra Linux Special Edition РУСБ.10265-01 (очередное обновление 8.1)
- Astra Linux Common Edition 2.12
Аннотация
В статье описывается настройка аутентификации Kerberos для web-сервера apache2 в доменах FreeIPA или ALD. В качестве примера создается одностраничный тестовый web-сайт, требующий для просмотра аутентификации Kerberos. Параметры стенда:
- Имя домена: ipadomain0.ru;
- Контроллер домена:
- Имя сервера контроллера: ipa0.ipadomain0.ru;
- Web-сервер:
- Имя сервера: web.ipadomain0.ru
Компьютер с web-сервером зарегистрирован в домене как компьютер домена, и далее служба web-сервера разворачивается на этом компьютере. Доступ к содержимому web-сайтов может осуществляться с помощью разных браузеров, требующих отдельных настроек аутентификации. Тестирование работы созданной web-службы выпоняется с помощью команды curl, настройка web-браузеров рассматривается в отдельной главе.
Установка пакетов
Служба web-сервера apache2 представлена в Astra Linux пакетом apache2. При установке ОС пакет apache2 по умолчанию не устанавливается, но может быть выбран для установки на этапе выбора программного обеспечения во время установки ОС.
Только для Astra Linux Special Edition:
Службы, устанавливаемые при установке ОС (кроме службы SSH), по умолчанию не запускаются, так как запуск ненастроенных служб может создавать угрозу безопасности.
Если пакет apache2 устанавливался при установке ОС, то после запуска ОС и выполнения настройки службы следует вручную запустить службу и разрешить автоматический запуск службы после перезагрузки:
systemctl enable apache2
Если пакет apache2 не был установлен ранее, то установить его можно с помощью графического менеджера пакетов или командой:
Для использования аутентификации Kerberos дополнительно установить пакет libapache2-mod-auth-kerb, содержащий модуль аутентификации auth_kerb:
Настройка конфигурации apache2
В конфигурационных файлах web-сайтов, доступ к которым предоставляется службой apache2, должны быть заданы параметры авторизации. Например, создадим файл /etc/apache2/sites-available/auth-kerberos.conf со следующим содержимым:
<VirtualHost *:81> ServerAdmin webmaster@localhost DocumentRoot /var/www ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined <Directory /var/www> 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-браузеров для работы с Kerberos в данной статье не рассматривается). Полное описание параметров настройки web-сайтов доступно в документации apache2.
Запретить использование web-сайта, устанавливаемого по умолчанию при установке apache2:
<html> <body> <div style="width: 100%; font-size: 40px; font-weight: bold; text-align: center;"> Тестовая страница для проверки аутентификации Kerberos. Если вы видите этот текст, то аутентификация выполнена успешно. </div> </body> </html>
Для того чтобы кириллица отображалась корректно добавить в файл /etc/apache2/apache2.conf параметр:
AddDefaultCharset UTF-8
Только для Astra Linux Special Edition:
В файл /etc/apache2/apache2.conf установить параметр AstraMode в значение off:
AstraMode off
После изменения конфигурации перезапустить службу apache2:
Настройка аутентификации Kerberos в домене FreeIPA
- На контроллере домена:
Получить права администратора домена:
kinit adminЗарегистрировать доменную службу
ipa service-add HTTP/<полное_доменное_имя_web-сервера>
- На 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
Настройка аутентификации Kerberos в домене ALD
Для домена ALD сценарий настройки состоит таких же операций, как сценарий для FreeIPA, и отличается только синтаксисом команд. Сценарий настройки для ALD может выглядеть так:
На контроллере домена команды:
ald-admin sgroup-svc-add HTTP/<полное_доменное_имя_web-сервера> --sgroup=mac
На web-сервере команды:
ald-client update-svc-keytab HTTP/`hostname` --ktfile="$keytab"
chown www-data "$keytab"
chmod 644 "$keytab"
После изменения конфигурации перезапустить сервер:
Проверка работы аутентификации
Созданный на этапе настройки apache2 тестовый сайт должен быть доступен по адресу http://<полное_доменное_имя_web-сервера>. Далее для получения содержимого сайта используется команда curl. Особенностью работы этой команды является то, что для выполнения аутентификации Kerberos она использует имя таблицы билетов Kerberos, хранящейся в переменной окружения KRB5CCNAME. Если тестирование выполняется не от имени доменного пользователя, значение переменной окружения KRB5CCNAME должно быть установлено вручную.
- Проверка отказа в доступе:
Попытаться прочитать содержимое web-сайта без авторизации:
curl http://`hostname`Получен отказ в доступе.
<!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:curl --negotiate -u : http://`hostname`Получен отказ в доступе.
<!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:
kinit adminУбедиться, что переменная окружения KRB5CCNAME содержит верное указание на таблицу ключей:
echo $KRB5CCNAMEЕсли значение переменной не задано (например, тестирование выполняется от имени локального а не доменного пользователя), то получить имя таблицы ключей с помощью команды klist и задать правильное значение переменной, например:
KEYRING:persistent:67200klistTicket 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.RUexport KRB5CCNAME=KEYRING:persistent:1000:1000Прочитать содержимое сайта используя авторизацию Kerberos:
curl --negotiate -u : http://`hostname`
<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 поддержка аутентификации присутствует автоматически.