加入域

加入域

我正在寻找针对 Active Directory 使用 Apache 2.4 进行 GSSAPI 身份验证的以下配置:

1.如何配置 Apache HTTPServer 2.4.xmod_auth_gssapi使用 Microsoft Active Directory?是否有任何文档或者POC 示例说明在 Apache HTTPServer 2.4.x 中为 GSSAPI 执行所需的配置,以便使用 GSSAPI 机制通过 Microsoft Active Directory 进行身份验证?

2.mod_auth_gssapi 提供正直&保密安全服务?如果是,那么在 Apache HTTPServer 中需要进行哪些配置? 参考用于 GSSAPI 中的完整性和机密性。

根据我的分析,Active Directory 支持 GSSAPI SASL 机制。但是,Apache HTTPserver 不支持 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

我设法使用以下教程使 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

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 中添加了一个脚本,每天更新一次此密钥表。不确定是否仍然需要它,但在以前的 Debian 版本中,当文件过期时,我遇到了一些错误。所以我在 Expect 中编写了一个脚本来调用net ads keytab add HTTP -U my-linux.ad-account我。它仍然在那里 :)

配置 Apache

获取 Apache 的 GSSAPI:

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

我希望我没有忘记任何事情。

脚注:如果出现以下情况,Web 客户端将不会委托其凭证(并且 SSO 将不起作用):

  • 您的网络服务器未处于 TLS 状态 ( SSLEngine on)
  • 您的网络服务器不在客户端受信任的站点中(例如,您的 Internet 设置中的“Intranet 站点”)

相关内容