InetOrgOrg-Person

Benutzer im Active Directory werden normalerweise als Objekt vom Typ "user" angelegt. Im LDAP-Standard wurde aber Auch ein Object "InetOrgPerson" definiert, welches von verschiedenen Firmen auch immer wieder genutzt wird. Für eine Anmeldung auf einem Windows Client macht es auch keinen großen Unterschied aber woanders schon.

Empfehlung: Bleiben Sie beim Standard "User" und vermeiden Sie "InetOrgPerson"

InetOrg-Person vs User

Ich habe einfach mal zwei Benutzer der unterschiedlichen Typen mit minimalen Stammdaten angelegt und mit LDIFDE exportiert:

dn

User inetorgPerson Kontakt Computer

changetype

add

add

add

add

objectClass

Top, person, organizationalPerson, user

Top
person
organizationalPerson
user
inetOrgPerson

Top
person
organizationalPerson
contact

Top
person
organizationalPerson
user
computer

cn

User

inetorgperson

contact

computer

givenName

User

inetorgperson

 

 

distinguishedName

CN=User, OU=Test, DC=msxfaq, DC=de

CN=inetorgperson, OU=Test, DC=msxfaq, DC=de

CN=contact, OU=Test, DC=msxfaq, DC=de

CN=computer, OU=Test, DC=msxfaq, DC=de

instanceType

4

4

4

4

whenCreated

20200206181536.0Z

20200206181559.0Z

20200206181600.0Z

20200206181601.0Z

whenChanged

20200206181536.0Z

20200206181559.0Z

20200206181600.0Z

20200206181601.0Z

displayName

user

inetorgperson

contact

computer

uSNCreated

27364358

27364387

27365198

27365204

uSNChanged

27364364

27364393

27365198

27365208

name

User

inetOrgPerson

Contact

computer

objectGUID

xxx==

xxx==

xxx==

xxx==

userAccountControl

512

512

 

4128

badPwdCount

0

0

 

0

codePage

0

0

 

0

countryCode

0

0

 

0

badPasswordTime

0

0

 

0

lastLogoff

0

0

 

0

lastLogon

0

0

 

0

pwdLastSet

0

0

 

132254879477990424

primaryGroupID

513

513

 

515

objectSid

xxx/OUgETzwAAA==

xxx/OUgEUDwAAA==

 

xxx/OUgEUTwAAA==

accountExpires

9223372036854775807

9223372036854775807

 

9223372036854775807

logonCount

0

0

 

0

sAMAccountName

user

inetorgperson

 

COMPUTER$

sAMAccountType

805306368

805306368

 

805306369

userPrincipalName

user@msxfaq.net

inetorgperson@msxfaq.net

 

 

objectCategory

CN=Person, CN=Schema, CN=Configuration, DC=msxfaq, DC=de

CN=Person, CN=Schema, CN=Configuration, DC=msxfaq, DC=de

CN=Person, CN=Schema, CN=Configuration, DC=msxfaq, DC=de

CN=Computer, CN=Schema, CN=Configuration, DC=msxfaq, DC=de

dSCorePropagationData

16010101000000.0Z

16010101000000.0Z

16010101000000.0Z

16010101000000.0Z

Genau betrachtet unterscheiden sich die beiden Objekte nur an einer erweiterten ObjectClass. Das Objekt "inetOrgPerson" ist quasi eine Erweiterung des Objekts "user". Dennoch habe ich auch noch mal das Schema verglichen. Ein Export mit LDIFDE ist ja schnell gemacht

ldifde -f user.txt -d "CN=user, CN=Schema, CN=Configuration, DC=msxfaq, DC=de"
ldifde -f inetorg.txt -d "CN=inetOrgPerson, CN=Schema, CN=Configuration, DC=msxfaq, DC=de"

Interessant ist hier zwar die Felder "MayContain", "systemMayContain" und "systemAuxiliaryClass", welches weitere Subklassen der Properties enthält aber eine genauere Betrachtung kann ich mir ersparen,  wenn Sie das Feld "SubClassOf" anschauen.

Feld User inetorgPerson

subClassOf

organizationalPerson

user

mayContain

msRTCSIP-UserRoutingGroupId, msRTCSIP-OwnerUrn, msRTCSIP-ApplicationOptions, msRTCSIP-GroupingID, msRTCSIP-AcpInfo, msRTCSIP-PrivateLine, msRTCSIP-DeploymentLocator, msRTCSIP-TargetUserPolicies, msRTCSIP-UserPolicies, msRTCSIP-TenantId, msSFU30NisDomain, msSFU30Name, msDS-SourceObjectDN, msRTCSIP-UserLocationProfile, msRTCSIP-UserPolicy, msRTCSIP-OptionFlags, msRTCSIP-Line, msRTCSIP-LineServer, msRTCSIP-ArchivingEnabled, msRTCSIP-PrimaryUserAddress, msRTCSIP-UserEnabled, msRTCSIP-TargetHomeServer, msRTCSIP-OriginatorSid, msRTCSIP-PrimaryHomeServer, msRTCSIP-UserExtension, msRTCSIP-FederationEnabled, msRTCSIP-InternetAccessEnabled, audio, carLicense, departmentNumber, displayName, employeeNumber, employeeType, givenName, homePostalAddress, jpegPhoto, labeledURI, photo, preferredLanguage, roomNumber, secretary, uid, userPKCS12, userSMIMECertificate, x500uniqueIdentifier, msExchOriginatingForest, msExchIMAPOWAURLPrefixOverride, kMServer, msExchConferenceMailboxBL, msExchResourceProperties, msExchResourceGUID, msExchControllingZone, msExchQueryBaseDN

audio, businessCategory, carLicense, departmentNumber, displayName, employeeNumber, employeeType, givenName, homePhone, homePostalAddress, initials, jpegPhoto, labeledURI, mail, manager, mobile, o, pager, photo, preferredLanguage, roomNumber, secretary, uid, userCertificate, userPKCS12, userSMIMECertificate, x500uniqueIdentifier

systemMayContain

msDS-KeyPrincipalBL, msDS-KeyCredentialLink, msDS-PrimaryComputer, msDS-SyncServerUrl, msDS-AssignedAuthNPolicy, msDS-AssignedAuthNPolicySilo, msDS-AuthNPolicySiloMembersBL, msPKI-CredentialRoamingTokens, msTSPrimaryDesktop, msTSSecondaryDesktops, msDS-ResultantPSO, msTSLSProperty02, msTSLSProperty01, msTSManagingLS4, msTSLicenseVersion4, msTSExpireDate4, msTSManagingLS3, msTSLicenseVersion3, msTSExpireDate3, msTSManagingLS2, msTSLicenseVersion2, msTSExpireDate2, msDS-AuthenticatedAtDC, msDS-UserPasswordExpiryTimeComputed, msTSManagingLS, msTSLicenseVersion, msTSExpireDate, msTSProperty02, msTSProperty01, msTSInitialProgram, msTSWorkDirectory, msTSDefaultToMainPrinter, msTSConnectPrinterDrives, msTSConnectClientDrives, msTSBrokenConnectionAction, msTSReconnectionAction, msTSMaxIdleTime, msTSMaxConnectionTime, msTSMaxDisconnectionTime, msTSRemoteControl, msTSAllowLogon, msTSHomeDrive, msTSHomeDirectory, msTSProfilePath, msDS-FailedInteractiveLogonCountAtLastSuccessfulLogon, msDS-FailedInteractiveLogonCount, msDS-LastFailedInteractiveLogonTime, msDS-LastSuccessfulInteractiveLogonTime, msRADIUS-SavedFramedIpv6Route, msRADIUS-FramedIpv6Route, msRADIUS-SavedFramedIpv6Prefix, msRADIUS-FramedIpv6Prefix, msRADIUS-SavedFramedInterfaceId, msRADIUS-FramedInterfaceId, msPKIAccountCredentials, msPKIDPAPIMasterKeys, msPKIRoamingTimeStamp, msDS-SupportedEncryptionTypes, msDS-SecondaryKrbTgtNumber, msDRM-IdentityCertificate, msIIS-FTPDir, msIIS-FTPRoot, pager, mobile, homePhone, manager, mail, initials, businessCategory, o, lastLogonTimestamp, msDS-User-Account-Control-Computed, msCOM-UserPartitionSetLink, msDS-Site-Affinity, msDS-Cached-Membership-Time-Stamp, msDS-Cached-Membership, userCertificate, userWorkstations, userSharedFolderOther, userSharedFolder, userPrincipalName, userParameters, userAccountControl, unicodePwd, terminalServer, servicePrincipalName, scriptPath, pwdLastSet, profilePath, primaryGroupID, preferredOU, otherLoginWorkstations, operatorCount, ntPwdHistory, networkAddress, msRASSavedFramedRoute, msRASSavedFramedIPAddress, msRASSavedCallbackNumber, msRADIUSServiceType, msRADIUSFramedRoute, msRADIUSFramedIPAddress, msRADIUSCallbackNumber, msNPSavedCallingStationID, msNPCallingStationID, msNPAllowDialin, mSMQSignCertificatesMig, mSMQSignCertificates, mSMQDigestsMig, mSMQDigests, mS-DS-CreatorSID, maxStorage, logonWorkstation, logonHours, logonCount, lockoutTime, localeID, lmPwdHistory, lastLogon, lastLogoff, homeDrive, homeDirectory, groupsToIgnore, groupPriority, groupMembershipSAM, dynamicLDAPServer, desktopProfile, defaultClassStore, dBCSPwd, controlAccessRights, codePage, badPwdCount, badPasswordTime, adminCount, aCSPolicyName, accountExpires

 

systemAuxiliaryClass

msDS-CloudExtensions, securityPrincipal, mailRecipient

 

Das Objekt "inetOrgPerson" ist eine Unterklasse von "user" und bekommt damit alle anderen Eigenschaften vererbt. Dass iNetOrgPerson zusätzlich noch weitere Eigenschaften über "MayContain" bekommt, ist hier nicht weiter relevant, da dies Felder auch beim "User" eingetragen sind. Insofern frage ich mich, was damals Microsoft sich gedacht hat, diese doppelte Zuweisung bei InetorgPerson zu machen.

Wechsel des Objekts

Wenn Sie bislang mit InetOrgPerson gearbeitet haben und nun doch wieder mit "User" arbeiten wollen,  dann können Sie die Objekte sehr einfach umstellen

Set-ADUser username -Add @{objectClass='inetOrgPerson'}

Wenn Sie aus einem inetOrgPerson wieder ein "User" machen wollen,  entfernen Sie einfach den Eintrag in der "objectClass"

Set-ADUser username -Remove @{objectClass='inetOrgPerson'}

Da stellt sich dann schon die Frage,  warum es zwei fast identische Objekte gibt und wo es knirschen könnte.

Die nun folgende Auflistung sind Probleme,  die ich in meinem Tätigkeitsumfeld selbst bemerkt habe. Sie ist nicht vollständig und wer etwas beitragen möchte,  kann mich gerne anschreiben

LDAP-Suche

Ich kenne viele Programme,  die z.B. nach "Benutzer" suchen. Das kann man mit einem passenden LDAP-Filter sehr einfach regeln,  z.B.

(objectclass=user)

