AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-57144

TessellatingHeckler's questions

Martin Hope
TessellatingHeckler
Asked: 2014-11-05 09:55:12 +0800 CST

未发生对 Active Directory 的 Apache kerberos 身份验证。(KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN 是否相关?)

  • 4

我的目标是让 Apache 使用 Kerberos 对 AD 进行身份验证,而不提示输入用户名和密码。它目前总是显示“401 Unauthorized”,并且似乎没有尝试 Kerberos。我找不到任何错误日志,只能找到一个kinit明显不起作用并给出错误的命令 - 该错误在 WireShark 中显示为:

Linux sends AS-REQ
Windows replies KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN

线索还是红鲱鱼?

设置/背景细节

Windows Server 2008 R2 SP1, with Active Directory ("winserver").
CentOS 6.5 ("centos").
  1. 配置主机名和 DNS,并在 Windows DNS 服务器中添加 A 和 PTR 条目。名称解析显示正常。

  2. 创建/etc/krb5.conf、/etc/samba/smb.conf使用authconfig-tui和调整它们。

krb5.conf

`/etc/krb5.conf`

[libdefaults]
 default_realm = SITE.EXAMPLE.COM
 dns_lookup_realm = false
 dns_lookup_kdc = false
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true

[realms]
 SITE.EXAMPLE.COM = {
  kdc = winserver.site.example.com
  admin_server = winserver.site.example.com
 }

[domain_realm]
 site.example.com = SITE.EXAMPLE.COM

和桑巴

`/etc/samba/smb.conf` includes

workgroup = SITE
password server = winserver
realm = SITE.EXAMPLE.COM
security = ads
kerberos method = system keytab
winbind use default domain = true

从这里开始,Kerberos 设置步骤:

  1. net ads join createupn=HOST/[email protected] -k -U administrator要求我输入 Windows 密码,然后接受。它加入域(在 AD 中创建计算机对象)。

  2. net ads testjoin报告“加入正常”。

  3. net ads keytab create -k -U administrator创建并用排列/etc/krb5.keytab填充它。HOST/centos....

  4. net ads keytab add HTTP -k -t /etc/krb5.keytab -U administrator将 HTTP/centos.site.example.com条目添加到 keytab。klist -ke显示了许多 SPN 组合,包括HTTP/[email protected]并且似乎将 KVNO 与服务器对象上的 Windows 的 msDS-KeyVersionNumber 属性相匹配。

此时,我可以使用 PuTTY 通过 SSH 连接,并使用 SSO 自动登录,无需密码提示。我可以通过 SSH 连接并强制提示密码,使用 Windows 用户名和密码登录。使用 Windows 帐户登录后,我可以kinit看到klistKerberos 票证。我可以使用wbinfo -uandwbinfo -g来net ads search查询 AD 并获得结果。

一切看起来都很好。让我们继续讨论 Apache:

  1. chgrp apache /etc/krb5.keytab

  2. chmod ugo+r /etc/krb5.keytab

  3. yum install mod_auth_kerb

  4. 编辑/etc/httpd/conf/httpd.conf并添加:

httpd.conf

LoadModule auth_kerb_module /usr/lib64/httpd/modules/mod_auth_kerb.so

AuthName "Kerberos Authentication"
AuthType Kerberos

Krb5Keytab /etc/krb5.keytab
KrbAuthRealms SITE.EXAMPLE.COM
KrbMethodNegotiate on
KrbMethodK5Passwd off
KrbServiceName Any

在 Internet Explorer 中,“本地 Intranet 站点”包括http://*.site.example.com并设置为“仅在 Intranet 区域中自动登录”。使用这些设置自动登录适用于办公室中的其他(基于 IIS)网站。在 Firefox 中,about:config 具有network.negotiate-auth.trusted-uris; .site.example.com.

在 IE、FireFox 或 Chrome 中,我使用 FQDN 访问站点,获取401 Unauthorized. 似乎甚至没有尝试过 Kerberos。

我在 Linux 日志文件 /var/log/httpd/error_log 或 access_log /var/log/secure 或 /var/log/audit/audit.log 中找不到任何内容来显示任何错误。

