Я ищу приведенные ниже конфигурации для аутентификации GSSAPI с Apache 2.4 для Active Directory:
1. Как настроить Apache HTTPServer 2.4.x с mod_auth_gssapi с использованием Microsoft Active Directory? Существует ли какая-либо документация ИЛИ пример POC , в котором указывается необходимая конфигурация для Apache HTTPServer 2.4.x для GSSAPI, чтобы выполнить аутентификацию с использованием механизма GSSAPI с Microsoft Active Directory?
2. Предоставляет ли mod_auth_gssapi службы безопасности Integrity & Confidentiality ? Если да, то какая конфигурация требуется для Apache HTTPServer?Ссылка на целостность и конфиденциальность в GSSAPI.
Согласно моему анализу, Active Directory поддерживает механизм GSSAPI SASL. Но HTTP-сервер Apache не поддерживает GSSAPI в качестве готовой конфигурации. Однако с помощьюmod_auth_gssapiApache HTTPServer может искать пользователей и их учетные данные в Active Directory и, таким образом, аутентифицироваться с использованием механизма GSSAPI.
В настоящее время у меня есть провайдер базовой аутентификации, настроенный, как показано ниже, в Apache HTTPServer, который необходимо заменить на mod_auth_gssapi для реализации механизма аутентификации gssapi:
# Basic Authentication provider
<AuthnProviderAlias ldap MyEnterpriseLdap>
AuthLDAPURL "ldap://machine1.abcd.com:389/CN=Users,DC=abcd,DC=com?sAMAccountName?sub?(objectClass=*)"
AuthLDAPBindDN "CN=rohit,CN=Users,DC=abcd,DC=com"
AuthLDAPBindPassword "abc123"
LDAPReferrals Off
</AuthnProviderAlias>
# Authenticated resources
<LocationMatch ^/+WebApp/+(;.*)?>
AuthName "WebApp"
AuthType Basic
AuthBasicProvider MyEnterpriseLdap
Require valid-user
</LocationMatch>
Спасибо.
Мне удалось заставить GSSAPI работать с помощью следующего руководства: http://www.jfcarter.net/~jimc/documents/bugfix/41-auth-kerb.html
Что я сделал (Я на Debian)
Установить пакеты:
apt-get install --no-install-recommends winbind smbclient krb5-config krb5-user libldap-common
В/etc/krb5.conf
:
[libdefaults]
kdc_timesync = 1
ccache_type = 4
forwardable = true
proxiable = true
fcc-mit-ticketflags = true
### My changes ###
default_realm = MY-DOMAIN.FR
default_keytab_name = FILE:/etc/krb5.keytab
ticket_lifetime = 24h
dns_lookup_realm = false
dns_lookup_kdc = false
# AD in 2008+? Using AES
default_tgs_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5
default_tkt_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5
permitted_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5
### end ###
[realms]
MY-DOMAIN.FR = {
kdc = ad1.my-domain.fr
kdc = ad2.my-domain.fr
master_kdc = ad1.my-domain.fr
admin_server = ad1.my-domain.fr
default_domain = my-domain.fr
# Hack to remove the '@my-domain.fr' part of the user login, to only keep the prefix (facultative. Used to simplify my PHP auth mechanism)
# Source: http://comp.protocols.kerberos.narkive.com/57JV8mmf/libapache2-mod-auth-kerb-and-cross-realm
# (Greg Hudson)
auth_to_local = RULE:[1:$1@$0](.*@my-domain.fr)s/@my-domain.fr$//
auth_to_local = DEFAULT
}
[domain_realm]
.my-domain.fr = MY-DOMAIN.FR
my-domain.fr = MY-DOMAIN.FR
В/etc/samba/smb.conf
:
[global]
workgroup = MY-DOMAIN
realm = MY-DOMAIN.FR
security = ADS
encrypt passwords = yes
password server = ad1.my-domain.fr
kerberos method = system keytab
(the rest of the file is unmodified)
Отключить рефералы для вызовов LDAP:
/bin/echo 'REFERRALS off' >> /etc/ldap/ldap.conf
Присоединиться к домену:
kinit administrateur
# (use an admin AD account)
net ads join -U administrateur createcomputer=OU=Member\ servers,DC=my-domain,DC=fr
# (specify where you want to store the object in your AD.
# I translated the name in English, so 'Member Servers' is just an example
Создать keytab в/etc/krb5.keytab
:
net ads keytab add HTTP -U administrateur
Защитить его:(в моем случае www-data
— это пользователь Unix используется для обслуживания веб-страниц)
chmod 640 /etc/krb5.keytab
chown root:www-data /etc/krb5.keytab
Я добавил скрипт в crontab, чтобы обновлять этот keytab один раз в день. Не уверен, что он все еще нужен, но в предыдущих версиях Debian у меня были некоторые ошибки, когда файл устарел. Поэтому я сделал скрипт в Expect, вызывающий net ads keytab add HTTP -U my-linux.ad-account
для меня.И он все еще существует:)
Получение GSSAPI для Apache:
apt-get install --no-install-recommends libapache2-mod-auth-gssapi
Активация файлов cookie сеанса (, чтобы избежать повторной аутентификации пользователя на каждой странице)-факультативно
a2enmod session
a2enmod session_cookie
В конфигурации вашего сайта Apache (, например./etc/apache2/sites-available/000-default.conf
)
<VirtualHost *:443>
SSLEngine on
DocumentRoot /your/web/root
<Directory /your/web/root>
AuthType GSSAPI
AuthName "My Domain"
GssapiCredStore keytab:/etc/krb5.keytab
GssapiAcceptorName HTTP
GssapiBasicAuth On
GssapiNegotiateOnce On
GssapiSSLonly On
GssapiLocalName On
# Use a cookie to keep the session, avoid reauthenticate user on each page
# (facultative)
GssapiUseSessions On
GssapiDelegCcacheDir /run/apache2/clientcaches
<IfModule mod_session.c>
Session on
</IfModule>
<IfModule mod_session_cookie.c>
SessionCookieName gssapi_session path=/;httponly;secure;
</IfModule>
Require valid-user
</Directory>
....
</VirtualHost>
Перезапустите Apache и молитесь
service apache2 restart
Надеюсь, я ничего не забыл.
Основные примечания:веб-клиенты не будут делегировать свои учетные данные (и система единого входа не будет работать )если:
SSLEngine on
)