Quelques commandes à connaître pour diagnostiquer les problèmes avec Kerberos

Il n’est pas toujours possible d’accéder à la console d’administration d’Active Directory pour consulter les SPNs configurés pour un compte ou pour connaître la liste des services permis pour la délégation.

Voici donc une liste d’outils “Command Line” qui peuvent vous aider à effectuer des diagnostics lorsque votre ami des TI est absent.

KList (C:\Windows\System32)

  1. klist: liste les “tickets” actifs pour le compte courant
  2. klist purge: vide la liste des “tickets” pour le compte courant

SetSpn (C:\Windows\System32)

  1. setspn –l nomcompte: liste les SPNs configurés pour un compte donné
  2. setspn –s nomservice nomcompte: ajoute un SPN au compte spécifié après avoir vérifié qu’il n’y a aucun doublon
  3. setspn –d nomservice nomcompte: supprime un SPN au compte spécifié
  4. setspn –X: Vérifie qu’il n’y a pas de doublons, c’est à dire un SPN enregistré sur plus d’un compte. La présence de doublons peut empêcher Kerberos de fonctionner.

Script PowerShell (Maison)

Il manquait une manière d’obtenir la liste des services autorisés pour la délégation pour un compte donné. Ce script PowerShell vous permet de le faire (en obtenant la liste des SPNs configurés du même coup):

.\ListKerberos.ps1 nomcompte

Merci à mon collègue Georges Turpin pour la trouvaille et l’adaptation.

Voici le contenu du script:

param (
[string]$UserID = $(throw « -UserID required. »)
)

$strUserName = $UserID
$objDomain = New-Object System.DirectoryServices.DirectoryEntry
$objSearcher = New-Object System.DirectoryServices.DirectorySearcher
$strFilter = « (&(objectCategory=User)(samAccountName= » + $strUserName + « )) »
$objSearcher.SearchRoot = $objDomain
$objSearcher.PageSize = 1000
$objSearcher.Filter = $strFilter
$objSearcher.SearchScope = « Subtree »
$colResults = $objSearcher.FindAll()

foreach ($objResult in $colResults)
{
$objUser = $objResult.GetDirectoryEntry()
$objUser.RefreshCache(@(« canonicalName »))

Write-host  »  servicePrincipalNames » -ForegroundColor Green

$i=1

foreach($SPN in $objUser.servicePrincipalName)
{
Write-host  »    SPN( » $i « )   =    » $SPN
$i+=1
}

Write-host «  »

    « – – – – – »

$objHash = @{}
$objHash.Add(« ADS_UF_SCRIPT », »&h0001″)
$objHash.Add(« ADS_UF_ACCOUNTDISABLE », »&h0002″)
$objHash.Add(« ADS_UF_HOMEDIR_REQUIRED », »&h0008″)
$objHash.Add(« ADS_UF_LOCKOUT », »&h0010″)
$objHash.Add(« ADS_UF_PASSWD_NOTREQD », »&h0020″)
$objHash.Add(« ADS_UF_PASSWD_CANT_CHANGE », »&h0040″)
$objHash.Add(« ADS_UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED », »&h0080″)
$objHash.Add(« ADS_UF_TEMP_DUPLICATE_ACCOUNT », »&h0100″)
$objHash.Add(« ADS_UF_NORMAL_ACCOUNT », »&h0200″)
$objHash.Add(« ADS_UF_INTERDOMAIN_TRUST_ACCOUNT », »&h0800″)
$objHash.Add(« ADS_UF_WORKSTATION_TRUST_ACCOUNT », »&h1000″)
$objHash.Add(« ADS_UF_SERVER_TRUST_ACCOUNT », »&h2000″)
$objHash.Add(« ADS_UF_DONT_EXPIRE_PASSWD », »&h10000″)
$objHash.Add(« ADS_UF_MNS_LOGON_ACCOUNT », »&h20000″)
$objHash.Add(« ADS_UF_SMARTCARD_REQUIRED », »&h40000″)
$objHash.Add(« ADS_UF_TRUSTED_FOR_DELEGATION », »&h80000″)
$objHash.Add(« ADS_UF_NOT_DELEGATED », »&h100000″)
$objHash.Add(« ADS_UF_USE_DES_KEY_ONLY », »&h200000″)
$objHash.Add(« ADS_UF_DONT_REQUIRE_PREAUTH », »&h400000″)
$objHash.Add(« ADS_UF_PASSWORD_EXPIRED », »&h800000″)
$objHash.Add(« ADS_UF_TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION », »&h1000000″)

[string]$intUAC = $objUser.userAccountControl.Value

Foreach ($objKey in $objHash.Keys)
{
[string]$intKey = $objHash.Item($objKey)

If (($intUAC -bAnd $intKey) -ne 0)
{
switch ($objKey)
{
« ADS_UF_SCRIPT »{« The logon script is executed. »}
« ADS_UF_ACCOUNTDISABLE »{« The user account is disabled. »}
« ADS_UF_HOMEDIR_REQUIRED »{« The home directory is required. »}
« ADS_UF_LOCKOUT »{« The account is currently locked out. »}
« ADS_UF_PASSWD_NOTREQD »{« No password is required. »}
« ADS_UF_PASSWD_CANT_CHANGE »{« The user cannot change the password. « }
« ADS_UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED »{« The user can send an encrypted password. »}
« ADS_UF_TEMP_DUPLICATE_ACCOUNT »{« This is an account for users whose primary account is in another domain. »}
« ADS_UF_NORMAL_ACCOUNT »{« This is a default account type that represents a typical user. »}
« ADS_UF_INTERDOMAIN_TRUST_ACCOUNT »{« This is a permit to trust account for a system domain that trusts other domains. »}
« ADS_UF_WORKSTATION_TRUST_ACCOUNT »{« This is a computer account for a computer that is a member of this domain. »}
« ADS_UF_SERVER_TRUST_ACCOUNT »{« This is a computer account for a system backup domain controller that is a member of this domain. »}
« ADS_UF_DONT_EXPIRE_PASSWD »{« The password for this account will never expire. »}
« ADS_UF_MNS_LOGON_ACCOUNT »{« This is an MNS logon account. »}
« ADS_UF_SMARTCARD_REQUIRED »{« The user must log on using a smart card. »}
« ADS_UF_TRUSTED_FOR_DELEGATION » { « DELEGATION – Trust this user for delegation to any service (Kerberos only). » }
« ADS_UF_NOT_DELEGATED »
{
« DELEGATION – Trust this user for delegation to specified services only (use any protocol): »
$objUser.properties[« msDS-AllowedToDelegateTo »]
}
« ADS_UF_USE_DES_KEY_ONLY »{« Restrict this principal to use only Data Encryption Standard (DES) encryption types for keys. »}
« ADS_UF_DONT_REQUIRE_PREAUTH »{« This account does not require Kerberos pre-authentication for logon. »}
« ADS_UF_PASSWORD_EXPIRED »{« The user password has expired. »}
« ADS_UF_TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION »
{
« DELEGATION – The account is enabled for delegation: »
$objUser.properties[« msDS-AllowedToDelegateTo »]
}
default {« Could not find the UAC »}
}
}
}
}

Est-ce que cette information vous a été utile? Utilisez-vous d’autres outils? N’hésitez pas à commenter …

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s