zoukankan      html  css  js  c++  java
  • Service Principal Name (SPN)

    Service Principal Name (SPN)
    服务类实际上是服务的某种通用名称。例如,所有Web服务器都分组在“ www”类中,而SQL服务则在“ SqlServer”类中。 如果服务在自定义端口后面运行,或者您要指定它以避免任何歧义,则可以将其附加到主机名:

     1.UPN很好理解那什么叫SPN在域里面?

    笔者现在对SPN的理解是在域里面的服务主体的名称叫做SPN
    tips:
    我们处于Active Directory环境中。要了解什么是SPN,我们必须了解Active Directory中的服务概念是什么。
    
    服务实际上是一种功能,一种软件,可以由AD(Active Directory)的其他成员使用。例如,您可以拥有Web服务器,网络共享,DNS服务,打印服务等。要识别服务,我们至少需要两件事。相同的服务可以在不同的主机上运行,​​因此,我们需要指定主机,而计算机可以承载多个服务,因此,显然,我们需要指定服务。
    
    通过结合这些信息,我们可以准确地指定服务。此组合表示其服务主体名称或SPN。看起来像这样:
    smtpSvc/Exc.7dap.club
    比如有人在7dap.club域中的的Exc机器上面请求了host服务,创建了此票证

     

    服务类实际上是服务的某种通用名称。例如,所有Web服务器都分组在“ www”类中,而SQL服务则在“ SqlServer”类中。
    
    如果服务在自定义端口后面运行,或者您要指定它以避免任何歧义,则可以将其附加到主机名:
    SqlServer/mssql.7dap.club:1433

     当然服务类肯定不止mssql和smtpSvc这里是微软文档的介绍。

     这里有我们认识的http服务 cifs文件共享服务,dns域名解析服务,以及命令执行用到的rpc等很多,但是此列表并不详细,比如LDAP和SqlServer

    在域中有一个很特殊的SPN服务属性叫做HOST

    HOST SPN并不是真正的服务类。这是一组服务类,一种别名,将大量SPN组合在一起。它组合在一起的元素在Active Directory的“ SPN映射”属性中定义。可以使用以下命令列出这些类:
    
    Get-ADObject -Identity "CN=Directory Service,CN=Windows NT,CN=Services,CN=Configuration,DC=7dap,DC=club" -properties sPNMappings
    

     

    因此,如果用户曾经在WEB-SERVER-01上寻找www SPN,则Active Directory将寻找wwww / WEB-SERVER-01,但也会寻找HOST / WEB-SERVER-01。如果主机具有HOST SPN,则意味着它具有www SPN(以及许多其他主机)
    

     这是一个获取当前域内的所有spn的小ps脚本

    $search = New-Object DirectoryServices.DirectorySearcher([ADSI]"")
    $search.filter = "(servicePrincipalName=*)"
    $results = $search.Findall()
    foreach($result in $results) {
    	$userEntry = $result.GetDirectoryEntry()
    	Write-host "Object : " $userEntry.name "(" $userEntry.distinguishedName ")"
    	Write-host "List SPN :"        
    	foreach($SPN in $userEntry.servicePrincipalName)
    	{
    		Write-Host $SPN       
    	}
    	Write-host ""
    }
    

     

    如果我们只想看那些user启动(或者使用)了那些服务可以用以下ps1脚本

    $search = New-Object DirectoryServices.DirectorySearcher([ADSI]"")
    $search.filter = "(&(objectCategory=person)(objectClass=user)(servicePrincipalName=*))"
    $results = $search.Findall()
    foreach($result in $results)
    {
    	$userEntry = $result.GetDirectoryEntry()
    	Write-host "User : " $userEntry.name "(" $userEntry.distinguishedName ")"
    	Write-host "SPNs"        
    	foreach($SPN in $userEntry.servicePrincipalName)
    	{
    		$SPN       
    	}
    	Write-host ""
    }
    

    参考

    https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2003/cc772815(v=ws.10)#service-principal-names
    https://dirkjanm.io/krbrelayx-unconstrained-delegation-abuse-toolkit/
    https://en.hackndo.com/service-principal-name-spn/

  • 相关阅读:
    腾讯一面有感(移动开发岗位)
    kafka 在java中的使用
    Kafka史上最详细原理总结下
    java jdk原生的http请求工具类
    kafka(一)
    MySQL:互联网公司常用分库分表方案汇总
    密码正则
    springboot 打war包
    oracle存储过程的一些使用
    对象的深度克隆
  • 原文地址:https://www.cnblogs.com/-zhong/p/14466280.html
Copyright © 2011-2022 走看看