我通过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)
文件:
-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
Apache 用户名是 www-data。
身份验证工作正常,我可以访问该网站。定义的登录名正确。
来自我的 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) 上测试
基线 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 身份验证的服务票证始终被缓存。)