LADP - Apache 上的 Kerberos 设置与 Wordpress 单点登录不起作用

LADP - Kerberos Setup on Apache with Wordpress Single Sign-On not working

我们使用 Active Directory 设置了本地网络。我们开发了一个网站,该网站只能通过本地网络托管和访问。如果用户已经在 OS 上登录到 Active Directory,我们希望用户在访问我们的 Wordpress 网站后立即自动登录。

仅在跟进文档时,我们仍然面临着我们发现很难解决的问题,我们花了很多时间才能成功启动这样的设置。一些错误是:

答案将列出我们遇到的所有问题以及我们如何设法解决这些问题,以防某些人在设置时遇到同样的问题。

在 Active Directory 域控制器上创建 Keytab 文件

  • 这不是我们自己做的,而是将命令提供给 Active Directory 专家以执行以下命令。此命令区分大小写,因此非常重要的是,如果域是大写的(如下例所示),它也会在活动目录中以大写域执行。
  • 命令
    • ktpass -princ HTTP/intranet.domain.com@DOMAIN.COM -pass "{PASSWORD}" -mapuser username@DOMAIN.COM -Ptype KRB5_NT_PRINCIPAL -out website-auth.keytab
  • 来自 ktpass 命令:
    • intranet.domain.com - 是我们的 wordpress 网站 url
    • DOMAIN.COM - 是活动目录域
    • {PASSWORD} - 任意随机密码,例如UjhmPz5UPwx2VhQir7
      • 请注意这非常重要:因为我们遇到了密码问题。创建 ktpass 后,不要更改活动目录中相关服务用户帐户的密码。每次通过活动目录更改服务帐户密码时,活动目录上的 keytab 版本也会更新,除非你也更新 apache 上的 keytab 文件,否则你将无法进行身份验证。因此,如果您将密码更改为新密码然后恢复为旧密码,您仍然会遇到身份验证问题(即使密码现在已恢复为原始值)。更多信息在这里:https://support.oneidentity.com/fr-fr/kb/33866/when-does-the-vno-in-host-keytab-change-
    • username@DOMAIN.COM - Active Directory 的服务帐户
      • 帐户密码应设置为未过期。
      • 该帐户应该受委托。
    • website-auth.keytab - 生成的密钥表的文件名。我们将其存储在 /etc/httpd/kerberos-credentials/website-auth.keytab
  • 将 Keytab 文件从 AD 域控制器复制到 Apache 上托管的 Web 服务器。

在 Web 服务器上安装 Kerberos 客户端库:

  • sudo apt-get 安装 krb5-user (Ubuntu)
  • yum 安装 krb5-workstation krb5-libs krb5-auth-dialog (Centos)

在 Kerberos 配置文件中配置 Active Directory 域

  • 更新/etc/krb5.conf
  • 我在下面粘贴我们的配置文件模板。更新 enctypes 参数对我们来说非常重要,因为默认配置文件不包含从活动目录生成的密钥表的 enctype,这会导致身份验证问题。在这个示例中,我包括了我从研究中设法找到的所有 enctypes。
# Configuration snippets may be placed in this directory as well
includedir /etc/krb5.conf.d/

[logging]
 default = FILE:/var/log/krb5libs.log
 kdc = FILE:/var/log/krb5kdc.log
 admin_server = FILE:/var/log/kadmind.log

[libdefaults]
 dns_lookup_realm = true
 dns_lookup_kdc = true
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true
 rdns = false
 pkinit_anchors = /etc/pki/tls/certs/ca-bundle.crt
 default_realm = DOMAIN.COM
 default_tkt_enctypes = aes256-cts des3-cbc-sha1 arcfour-hmac des-cbc-crc aes256-cts-hmac-sha1-96 des-cbc-md5 arcfour-hmac-md5
 default_tgs_enctypes = aes256-cts des3-cbc-sha1 arcfour-hmac des-cbc-crc aes256-cts-hmac-sha1-96 des-cbc-md5 arcfour-hmac-md5
 permitted_enctypes = aes256-cts des3-cbc-sha1 arcfour-hmac des-cbc-crc aes256-cts-hmac-sha1-96 des-cbc-md5 arcfour-hmac-md5

[realms]
 DOMAIN.COM = {
   admin_server = DOMAIN.COM
   kdc = DOMAIN.COM
 }

[domain_realm]
 domain.com = DOMAIN.COM
 .domain.com = DOMAIN.COM

[login]
 krb4_convert = true
 krb4_get_tickets = true

为 Apache 安装 auth_kerb 模块

  • Ubuntu:
    • sudo apt-get 安装 libapache2-mod-auth-kerb
    • a2enmod auth_kerb
    • 重启apache
  • 森托斯:
    • yum 安装 mod_auth_kerb
    • 重启apache:systemctl restart apache2

为站点目录配置 Kerberos SSO

  • Ubuntu:编辑/etc/apache2/sites-enabled/000-default.conf文件
  • Centos:编辑/etc/httpd/conf.d/文件夹auth_kerb.conf配置文件
  • 我们在 Centos 上工作,所以我没有 Ubuntu 的确切配置,但它应该与 Centos 配置非常相似。我们的配置文件模板是:
  • 设置好配置文件后,需要重新启动apache
LoadModule auth_kerb_module /usr/lib64/httpd/modules/mod_auth_kerb.so

<Directory "/var/www/html">
Order allow,deny
Allow from all

AuthType Kerberos
AuthName "username used in keytab"
KrbAuthRealms DOMAIN.COM
KrbServiceName HTTP/intranet.domain.com@DOMAIN.COM
Krb5Keytab /etc/httpd/kerberos-credentials/website-auth.keytab
KrbMethodNegotiate On
KrbMethodK5Passwd On
KrbVerifyKDC On
require valid-user
</Directory>

在 apache

上检查 httpd_can_network_connect
  • 完成上述设置后,我们认为我们已经准备就绪,但仍然无法从网站进行身份验证。
  • 经过一些研究,我们注意到我们需要在他的 apache 服务器上启用 httpd_can_network_connect 设置。为此 运行:
    • getsebool -a | grep httpd:正在返回 httpd_can_network_connect --> 关闭
    • setsebool -P httpd_can_network_connect on: 启用设置
    • 重启apache服务
    • LDAP works with PHP CLI but not through apache
    • 中提取的信息

在 OS

上将 wordpress 网站添加到本地 Intranet
  • 为了将 Wordpress 与 kerberos 集成,我们使用了现成的高级插件,但不幸的是,并非一切都像我们想象的那样顺利。通过上述设置,当我们尝试访问我们的 wordpress 网站时,浏览器会弹出一个默认的身份验证对话框。这不是预期的结果,因为我们希望用户在登录 Active Directory 时自动登录。这是因为我们正在测试的 windows 机器没有在本地 Intranets 配置中列出我们的 wordpress 网站。要将网站添加到本地 Intranet:
    • 转到控制面板
    • 转到 Internet 选项
    • 单击“安全”选项卡
    • 单击本地 Intranet 图标
    • 点击站点
    • 点击高级按钮
    • 添加 Wordpres 站点 url