KRB5CCNAME 丢失

问题描述 投票:0回答:1

所以问题是我在 $_SERVER[] (php) 中没有用于 LDAP 搜索的 KRB5CCNAME:

我通过kerberos gssapi登录服务器,从Ubuntu到Windows Server 2012,使用Samba 在我的网站(php)上,我使用 kerberos 进行授权,检查了它(它有效),并希望找到具有 ldap_sasl 连接的用户,但为此我应该在 $_SERVER 中有 KRB5CCNAME 变量,但它不在那里

我的 .htaccess 文件包含以下配置行:

AuthName "Kerberos"
AuthType Kerberos
KrbAuthRealms DOMAIN.COM
KrbServiceName HTTP
Krb5Keytab /etc/httpd_test.keytab #tested, originally is httpd.keytab
KrbMethodNegotiate On
KrbMethodK5Passwd On
KrbLocalUserMapping On
Require valid-user

KrbSaveCredentials On

KrbDelegateBasic On
KrbVerifyKDC Off

我尝试过,但它也不适用于 gssapi 通过以下几行进行身份验证:

AuthType GSSAPI
AuthName "GSSAPI"
GssapiBasicAuth On
#GssapiUseS4U2Proxy On
GssapiCredStore keytab:/etc/httpd_test.keytab #tested, originally is httpd.keytab
#GssapiCredStore client_keytab:/etc/httpd_test.keytab
GssapiCredStore ccache:/var/run/apache2/krb5ccache
GssapiDelegCcacheDir /var/run/apache2/clientcaches
GssapiDelegCcacheUnique On
Require valid-user

它有同样的麻烦,我不使用它,因为很多指南都说

KrbSaveCredentials On
必须是创建KRB5CCNAME的要求

一些细节: 0. 软件包版本:

Apache2 (2.4.52) Linux Ubuntu 22.04.4 PHP 8.2 Kerberos5 (1.19.2) SMBD (4.15.13-Ubuntu)

  1. 权利:

文件:

-rw-r--r-- 1 root root httpd.keytab
-r--r----- 1 www-data www-data  httpd_test.keytab #tested
-rw-r--r-- 1 root root krb5.conf

目录:

drwxrwxrwt  8 root root tmp
drwxr-xr-x  2 root root krb5ccache
drwxr-xr-x  2 root root krb5deleg
  1. Apache 用户名是 www-data。

  2. 身份验证工作正常,我可以访问该网站。定义的登录名正确。

来自我的 krb5.conf:

[libdefaults]
        default_realm = DOMAIN.COM

        dns_lookup_realm = true
        dns_lookup_kdc = true
        forwardable = true

        kdc_timesync = 1
        ccache_type = 4
        forwardable = true
        proxiable = true

我检查了 ldap,它工作正常 使用

$ldapconn = ldap_connect($ldaphost)
并使用代码中的登录名和密码,他们找到了我需要的内容,但我想使用 gssapi 进行 ldap_sasl_bind 我怀疑我没有在某处授予权利,但我不知道 哪里可能有问题?

更新

HTTPS 上的网络服务器

在 Google Chrome (125.0.6422.77)、Microsoft Edge (125.0.2535.67)、Firefox (126.0) 上测试

php apache2 kerberos samba gssapi
1个回答
0
投票

基线 Kerberos 身份验证不传输用户凭据。 Web 服务器收到的唯一票证是针对 Web 服务器本身的。

要设置 KRB5CCNAME(并填充用户的 TGT 或其他任何内容),您还需要启用某种类型的 delegation – 无约束委派(客户端被请求将整个 TGT 传输到服务器)或受约束委派委托(KDC 允许服务器模拟用户)。

假设您的 KDC 由 Active Directory 提供:

  • AD 用户帐户设置中为每个主体配置委派功能(对于“HTTP”服务帐户,不是对于客户帐户)。

  • 约束委派完全是服务器端的并且涉及 S4U,请参阅

    GssapiUseS4U2Proxy
    设置。我相信现代 AD 通过 PowerShell 将其配置为“基于资源的约束委派”,但我不熟悉。

  • 无约束委派是“信任此用户委派任何服务”。它受到两个 Apache 模块 (GssapiDelegCcacheDir) 的支持,并且可能需要客户端配置(Firefox 有一个单独的 about:config 设置来允许委派)。

    无约束委派非常危险 - Web 服务器最终会收集用户 TGT,因此它成为攻击目标。

    它也可能很慢,因为它涉及客户端请求具有不同标志的新 TGT,并且某些客户端不缓存此类 TGT,导致每个 HTTP 请求都会产生额外的 KDC 请求。 (相比之下,基线 Kerberos 身份验证的服务票证始终被缓存。)

© www.soinside.com 2019 - 2024. All rights reserved.