我们有一些人(他们自己)手动使用 SP 来运行命令并从 CLI 部署资源。我们需要防止这种情况,只允许服务使用 SP,而不是人类。有什么办法吗?
无法让 Kerberos 身份验证从 linux 工作到 Windows 上的 MS-SQL 服务器。在 AD 中添加了新用户。
New-ADUser -Name "user" -GivenName "user" -SamAccountName "user" -UserPrincipalName "[email protected]" –AccountPassword (ConvertTo-SecureString "password" -AsPlainText -force) -Enabled $true
生成的密钥表文件。
ktpass -out krb5.keytab -mapUser [email protected] -pass password -crypto AES256-SHA1 -ptype KRB5_NT_PRINCIPAL -princ MSSQLSvc/sql.my.domain:[email protected]
将 krb5.conf 的配置添加到 linux 服务器
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
dns_lookup_realm = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
rdns = false
pkinit_anchors = /etc/pki/tls/certs/ca-bundle.crt
default_ccache_name = KEYRING:persistent:%{uid}
default_realm = MY.DOMAIN
[realms]
MY.DOMAIN = {
}
[domain_realm]
my.domain = MY.DOMAIN
.my.domain = MY.DOMAIN
将 keytab 复制到 linux serv
做过 kinit
kinit -k MSSQLSvc/sql.my.domain:[email protected]
klist 节目
klist
Ticket cache: FILE:/etc/krb/cache
Default principal: MSSQLSvc/sql.my.domain:[email protected]
Valid starting Expires Service principal
05/27/21 07:24:27 05/27/21 17:24:27 krbtgt/[email protected]
renew until 06/03/21 07:24:27
和失败...
/opt/mssql-tools/bin/sqlcmd -S sql.my.domain
Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : SSPI Provider: Message stream modified.
Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : Cannot generate SSPI context.
我正在尝试远程连接到我在工作组上运行的家庭服务器上的 Sql server 2016 实例。我需要设置一个 SPN 来执行此操作。那里的所有指南似乎都与针对域情况而不是工作组设置 SPN 有关。这是我为在 NT SERVICE\MSSQLSERVER(默认服务帐户)下运行的服务器 Odin 尝试过的 SPN
C:\Windows\system32>setspn -A MSSQLSvc/Odin:1433 "NT SERVICE\MSSQLSERVER"
Ldap Error(0x51 -- Server Down): ldap_connect
Failed to retrieve DN for domain "" : 0x00000051
Warning: No valid targets specified, reverting to current domain.
FindDomainForAccount: Call to DsGetDcNameWithAccountW failed with return value 0x000004BC
Unable to locate account MSSQLSERVER
我以管理员身份运行 cmd 提示符,我以管理员身份登录,现在没有想法。帐户 MSSQLSERVER 必须存在,否则 SQL 服务器将无法运行(我可以在本地连接)。
我正在设置一个进程,它将自动为新公开的服务 URL 创建 SPN。我知道如何使用具有正确权限的 setspn -A 命令在 Windows 上创建 SPN。
由于我的构建服务器在 Linux 上运行,我想知道,除了登录到 Windows 服务器并运行 setspn 之外,还有什么方法可以从 Linux 服务器创建 SPN?
我有一个 MyWebServer 的 dns 别名,它指向运行 iis 7.5 的 win 2008 r2 机器的 ip。我为域用户设置了正确的 HTTP spn,该域用户有权使用 kerberos 委派给指定的 HTTP web 服务。
IIS 在顶层配置为使用内核模式身份验证和使用 AppPoolCredentials。
iis 框上的主要应用程序在具有我的域用户身份的应用程序池下运行。该应用程序按预期工作,发出了正确的 kerberos 票证,并且该应用程序能够完美地委托 Windows 用户身份。
然而,还有其他应用程序使用相同的 IIS 网站,但使用作为网络服务运行的不同应用程序池。所有应用程序都设置为仅使用 Windows 身份验证(匿名关闭)。
每当我在 IE 中点击这些应用程序之一时,我都会收到登录提示。输入正确的域凭据会在 3 次登录尝试后导致 401 错误。Web 服务器被 IE 识别为位于本地 Intranet 区域中,并且 IE 被配置为自动登录到该区域中的服务器。在访问这些应用程序时,我也会获得一张有效的 kerberos 票证,即使它们本身永远不需要票证。
现在,当我将应用程序池标识设置为其他应用程序的域用户,并执行 IISreset 时...应用程序按预期工作。
现在,我的问题是......这是预期/预期的吗???
我是否无法在已使用域用户帐户的 SPN 设置的 IIS 网站中运行混合应用程序?我以前混合使用 HTTP/别名 Machine spn 这样的网站,但到目前为止一直在努力处理 HTTP/别名域/用户设置。
编辑:布伦特的回答是正确的。我找到了这篇详细阐述的 Microsoft 文章。 http://support.microsoft.com/kb/871179
一项服务的 SPN 只能与一个帐户相关联。因此,如果您使用此建议的解决方案,则在不同域用户帐户下运行的任何其他应用程序池不能仅与集成 Windows 身份验证一起使用。
如果您有多个在不同域用户帐户下运行的应用程序池,要解决此问题,如果您只想使用集成 Windows 身份验证,则必须强制 IIS 使用 NTLM 作为您的身份验证机制。
我已经在 SO 上发布了这个问题,但它的本质是在编程和服务器配置之间,所以我也会在这里重新发布。
我正在尝试编写一个执行 Kerberos 委托的概念验证应用程序。我已经编写了所有代码,并且它似乎可以正常工作(我的身份验证很好),但是生成的安全上下文没有设置 ISC_REQ_DELEGATE 标志。
所以我在想也许端点之一(客户端或服务器)被禁止委托。但是,我没有针对 SPN 进行身份验证。只有一个域用户对抗另一个域用户。作为 SPN,InitializeSecurityContext()
我将传递“[email protected]”(这是运行服务器应用程序的用户帐户)。据我了解,域用户默认启用委派。无论如何,我要求管理员检查,并且“帐户敏感且不能委派”复选框已关闭。
我知道如果我的服务器作为网络服务运行并且我使用 SPN 连接到它,那么我需要 AD 中的计算机帐户选中“信任计算机以进行委派”复选框(默认情况下关闭),但是……事实并非如此,对吧?或者是吗?
另外 - 当计算机帐户中的复选框被设置时,更改会立即发生,还是我必须重新启动服务器 PC 或等待一段时间?
我正在尝试为 Java 服务器设置一个密钥表以支持 Windows 网络上的 Kerberos 身份验证。即使在命令行工具级别,我也很难让它工作,甚至还没有达到服务器设置的程度!我刚才的计划是尝试让它在我的开发 PC 上运行,因为我有开发工作和调试要做。所以我的目标是让 Java 服务器在我的 PC 上运行,而客户端在连接到它的同一台机器上运行。
这就是我到目前为止所做的,我真的很笨拙,所以我可能会做各种错误的事情!
创建了服务主体名称
我让我们的一位域管理员运行此命令:
setspn -A TEST/pc-name.mydomain.com my-user-name
这似乎成功完成,我可以成功列出这个 SPN
setspn -L my-user-name
创建了一个密钥表文件
我用这个命令创建了一个 keytab:
ktpass /princ TEST/[email protected] /pass <my-password> /ptype KRB5_NT_SRV_HST /out <keytab-filename>
这似乎成功地创建了一个 keytab,尽管它确实警告 ptype 和帐户类型不匹配(但无论我为 ptype 选择什么,我都会收到相同的警告)。如果我运行这个命令:
klist -k file:/<keytab-filename>
然后它列出了我期望的 SPN,即 TEST/[email protected]
问题!
现在我想检查 keytab 是否适用于这个 SPN,所以我正在运行
kinit -t <keytab-filename> TEST/[email protected]
然后我得到一个错误“krb_error 6 Client not found in Kerberos database”。
我究竟做错了什么?