试图找到要测试的东西,我唯一能找到的创建一个清晰且相关的错误是命令:

$ kinit -k -t /etc/krb5.keytab HTTP/centos.site.example.com
kinit: Client not found in Kerberos database while getting initial credentials

我不知道它在做什么,但如果我 WireShark 它:

Linux sends AS-REQ to Windows with content
    cname name-string 2 items
    KerberosString: HTTP
    KerberosString: centosserver.site.example.com
    realm: SITE.EXAMPLE.COM
Windows replies KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN 
    error-code eRR-C-PRINCIPAL-UNKNOWN (6)

在 Windows 上,如果我使用setspn -L centos它显示注册主体名称包括 HTTP/centos.site.example.com。

在我的 Windows 桌面客户端上,如果我klist get HTTP/centos.site.example.com得到一张票,显示为客户端:[email protected],服务器:HTTP/centos.site.example.com。

感觉有点像http://support.microsoft.com/kb/951191 - 但这仅适用于 Windows Server 2008 原始版本,Service Pack 2 之前的版本。这是 Windows Server 2008 R2 Service Pack 1。我试过指向它到另一个域控制器,但它也运行相同的 Windows Server 版本并以相同的方式响应。

在 Linux 方面:我一直在使用 CentOS 6.5(Samba 3.x、Kerberos 5.0),但我也全新安装了 CentOS 7(Samba 4.x 和 Kerberos 5.1)并尝试了相同的设置并得到了相同的结果结果来自 kinit。我还没有在 CentOS 7 上尝试过 Apache。

SSH 工作的无密码登录。针对 AD 的登录身份验证适用于 kinit。Kerberos 身份验证在 Apache 中不起作用,它甚至似乎没有在 Apache 中尝试,或者记录任何错误。我错过了什么,为什么不尝试 Kerberos 身份验证?我可以测试或做些什么来让它记录更多?

我唯一可以明确失败的是我在互联网上找到的命令 ^ ,但我不知道它到底在测试什么。它在做什么,为什么它不起作用,显然,我的桌面可以查询 AD 以获取相同的服务主体并获得答案?

[编辑更新]

我按照 natxo asenjo 的回答“以不同的方式做”,现在我有了一个可以工作的设置。我也接受在 AD 中为每个服务使用不同的用户名,然后创建单独的 keytab 是合理的(例如,如果 Apache 被破坏并且它可以读取的 HTTP/keytab 被破坏,HOST/keytab 仍然是安全的)。

但是,我无法回答为什么 Kerberos 对 windows 的主要查找在我原来的方法中失败的原因。这是令人沮丧的,因为像http://requesttracker.wikia.com/wiki/Kerberos_SSO_with_Active_Directory_Integration和http://wiki.gentoo.org/wiki/Kerberos_Windows_Interoperability这样的指南使用 Samba 将多个主体放在一个与计算机帐户绑定的密钥表中net ads 命令,并且(大概)从中获得工作设置。

apache-2.2
  • 1 个回答
  • 25539 Views
Martin Hope
TessellatingHeckler
Asked: 2013-07-10 06:09:19 +0800 CST

Windows文件夹权限,管理员和UAC,处理这个的“正确”方法是什么?

  • 8

我有一个具有权限的文件夹:

  • 管理员(组):已满。
  • J. Bloggs:满。

我以管理员组的成员身份登录。

我无法在资源管理器中打开该文件夹,因为“您没有权限”。

我怀疑这是因为正常进程由于 UAC 而没有管理员权限令牌,除非您也“以管理员身份运行”。但我不能对 Windows 资源管理器执行此操作,可以吗?

所以我的选择似乎是: - 单击按钮获取所有权(破坏所有权,在大型文件夹上花费时间,不能解决其他管理员问题) - 添加具有完全权限的每个单独的管理员帐户,这样它就可以在没有管理员令牌的情况下工作(管理乱七八糟,分组有什么意义)

这是一个非常烦人的设计,我一定错过了一些东西。它应该如何工作?管理员进入管理员有权访问的文件夹的“正确”方式是什么?

windows
  • 5 个回答
  • 20405 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve