Wednesday, December 13th, 2006...11:23 pm

Atrybuty dostępne do edycji

Jump to Comments

Wczoraj podczas rozmowy z administratorem w pewnej firmie podniesiona została kwestia odczytu uprawnień do atrybutów obiektu w Active Directory z poziomu skryptu \ programu. Po kilku dodatkowych pytaniach okazało się, że dostęp do tych informacji miałby posłużyć określeniu do których atrybutów obiektu w Active Directory konto aplikacji\użytkownika wykonującej operację posiada uprawnienia odczytu i zapisu.

Oczywiście dostęp do danych o uprawnieniach jest jak najbardziej możliwy, przechowywane są one w atrybucie nTSecurityDescriptor, to bezpośredni odczyt tych danych i ich analiza może być kłopotliwa (znakomicie ułatwia to klas ActiveDirectorySecurity dostępna w ramach System.DirectoryServices w .NET 2.0). Na szczęście istnieje prostsze rozwiązanie tego zagadnienia.

Przy odczycie danych o obiekcie z katalogu Active Directory poprzez LDAP możemy odczytać dwa atrybut konstruowane przy odczycie które znacznie ułatwiają zadanie ustalenia zakresu dostępnych atrybutów.

allowedAttributes jest to atrybut wielowartościowy zawierający listę atrybutów obiektu, do których można uzyskać dostęp w kontekście bezpieczeństwa konta użytego przy dostępie do obiektu.

Aby uczynić życie programisty jeszcze prostszym dostępny jest również atrybut allowedAttributesEffective, który zawiera listę atrybutów możliwych do zapisu w kontekście bezpieczeństwa konta użytego przy dostępie do obiektu.

Przeprowadźmy szybki test przy użyciu adfind.exe. PosÅ‚ugujÄ…c siÄ™ kontem użytkownika, powiedzmy ‘tkrajewski‘ spróbujmy odczytać dane o dostÄ™pnych atrybutach innego użytkownika, powiedzmy CN=Jan Kowalski…:

adfind -b “CN=Jan Kowalski,OU=Employees,DC=w2k,DC=pl” -s base allowedAttributes

AdFind V01.32.00cpp Joe Richards (joe@joeware.net) October 2006

Using server: DC1.w2k.pl:389
Directory: Windows Server 2003

dn:CN=Jan Kowalski,OU=Location1,OU=Employees,DC=w2k,DC=pl
>allowedAttributes: msExchTUISpeed
>allowedAttributes: msExchTUIVolume
>allowedAttributes: msExchTUIPassword
>allowedAttributes: msExchVoiceMailboxID
>allowedAttributes: msExchOriginatingForest
>allowedAttributes: msExchIMAPOWAURLPrefixOverride
>allowedAttributes: msExchPfRootUrl
>allowedAttributes: msExchMailboxUrl
>allowedAttributes: msExchPoliciesExcluded
>allowedAttributes: msExchPoliciesIncluded
>allowedAttributes: msExchCustomProxyAddresses

(…)

>allowedAttributes: serialNumber
>allowedAttributes: sn
>allowedAttributes: objectCategory
>allowedAttributes: sAMAccountName
>allowedAttributes: objectSid
>allowedAttributes: nTSecurityDescriptor
>allowedAttributes: instanceType
>allowedAttributes: cn
>allowedAttributes: objectClass

1 Objects returned

Spróbujmy teraz na tych samych uprawnieniach odczytać zakres atrybutów, które tkrajewski może uaktualnić dla obiektu CN=Jan Kowalski…

adfind -b “CN=Jan Kowalski,OU=Employees,DC=w2k,DC=pl” -s base allowedAttributesEffective

AdFind V01.32.00cpp Joe Richards (joe@joeware.net) October 2006

Using server: DC1.w2k.pl:389
Directory: Windows Server 2003

dn:CN=Jan Kowalski,OU=Location1,OU=Employees,DC=w2k,DC=pl

1 Objects returned

Jak widać możemy przeczytać dosyć dużo (domyślne uprawnienia) ale nie możemy już nic zapisać. Sprawdźmy więc czy ten atrybut faktycznie pokazuje nam listę atrybutów, które możemy uaktualnić. Najprstszy test to sprawdzenie do jakich atrybutów własnego konta ma uprawnienia tkrajewski.

adfind -b “CN=Tomasz Krajewski,OU=Employees,DC=w2k,DC=pl” -s base allowedAttributesEffective

AdFind V01.32.00cpp Joe Richards (joe@joeware.net) October 200

Using server: DC1.w2k.pl:389
Directory: Windows Server 2003

dn:CN=Tomasz Krajweski,OU=Location1,OU=Employees,DC=w2k,DC=pl
>allowedAttributesEffective: otherTelephone
>allowedAttributesEffective: info
>allowedAttributesEffective: otherPager
>allowedAttributesEffective: publicDelegates
>allowedAttributesEffective: streetAddress
>allowedAttributesEffective: otherHomePhone
>allowedAttributesEffective: wWWHomePage
>allowedAttributesEffective: personalTitle

(…)

>allowedAttributesEffective: userSMIMECertificate
>allowedAttributesEffective: homePhone
>allowedAttributesEffective: mobile
>allowedAttributesEffective: pager
>allowedAttributesEffective: thumbnailPhoto

1 Objects returned

Jak widać działa. I w ten oto prosty sposób możemy w ramach naszego skryptu \ aplikacji \ usługi sprawdzić czy posiadamy dostęp do atrybutu zanim spróbujemy go odczytać lub uaktualnić (co swoją drogą może być dobrą praktyką).

Leave a Reply