So findet der Filter natürlich beide objektarten,  denn auch die inetOrgPerson hat ja die Objekt-Klasse "user". In der Antwort liefert LDAP aber dann ein Array für diese Feld mit und wenn eine Software nun in dem Feld einfach den letzten Eintrag ausliest,  eil der das Objekt am "genauesten" spezifiziert. Es gibt ja leider kein eigenes Feld, welches den genauen Objekt-Type angibt, so dass ein Entwickler eben diese Aufzählung parsen muss. Nun haben sie aber oben schon gesehen, dass auch ein "Computer" bei einer Suche nach "User" zurückgegeben wird. Natürlich könnte ein Entwickler nun auch noch das Feld "sAMAccountType" mit auswerten, um nur Anmeldekonten zu finden.

Aber nicht alle Entwickler stecken so tief in den Details eines Active Directory und das Feld "sAMAccountType" gibt es auch nicht in einem Notes LDAP-Server oder anderen LDAP-Quellen. Warum daher nicht einfach nachschauen, ob das letzte Elemente in "objectClass" den Inhalt "user" hat.

In den meisten Fällen können Sie sehr gut dann die Computer aus einer Auflistung ausschließen. Dummerweise finden Sie dann auch keine inetOrgUser mehr.

3rd Party Schema-Erweiterungen

Die meisten Hersteller verzichten mittlerweile auf eigene Schema-Erweiterungen des Active Directory und behelfen sich mit bestehenden Feldern. Sehr gerne werden dazu die Exchange Felder genutzt. Wer aber eine Schema-Erweiterung durchführt, muss diese Felder ja auch an die Objekte anbinden.

Hier sollte das Risiko einer Fehlkonfiguration allerdings nicht vorhanden sein, denn eine Erweiterung der Schema-Klasse "user" wird auch auf "inetOrgPerson" wirken, welche ja von "user" abgeleitet ist.

AD Berechtigungen

Aber an anderer Stelle kann es noch zu Problemen kommen. Selbst Microsoft Exchange ist nicht davor gefeit, in diese Falle zu tappen. Neben einer reinen Schema-Erweiterung kann eine Software auch die "Default Berechtigungen" auf Objekte in der Domäne anpacken. Die dort gepflegten ACLs werden sehr gerne bei der Installation von Active Directory integrierten Programmen angepasst. Hier ist inetOrgPerson nicht von User abgeleitet. So hat Exchange vergessen, bei einer Erweiterung der Berechtigungen diese auch auf inetOrgPerson-Objekte zu vergeben und dies auch dokumentiert.

Microsoft rechnet anscheinend nicht damit, dass eine Firma tatsächlich mit "inetOrgPerson" arbeitet. In dem fall bedeutet dies, dass Exchange dann z.B. keine InetOrgPerson-Objekte hinsichtlich von Postfacheigenschaften verwalten konnte. Mittlerweile ist der Bug natürlich korrigiert worden und im Active Directory sehen sie nun die auf beide Objekte vergebenen Berechtigungen:

Das bedeutet aber nicht, dass nicht auch andere Anwendungen in diese Falle tappen.

Office 365 ADSync Kennworte

Wer auch Dienst aus der Office 365 Cloud nutzen,  wird sehr schnell einen Verzeichnisabgleich (Siehe Office 365 Identity Management) mit ADSync installieren. In den Synchronisationsregeln ist auch gut zu sehen,  dass sowohl "User" als auch "InetorgPerson" von ADSync als "person" angesehen und repliziert werden:

Aber das Bild zeigt nicht alles. Über die Funktion Password Hash Sync (PHS) kann ADSync auch die Anmeldung unterstützen,  indem ihre lokalen Kennworte als Hash-Werte auch in die Cloud übertragen werden. Dies funktioniert aber nur für Objekte vom Typ "User"

Password sync is only supported for the object type user in Active Directory. It is not supported for the iNetOrgPerson object type
Quelle: https://docs.microsoft.com/en-us/azure/active-directory/hybrid/how-to-connect-password-hash-synchronization

Sie müssten daher die Konfiguration von ADSync sehr umfangreich anpassen und wie das hinsichtlich Support und Beibehaltung bei Updates aussieht,  steht auf einem anderen Blatt. Sie sollten daher mit Office 365 immer auf "User" setzen.

Weitere Links