Authentication and Authorization – Apache HTTP Server Version 2.2

Introduction

Right, so I wanted to do single sign-on on an Apache Linux server running in our otherwise Windowized environment. Most of what Google told me was to use Apache’s NTLM-module. What they forgot to mention was that NTLMv1 (which this, currently unmaintained module uses) is deprecated in Windows Vista and later due to security issues.

The “right” way seemed to be to use Kerberos instead, and this post outlines the steps required. I tried to assemble only the absolutely required stuff, and not include full-blown Samba implementations and such. Which is nice, no doubt, but if I don’t have any other use for it, why the extra bloat?

This post is written with the following prerequisites in mind:• The webserver is running Apache on Ubuntu• The webserver will authenticate against a Windows 2008 R2 Active Directory• The client (browser)

NTP synchronization

In order for Kerberos tickets to operate correctly the system time on each host must be within allowed tolerances. To achieve this our web server must update its system time to match the AD server. This can be done by adding the line below to the NTP config file, which in our distribution can be found at /etc/ntp.conf.

server ad.contoso.lan

In addition to this we add a daily update to the crontab making sure the synchronization takes place on a regular basis. This can be achieved by creating the file /etc/cron.daily/ntpdate containing the following line.

ntpdate ad.contoso.lan

Test Kerberos

$ kinit [email protected]

Install and configure Kerberos

Once Kerberos is installed we need to modify the configuration to include the settings outlined below.  In our example the distributions config file can be found at /etc/krb5.conf.

Похожее:  Ленинг зон КФС (learning zone KFC), как войти в личный кабинет

[libdefaults]         default_realm = CONTOSO.LAN

Apache web server и доменная авторизация

Исходные данные: установлен Apache Web Server 2.4

Настройка виртуальных хостов:

В Ubuntu виртуальные хосты настроены на работу по умолчанию.
Настройки сайтов хранит /etc/apache2/sites-available/.
Будет загружен любой файл, который вы добавите в /etc/apache2/sites-enabled/, создав символическую ссылку на соответствующий сайт в /etc/apache2/sites-available/.

Включить сайт можно также командой:
a2ensite test.com.conf
service apache2 reload

Выключить, соответственно:
a2dissite test.com.conf
service apache2 reload

Файлы конфигурации виртуального хоста

Копируем настройки по-умолчанию в новый виртуальный хост:
cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/myproject.conf

Вносим дополнения и получаем примерно следующее на выходе:

<VirtualHost *:80>
    ServerName myproject.com
    ServerAlias www.myproject.com
    DocumentRoot /www/projects/myproject.com
    <Directory /www/projects/myproject.com>
        Options -Indexes FollowSymLinks MultiViews
        AllowOverride All
        Require all granted
    </Directory>
    ErrorLog ${APACHE_LOG_DIR}/myproject-error.log
    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn
    CustomLog ${APACHE_LOG_DIR}/myproject-access.log combined
</VirtualHost>

ServerName and ServerAlias:  домен, соответствующий этому виртуальному хосту и его алиас

DocumentRoot: веб-корень домена

Options -Indexes: останавливает людей от того, чтобы перейти в каталог и посмотреть файлы перечисленные там. Вместо этого они видят ошибку Forbidden. Это может запретить пользователям просматривать все ваши файлы в вашем/images каталоге, например.

AllowOverride: установить в «все», чтобы разрешить .htaccess файлы на вашем виртуальном хосте (и подкаталогах)

ErrorLog, CustomLog: создать файлы журналов специально для домена, они не смешиваются с трафиком/ошибками с других сайтов, работающих на сервере.

Winbind для проверки подлинности использует Kerberos. Для корректной работы Kerberos необходимо синхронизировать часы с доменом. Для это установим NTP. Настроим NTP. Синхронизируем время. Настроим автоматический запуск. И запустим NTP. Время синхронизированно. Установим необходимые пакеты:

yum -y install mod_auth_ntlm_winbind httpd-devel  autoconfig krb5-workstation samba samba-common samba-winbind

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

