Примечание
# samba-tool dns zonecreate dc1 0.168.192.in-addr.arpa -Uadministrator
Password for [TEST\administrator]:
Zone 0.168.192.in-addr.arpa created successfully
где dc1 — имя контроллера домена.
# samba-tool dns add dc1 0.168.192.in-addr.arpa 150 PTR web.test.alt
#samba-tool user add --random-password nginxauth
#samba-tool user setexpiry nginxauth
#samba-tool spn add HTTP/web.test.alt nginxauth
# samba-tool domain exportkeytab /tmp/nginx.keytab --principal=HTTP/web.test.alt@TEST.ALT
Export one principal to /tmp/nginx.keytab
# apt-get install nginx nginx-spnego
# ln -s /etc/nginx/modules-available.d/http_auth_spnego.conf /etc/nginx/modules-enabled.d/
/etc/nginx
. Установить права на файл keytab:
# chmod 644 /etc/nginx/nginx.keytab
Nginx должен иметь права на чтение keytab-файла, но не на его изменение.
server
файла конфигурации сайта:
server { … location / { root /var/www/html; auth_gss on; auth_gss_realm TEST.ALT; #имя Kerberos области auth_gss_keytab /etc/nginx/nginx.keytab; #путь к keytab-файлу auth_gss_service_name HTTP/web.test.alt; #имя используемого SPN auth_gss_allow_basic_fallback off; } }
auth_gss
— включение/отключение аутентификации;
auth_gss_keytab
— абсолютный путь к файлу keytab, содержащему учётные данные службы;
auth_gss_realm
— имя области Kerberos;
auth_gss_service_name
— имя субъекта-службы, используемое при получении учетных данных;
auth_gss_allow_basic_fallback
— включить/отключить базовую аутентификацию. При включённой базовой аутентификации (по умолчанию), если SSO не проходит (машина не в домене) разрешает обычный ввод логина и пароля. Если используется SPNEGO без SSL, рекомендуется отключить базовую аутентификацию, так как в этом случае пароль будет отправлен в виде открытого текста.
# systemctl restart nginx
auth_gss_authorized_principal
. Можно указывать несколько записей, по одной на строку:
auth_gss_authorized_principal <username>@<realm> auth_gss_authorized_principal <username2>@<realm>
auth_gss_authorized_principal_regex
. Этот параметр можно использовать вместе с параметром auth_gss_authorized_principal
:
auth_gss_authorized_principal <username>@<realm> auth_gss_authorized_principal_regex ^(<username>)/(<group>)@<realm>$
$Попытаться прочитать содержимое сайта, используя аутентификацию 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
$ curl --negotiate -u : http://web.test.alt
<html><body><h1>It works!</h1></body></html>
Получено содержимое страницы.
$Попытаться прочитать содержимое сайта, используя аутентификацию Kerberos:kdestroy
$klist
$ curl --negotiate -u : http://web.test.alt
<html>
<head><title>401 Authorization Required</title></head>
<body>
<center><h1>401 Authorization Required</h1></center>
<hr><center>nginx/1.22.1</center>
</body>
</html>
Содержимое страницы не доступно.