Product SiteDocumentation Site

6.10. Аутентификация других сервисов в Samba AD

В данном разделе показано, как обеспечить прозрачную авторизацию пользователей домена на веб-сайте. В качестве веб-сервера используется отдельный сервер (web.test.alt, IP-адрес 192.168.0.150), введенный в домен.

Примечание

Веб-сервер может быть присоединен или не присоединен к домену, это не имеет значения.
Для работы требуется наличие прямой и обратной записей DNS для веб-сервера.
Если в качестве веб-сервера используется не DC, следует добавить А-запись для веб-сервера:
$  samba-tool dns add dc1.test.alt test.alt web A 192.168.0.150 -Uadministrator
Password for [TEST\administrator]:
Record added successfully
где dc1.test.alt — имя контроллера домена.
Добавить зону обратного просмотра для подсети 192.168.0.0/24, в которой располагается веб-сервер:
$ samba-tool dns zonecreate dc1.test.alt 0.168.192.in-addr.arpa -Uadministrator
Password for [TEST\administrator]:
Zone 0.168.192.in-addr.arpa created successfully
Если требуется более одной обратной зоны (при использовании нескольких подсетей), следует запустить приведенную выше команду еще раз, но с данными для другой подсети.
Обратная зона работает напрямую без перезапуска Samba или BIND.
Добавить зону обратного просмотра для веб-сервера:
$ samba-tool dns add dc1.test.alt 0.168.192.in-addr.arpa 150 PTR web.test.alt

6.10.1. Настройка аутентификации Kerberos для веб-сервера Apache

В этом разделе показано, как обеспечить прозрачную авторизацию пользователей домена на веб-сайте, размещенном на веб-сервере Apache2.

6.10.1.1. Создание keytab-файла

Нужно настроить SPN (имена участников-служб) для имени сервера, на которое разрешается любой веб-сайт (подробнее см. Создание keytab-файла). Если виртуальный хостинг не используется, веб-адрес и имя машины будут одинаковыми. Для создания SPN на контроллере домена выполнить команды:
# samba-tool user add --random-password webauth
# samba-tool user setexpiry webauth --noexpiry
# samba-tool spn add HTTP/web.test.alt webauth
Создать Kerberos keytab-файл для Apache2:
# samba-tool domain exportkeytab /tmp/httpd.keytab --principal=HTTP/web.test.alt@TEST.ALT
Export one principal to /tmp/httpd.keytab
Перенести полученный файл keytab на веб-сервер в каталог /etc/httpd2/conf/, установить права на него, так чтобы Apache мог читать, но не изменять keytab-файл:
# chown apache2:apache2 /etc/httpd2/conf/httpd.keytab
# chmod 0440 /etc/httpd2/conf/httpd.keytab

6.10.1.2. Настройка Apache2

На веб-сервере установить пакет apache2-mod_auth_gssapi и включить необходимые модули:
# apt-get install apache2-mod_auth_gssapi
# a2enmod auth_gssapi
# a2enmod authn_core
# a2enmod authz_user
# service httpd2 condreload
Добавить в конфигурацию Apache строки:
<Location "/login.html">
        AuthType GSSAPI
        AuthName "GSSAPI Login"
        #GssapiBasicAuth On
        GssapiCredStore keytab:/etc/httpd2/conf/httpd.keytab
        GssapiAllowedMech krb5
        Require valid-user
</Location>
Перезапустить Apache:
# systemctl restart httpd2

6.10.1.3. Проверка аутентификации

Тестовый сайт должен быть доступен по адресу http://<полное_доменное_имя_веб-сервера>.
На рабочей станции, введённой в домен, получить билет Kerberos:
$ kinit ivanov
Password for ivanov@TEST.ALT:
$ klist
Ticket cache: KEYRING:persistent:500:krb_ccache_5VitJSL
Default principal: ivanov@TEST.ALT

Valid starting       Expires              Service principal
28.04.2023 15:54:41  29.04.2023 01:54:41  krbtgt/TEST.ALT@TEST.ALT
    renew until 05.05.2023 15:54:38
Попытаться прочитать содержимое сайта, используя аутентификацию Kerberos:
$ curl --negotiate -u : http://web.test.alt/login.html
<html><body><h1>It works!</h1></body></html>
Получено содержимое страницы.
Удалить билеты Kerberos:
$ kdestroy
$ klist
Попытаться прочитать содержимое сайта, используя аутентификацию Kerberos:
$ curl --negotiate -u : http://web.test.alt/login.html
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<title>Authentication required!</title>
</head>

<body>
<h1>Authentication required!</h1>
…
<h2>Error 401</h2>
<address>
  <a href="/">web.test.alt</a><br />
  <span>Apache/2.4.57 (Unix) mod_auth_gssapi/1.6.3 OpenSSL/1.1.1u</span>
</address>
</body>
</html>
Содержимое страницы не доступно.