Apache2/AD-auth: различия между версиями

Материал из ALT Linux Wiki
(Новая страница: «{{Stub}} Исходные данные: *Домен ActiveDirectory DOMG.TESTG *Web-сервер apserver введенный в домен с помощью sssd З...»)
 
Нет описания правки
Строка 6: Строка 6:
Задача:
Задача:
*Настроить аутентификацию Apache2 с PHP через AD
*Настроить аутентификацию Apache2 с PHP через AD
 
==Создание keytab-файла==
Для работы доменной аутентификации нам необходим keytab-файл, его можно сгенерировать на сервере домена или с помощью samba на машине с web-сервером.<br>
Для работы доменной аутентификации нам необходим keytab-файл, его можно сгенерировать на сервере домена или с помощью samba на машине с web-сервером.<br>
Воспользуемся вторым вариантом.<br>
Воспользуемся вторым вариантом.<br>
Строка 49: Строка 49:
HTTP/apserver.domg.testg@DOMG.TESTG: kvno = 3
HTTP/apserver.domg.testg@DOMG.TESTG: kvno = 3
HTTP/apserver@DOMG.TESTG: kvno = 3</pre>
HTTP/apserver@DOMG.TESTG: kvno = 3</pre>
В целях безопасности необходимо создать отдельный keytab-файл для apache2. Сделать это можно с помощью утилиты ktutil из пакета krb5-kadmin.
Установим krb5-kadmin:
<pre># apt-get install krb5-kadmin</pre>
Скопируем системный keytab  в папку с apache2:
<pre># cp /etc/krb5.keytab /etc/httpd2/apache2.keytab</pre>
Создадим apache2.keytab с помощью ktutil, оставив только HTTP ключи:
<pre># ktutil
ktutil: </pre>
Загрузим системный keytab:
<pre>ktutil:  read_kt /etc/krb5.keytab</pre>
Посмотреть список ключей можно с помощью команды list:
<pre>ktutil:  list</pre>
Нам необходимо оставить записи с меткой HTTP, удалив все остальные с помощью команды delent:
<pre>ktutil:  delent 1</pre>
В итоге файл должен выглядеть так:
<pre>ktutil:  list
slot KVNO Principal
---- ---- ---------------------------------------------------------------------
  1    3      HTTP/apserver.domg.testg@DOMG.TESTG
  2    3                HTTP/APSERVER@DOMG.TESTG
  3    3      HTTP/apserver.domg.testg@DOMG.TESTG
  4    3                HTTP/APSERVER@DOMG.TESTG
  5    3      HTTP/apserver.domg.testg@DOMG.TESTG
  6    3                HTTP/APSERVER@DOMG.TESTG
  7    3      HTTP/apserver.domg.testg@DOMG.TESTG
  8    3                HTTP/APSERVER@DOMG.TESTG
  9    3      HTTP/apserver.domg.testg@DOMG.TESTG
  10    3                HTTP/APSERVER@DOMG.TESTG</pre>
Сохраним получившийся keytab:
<pre>ktutil:  write_kt /etc/httpd2/apache2.keytab</pre>
Поменяем владельца и права доступа:
<pre># chown apache2:apache2 /etc/httpd2/apache2.keytab
# chmod 0440 /etc/httpd2/apache2.keytab</pre>
==Настройка Apache2==
Установим и включим необходимые модули:
<pre># apt-get install apache2-mod_auth_kerb
# a2enmod auth_krb5
# a2enmod authn_core
# a2enmod authz_user
# systemctl restart httpd2</pre>
Удобнее всего настраивать модуль с помощью .htaccess файлов.<br>
Для этого разрешим использование файла .htaccess в настройках сайта:
<pre>...
<Directory "/var/www/html">
    AllowOverride All
</Directory>
...</pre>
Пример настройки .htaccess для аутентификации доменного пользователя для корневого каталога сайта:
<pre>
  AuthType Kerberos
  AuthName "Kerberos Login"
  KrbMethodNegotiate On
  KrbMethodK5Passwd On
  KrbAuthRealms DOMG.TESTG
  Krb5KeyTab /etc/httpd2/apache2.keytab
  KrbServiceName HTTP
  KrbSaveCredentials On
  require valid-user
</pre>
== Настройка PHP аутентификации GSSAPI ==

Версия от 09:08, 9 марта 2017

Stub.png
Данная страница находится в разработке.
Эта страница ещё не закончена. Информация, представленная здесь, может оказаться неполной или неверной.

Исходные данные:

  • Домен ActiveDirectory DOMG.TESTG
  • Web-сервер apserver введенный в домен с помощью sssd

Задача:

  • Настроить аутентификацию Apache2 с PHP через AD

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

Для работы доменной аутентификации нам необходим keytab-файл, его можно сгенерировать на сервере домена или с помощью samba на машине с web-сервером.
Воспользуемся вторым вариантом.
Минимально необходимая конфигурация samba:

[global]
workgroup = DOMG
realm = DOMG.TESTG
security = ads
passdb backend = tdbsam
kerberos method = system keytab

Проверим конфигурационный файл samba:

# testparm
Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
Server role: ROLE_DOMAIN_MEMBER

Press enter to see a dump of your service definitions

Войдем в домен с помощью samba:

# net ads join -U Administrator

Проверим вход в домен:

# net ads testjoin
Join is OK

Создадим и добавим в системный keytab принципала сервиса "HTTP":

# net ads keytab add HTTP -U Administrator

Проверим наш keytab:

# klist -ek /etc/krb5.keytab
...
   3 HTTP/apserver.domg.testg@DOMG.TESTG (des-cbc-crc) 
   3 HTTP/APSERVER@DOMG.TESTG (des-cbc-crc) 
   3 HTTP/apserver.domg.testg@DOMG.TESTG (des-cbc-md5) 
   3 HTTP/APSERVER@DOMG.TESTG (des-cbc-md5) 
   3 HTTP/apserver.domg.testg@DOMG.TESTG (aes128-cts-hmac-sha1-96) 
   3 HTTP/APSERVER@DOMG.TESTG (aes128-cts-hmac-sha1-96) 
   3 HTTP/apserver.domg.testg@DOMG.TESTG (aes256-cts-hmac-sha1-96) 
   3 HTTP/APSERVER@DOMG.TESTG (aes256-cts-hmac-sha1-96) 
   3 HTTP/apserver.domg.testg@DOMG.TESTG (arcfour-hmac) 
   3 HTTP/APSERVER@DOMG.TESTG (arcfour-hmac) 
...

Так же можно проверить получение билета kerberos для созданных принципалов сервиса:

# kinit Administrator
# kvno HTTP/apserver.domg.testg@DOMG.TESTG HTTP/apserver@DOMG.TESTG
HTTP/apserver.domg.testg@DOMG.TESTG: kvno = 3
HTTP/apserver@DOMG.TESTG: kvno = 3

В целях безопасности необходимо создать отдельный keytab-файл для apache2. Сделать это можно с помощью утилиты ktutil из пакета krb5-kadmin. Установим krb5-kadmin:

# apt-get install krb5-kadmin

Скопируем системный keytab в папку с apache2:

# cp /etc/krb5.keytab /etc/httpd2/apache2.keytab

Создадим apache2.keytab с помощью ktutil, оставив только HTTP ключи:

# ktutil
ktutil: 

Загрузим системный keytab:

ktutil:  read_kt /etc/krb5.keytab

Посмотреть список ключей можно с помощью команды list:

ktutil:  list

Нам необходимо оставить записи с меткой HTTP, удалив все остальные с помощью команды delent:

ktutil:  delent 1

В итоге файл должен выглядеть так:

ktutil:  list
slot KVNO Principal
---- ---- ---------------------------------------------------------------------
   1    3      HTTP/apserver.domg.testg@DOMG.TESTG
   2    3                 HTTP/APSERVER@DOMG.TESTG
   3    3      HTTP/apserver.domg.testg@DOMG.TESTG
   4    3                 HTTP/APSERVER@DOMG.TESTG
   5    3      HTTP/apserver.domg.testg@DOMG.TESTG
   6    3                 HTTP/APSERVER@DOMG.TESTG
   7    3      HTTP/apserver.domg.testg@DOMG.TESTG
   8    3                 HTTP/APSERVER@DOMG.TESTG
   9    3      HTTP/apserver.domg.testg@DOMG.TESTG
  10    3                 HTTP/APSERVER@DOMG.TESTG

Сохраним получившийся keytab:

ktutil:  write_kt /etc/httpd2/apache2.keytab

Поменяем владельца и права доступа:

# chown apache2:apache2 /etc/httpd2/apache2.keytab
# chmod 0440 /etc/httpd2/apache2.keytab

Настройка Apache2

Установим и включим необходимые модули:

# apt-get install apache2-mod_auth_kerb
# a2enmod auth_krb5
# a2enmod authn_core
# a2enmod authz_user
# systemctl restart httpd2

Удобнее всего настраивать модуль с помощью .htaccess файлов.
Для этого разрешим использование файла .htaccess в настройках сайта:

...
<Directory "/var/www/html">
    AllowOverride All
</Directory>
...

Пример настройки .htaccess для аутентификации доменного пользователя для корневого каталога сайта:

  AuthType Kerberos
  AuthName "Kerberos Login"
  KrbMethodNegotiate On
  KrbMethodK5Passwd On
  KrbAuthRealms DOMG.TESTG
  Krb5KeyTab /etc/httpd2/apache2.keytab
  KrbServiceName HTTP
  KrbSaveCredentials On
  require valid-user

Настройка PHP аутентификации GSSAPI