ADSERVER=FQDN контролера домена (например dc.company.local)
DOMAIN=домен  (company.local)
WORKGROUP= company
authconfig –enableshadow –enablemd5 –passalgo=md5 –krb5kdc=$ADSERVER –krb5realm=$DOMAIN –smbservers=$ADSERVER –smbworkgroup=$WORKGROUP –enablewinbind –enablewinbindauth –smbsecurity=ads –smbrealm=$DOMAIN –smbidmapuid=”16777216-33554431″ –smbidmapgid=”16777216-33554431″ –winbindseparator=” ”  –winbindtemplateshell=”/bin/false” –enablewinbindusedefaultdomain –disablewinbindoffline –winbindjoin=Administrator –disablewins –disablecache –enablelocauthorize –updateall

После этого мы должны получить сообщение о том, что наш сервер теперь является доменной машиной. Добавим правило для SE Linux:

setsebool -P allow_httpd_mod_auth_ntlm_winbind on


Запусим winbind
service winbind start

Настроим автоматический запуск:
chkconfig winbind on

Проверим правильность работы winbind:
wbinfo –u получим список пользователей
wbinfo –g получим список групп

Проверить правильность работы Kerberos можно получив тикет:
kinit administrator (любое имя доменного пользователя),по запросу вводим пароль.

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

Для работы mod_auth_ntlm_winbind необходимо в файле /etc/httpd/conf/httpd.conf изменить параметр KeepAlive=off на KeepAlive=on.

В директории /etc/httpd/conf.d создаем файл ntlm_winbind.conf со следующим содержанием:
LoadModule auth_ntlm_winbind_module /usr/lib64/httpd/modules/mod_auth_ntlm_winbind.so
<Location ~ “(otrs/customer.pl)”>
AuthName “NTLM Authentication”
AuthType NTLM
Require valid-user
NTLMAuth on
NTLMAuthHelper “/usr/bin/ntlm_auth –helper-protocol=squid-2.5-ntlmssp”
NTLMBasicAuthoritative on
</Location>

Тем самым мы просим передать данные авторизации только при доступе к customer.pl
Последние что нужно сделать, это изменить Config.pm закоментировать часть отвечающую за авторизацию LDAP и добавить NTLM авторизацию.
# Авторизация LDAP
#$Self->{‘Customer::AuthModule’} = ‘Kernel::System::Auth::LDAP’;
#$Self->{‘Customer::AuthModule::LDAP::Host’} = ‘dc.company.local’;
#$Self->{‘Customer::AuthModule::LDAP::BaseDN’} = ‘dc=COMPANY, dc=local’;
#$Self->{‘Customer::AuthModule::LDAP::UID’} = ‘sAMAccountName’;
#$Self->{‘Customer::AuthModule::LDAP::SearchUserDN’} = ‘read_ad_user’;
#$Self->{‘Customer::AuthModule::LDAP::SearchUserPw’} = ‘pass_for_read_ad_user’;

#Авторизация NTLM
$Self->{‘Customer::AuthModule’} = ‘Kernel::System::Auth::HTTPBasicAuth’;

Проверим коректно ли зарегистрировался сервер OTRS на DNS сервере выполнив команду nslookup otrs-server
Настройка завершена!
Открывать в браузере otrs-server-name/otrs/customer.pl и видим результат.
Если же не видим результат, значит при настройке была допущена ошибка, внимательно смотрим настройки в файлах /etc/krb5.conf /etc/samba/smb.conf

NTLM устарело (модуль для апача, на сколько я знаю, больше не поддерживается и не разрабатывается). Используйте для прозрачной аутентификации Kerberos (поддерживается всеми браузерами).
Конфигурация Apache выглядит ничем не сложнее:

LoadModule auth_kerb_module /usr/lib/apache2/modules/mod_auth_kerb.so

AllowOverride None
Options ExecCGI -Includes
DirectoryIndex customer.pl
AuthName «OTRS Kerberos Authentication»
AuthType Kerberos
Krb5Keytab /etc/apache2/otrs-server.keytab
KrbAuthRealms DOMAIN1.COM DOMAIN2.COM
KrbMethodNegotiate On
KrbSaveCredentials Off
KrbMethodK5Passwd On
KrbVerifyKdc OFF
Require valid-user
KrbServiceName Any
Order allow,deny
Allow from all

https://www.linux.org.ru/forum/admin/13556405

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *