Аутентификация Apache HTTPServer 2.4.x с модом_auth_gssapi с использованием Microsoft Active Directory

Я ищу приведенные ниже конфигурации для аутентификации 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>

Спасибо.

1
задан 25 May 2020 в 16:51
1 ответ

Мне удалось заставить 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 для http

Создать 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для меня.И он все еще существует:)

Настройка Apache

Получение 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

Надеюсь, я ничего не забыл.

Основные примечания:веб-клиенты не будут делегировать свои учетные данные (и система единого входа не будет работать )если:

  • ваш веб-сервер не использует TLS(SSLEngine on)
  • ваш веб-сервер не входит в число доверенных клиентов сайты ("Сайты интрасети" ваших настроек интернета, например)
1
ответ дан 21 September 2021 в 12:46

Теги

Похожие вопросы