Apache2/AD-auth
Исходные данные:
- Домен 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. На этом настройка закончена.