Polecenie setspn rejestruje i weryfikuje nazwy usług w Active Directory, niezbędne do działania Kerberos.
Rola polecenia setspn w Active Directory
setspn jest narzędziem systemu Windows służącym do wyświetlania, rejestrowania, usuwania i wyszukiwania nazw głównych usług, czyli SPN (Service Principal Name), zapisanych w Active Directory. SPN wiąże konkretną usługę działającą pod określonym kontem z nazwą, pod którą klienci próbują się z nią połączyć. Informacja ta jest wykorzystywana przez protokół Kerberos podczas ustalania właściwego konta usługi i uzyskiwania biletu uwierzytelniającego.
Wpis SPN ma postać zależną od klasy usługi, na przykład HTTP/portal.firma.local albo MSSQLSvc/baza.firma.local:1433. Pierwsza część określa klasę usługi, druga nazwę hosta, a opcjonalny numer portu rozróżnia usługi działające na różnych portach. SPN jest przypisywany do obiektu komputera lub konta użytkownika, najczęściej konta skonfigurowanego do uruchamiania usługi. Jeżeli nazwa nie odpowiada rzeczywistemu kontu albo występuje na kilku obiektach, uwierzytelnianie Kerberos może zakończyć się błędem lub przejściem do innego mechanizmu.
Rejestrowanie i odczytywanie nazw usług
Do sprawdzenia wpisów przypisanych do konta służy polecenie setspn -L nazwa_konta. Dla konta komputera można użyć składni setspn -L NAZWA_KOMPUTERA, przy czym w środowisku domenowym nazwa obiektu powinna jednoznacznie wskazywać właściwy komputer. Wpis można wyszukać po całej bazie katalogowej za pomocą setspn -Q HTTP/portal.firma.local. Zapytanie pozwala ustalić, czy podany SPN istnieje oraz do którego obiektu został przypisany.
Nowy wpis rejestruje się poleceniem setspn -S HTTP/portal.firma.local konto_uslugi. Przełącznik -S wykonuje kontrolę pod kątem istniejącego wpisu przed jego dodaniem i dlatego jest bezpieczniejszy w typowej administracji. Przełącznik -A, używany w formie setspn -A HTTP/portal.firma.local konto_uslugi, dodaje SPN bez takiej kontroli; może to doprowadzić do powstania duplikatu. Usunięcie konkretnego wpisu wykonuje się przez setspn -D HTTP/portal.firma.local konto_uslugi. Operacje zapisu wymagają odpowiednich uprawnień do modyfikowania atrybutu SPN obiektu w Active Directory.
Duplikaty SPN i problemy z Kerberosem
Jednym z najważniejszych zastosowań diagnostycznych jest wyszukiwanie powtarzających się nazw usług. Polecenie setspn -X sprawdza katalog pod kątem duplikatów SPN. Ten sam wpis przypisany do dwóch różnych obiektów nie wskazuje jednoznacznie konta, które powinno otrzymać bilet Kerberos. W rezultacie klient może otrzymać błąd uwierzytelniania, a usługa może działać tylko przy użyciu NTLM albo odmawiać dostępu. Sam fakt znalezienia duplikatu nie przesądza jeszcze, który obiekt jest prawidłowy; przed usunięciem wpisu trzeba porównać konfigurację usługi, nazwę hosta i konto uruchamiające proces.
Problemy mogą wynikać również z literówek w nazwie DNS, braku wariantu SPN używanego przez klientów albo przypisania wpisu do konta komputera zamiast do dedykowanego konta usługi. Warto sprawdzać osobno nazwy krótkie, nazwy FQDN oraz port, jeżeli dana usługa używa portu w identyfikatorze. Dla przykładu wpis HTTP/portal i wpis HTTP/portal.firma.local są odrębnymi wartościami. Do analizy konkretnego przypisania można użyć także setspn -Q, a następnie porównać wynik z konfiguracją usługi i dziennikami kontrolera domeny. Nie należy dodawać wielu wariantów automatycznie bez ustalenia, jakiej nazwy faktycznie używa klient.
Bezpieczna procedura kontroli konfiguracji
Pracę z setspn należy rozpocząć od ustalenia nazwy usługi, adresu używanego przez klienta oraz konta, pod którym działa proces. Następnie można wyświetlić SPN konta poleceniem setspn -L konto_uslugi i sprawdzić konkretną wartość przez setspn -Q. Jeżeli wpisu brakuje, dodaje się go przez -S, a jeśli jest przypisany do niewłaściwego obiektu, usuwa się go przez -D i rejestruje na właściwym koncie. Po zmianie trzeba uwzględnić już wydane bilety Kerberos, ponieważ klient może przez pewien czas korzystać z wcześniej uzyskanych danych uwierzytelniających.
Przyczyną nieudanego logowania nie zawsze jest sam SPN. Znaczenie mają także rozwiązywanie nazw DNS, synchronizacja czasu między klientem, usługą i kontrolerem domeny, dostępność kontrolera domeny oraz poprawna konfiguracja konta usługi. Polecenie setspn modyfikuje dane w Active Directory, ale nie zmienia konfiguracji aplikacji ani nie naprawia błędnej delegacji uprawnień. Dlatego każdą zmianę należy dokumentować, ograniczać do właściwego obiektu i po wykonaniu sprawdzić zarówno brak duplikatów przez setspn -X, jak i rzeczywiste logowanie klienta do usługi.