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

Материал из ALT Linux Wiki
Нет описания правки
Строка 6: Строка 6:
*Настроить аутентификацию Apache2 с PHP через AD
*Настроить аутентификацию Apache2 с PHP через AD
==Создание keytab-файла==
==Создание keytab-файла==
Для работы доменной аутентификации нам необходим keytab-файл, его можно сгенерировать на сервере домена или с помощью samba на машине с web-сервером.<br>
Создание SPN keytab-файла описано [[Создание_SPN_и_Keytab_файла|тут]]<br>
Воспользуемся вторым вариантом.<br>
Изменим владельца и права доступа полученного keytab-файла:
Минимально необходимая конфигурация samba:
<pre>[global]
workgroup = DOMG
realm = DOMG.TESTG
security = ads
passdb backend = tdbsam</pre>
Проверим конфигурационный файл samba:
<pre># 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</pre>
Войдем в домен с помощью samba:
<pre># net ads join -U Administrator</pre>
Проверим вход в домен:
<pre># net ads testjoin
Join is OK</pre>
Создадим и добавим в системный keytab принципала сервиса "HTTP":
<pre># net ads keytab add HTTP -U Administrator</pre>
Проверим наш keytab:
<pre># 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)
...</pre>
Так же можно проверить получение билета kerberos для созданных принципалов сервиса:
<pre># 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</pre>
В целях безопасности необходимо создать отдельный keytab-файл для apache2. Сделать это можно с помощью утилиты ktutil из пакета krb5-kadmin.<br>
Установим 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
<pre># chown apache2:apache2 /etc/httpd2/apache2.keytab
# chmod 0440 /etc/httpd2/apache2.keytab</pre>
# chmod 0440 /etc/httpd2/apache2.keytab</pre>

Версия от 14:19, 15 июня 2017

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

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

Задача:

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

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

Создание SPN keytab-файла описано тут
Изменим владельца и права доступа полученного 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
  KrbLocalUserMapping On #Обрезает @REAL в переменной REMOTE_USER
  require valid-user

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

Для работы аутентификации PHP в LDAP необходима директива KrbSaveCredentials On, при её включении будет создаваться нужная нам переменная $_SERVER['KRB5CCNAME'].
Также необходимо проверить наличие в DNS PTR-записей нашего web-сервера:

# host 192.168.135.195
195.135.168.192.in-addr.arpa domain name pointer apserver.domg.testg.

192.168.135.195 - ip-адрес нашего web-сервера.
Установим необходимые пакеты:

# apt-get install pecl-krb5 php5-ldap

Для проверки работоспособности LDAP запросов с помощью PHP и Kerberos, создадим в нашей корневой папке файл index.php, следующего содержания:

<?php
    var_dump($_SERVER['PHP_AUTH_USER']);
    var_dump($_SERVER['KRB5CCNAME']);
    putenv("KRB5CCNAME={$_SERVER['KRB5CCNAME']}");
    $ldapconn = ldap_connect("ldap://dcd.domg.testg:389") or die('error connect с $ldaphost') ;
    ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3);
    ldap_set_option($ldapconn, LDAP_OPT_REFERRALS, 0);
    $result = ldap_sasl_bind($ldapconn,'','','GSSAPI','DOMG.TESTG') or die('Failed to GSSAPI bind sasl bind.<br />');
    $result = ldap_search($ldapconn, 'DC=DOMG,DC=TESTG', '(objectClass=*)', array('mail'));
    $result_entries = ldap_get_entries($ldapconn, $result);
    var_dump($result_entries);
?>

Перейдем в браузере на адрес https://apserver.domg.testg/index.php введя имя и пароль доменного пользователя. Вывод должен быть таким:

string(7) "u01domg" string(50) "FILE:/var/run/httpd2/krbcache/krb5cc_apache_NHBQeV"

array(224) {
  ["count"]=>
  int(223)
  [0]=>
  array(2) {
    ["count"]=>
    int(0)
    ["dn"]=>
    string(16) "DC=domg,DC=testg"
  }
...

Настройка web-браузеров

Для того чтобы браузеры использовали SSO их необходимо настроить.
Firefox:
Набираем в адресной строке about:config попадаем в настройки. В строке поиска вводим negotiate. Нас интересуют параметры network.negotiate-auth.delegation-uris и network.negotiate-auth.trusted-uris. Меняем их на имя нашего домена domg.testg. На этом настройка закончена.