Heute soll es darum gehen, ein Samba Active Directory um eine neue eigene auxiliary ObjectClass zu erstellen, mit eigenen Attributen.
Doch hier erst ein wichtiger Hinweis:
Das Ändern des Schemas in ein schwer Eingriff in die Struktur des Active Directories und sollte gut überlegt und geplant sein. Eine einmal in Active Directory eingespielte Änderung kann nicht wieder Rückgängig gemacht werden! Vor dem Einspielen sollten Sie auf jeden Fall Ihre Active Directory sichern. Testen Sie die Schemaänderung immer erst in einer Testumgebung!
Das Vorgehen beim Einspielen einer neuen ObjectClass und neuer Attribute ist hier anders, als Sie es vielleicht vom OpenLDAP her kennen. Im ersten Schritt müssen Sie immer erst die Attribute im Schema eintragen, erst dann kann die ObjectClass eingespielt werden. Hier im Beispiele sollen zwei neue Attribute angelegt werden, die dann später einzelnen Benutzern zugewiesen werden können. Sie sollten sich, sofern noch nicht passiert, auf jeden Fall einen eigene ODI bei der IANA registrieren um Ihre ObjectClass und Ihre Attribute weltweit eindeutig zu halten. Der Eigene ODI beginnt immer mit 1.3.6.1.4.1. Von der IANA erhalten Sie dann eine sechsstellige Nummer. Hier habe ich zur Demonstration die „123456“ genutzt. Die Zahlen nach dem OID sind frei wählbar. die erste ‚1‘ verweist hier immer auf meine erste eigenen Objectclass. Jede weitere neue ObjectClass wird immer um ‚1‘ hochgezählt. Die folgenden Zahl gib hier die Position des Attributs an. Alle neuen Attribute werden immer wieder um ‚1‘ hochgezählt. Verwenden Sie auch immer einen Suffix für Ihre ObjectClass und Ihre Attribute so ist auch beim Namen die Eindeutigkeit besser gegeben. Ich nutze hier „stka“ Jetzt folgt der LDIF für die Attribute
————-
dn: CN=stka-geburtstag,CN=Schema,CN=Configuration,DC=example,DC=net
objectClass: top
objectClass: attributeSchema
cn: stka-geburtstag
attributeID: 1.3.6.1.4.1.123456.1.1
lDAPDisplayName: stka-geburtstag
attributeSyntax: 2.5.5.12
omSyntax: 64
isSingleValued: TRUE
searchFlags: 0
description: Geburtstag des Benutzers (Datum als String)dn: CN=stka-kfz,CN=Schema,CN=Configuration,DC=example,DC=net
objectClass: top
objectClass: attributeSchema
cn: stka-kfz
attributeID: 1.3.6.1.4.1.123456.1.2
lDAPDisplayName: stka-kfz
attributeSyntax: 2.5.5.12
omSyntax: 64
isSingleValued: TRUE
searchFlags: 0
description: Fahrzeugkennung des Benutzers (String)
————-
Aber woher kommen die Werte für die attributeSyntax und omSyntax? Laden Sie sich dafür die Quellen zu ihrer Samba-Version von der Webseite www.samba.org herunter. Nachdem Sie die Datei entpackt haben, suchen Sie nach der Datei source4/dsdb/schema/schema_syntax.c, in der Datei suchen Sie nach dem Muster ’static const struct‘, darunter finden Sie die Werte für die verschiedene Syntaxattribute. Dort finden Sie auch, welches Format für das Attribut gültig ist.
Nachdem Sie die Datei erstellt haben, können Sie die Attribute, mit dem folgenden Kommando, einspielen:
ldbmodify -H /var/lib/samba/private/sam.ldb /root/new-attrib.ldif –option=“dsdb:schema update allowed“=true
Die Option ist zwingend erforderlich, da das Verändern des Schemas normaler Weise gesperrt ist.
Im Anschluss kann dann die neu ObjectClass erstellt werden. Das folgenden Listing zeigt ein Beispiel:
————
dn: CN=stka-user,CN=Schema,CN=Configuration,DC=example,DC=net
objectClass: top
objectClass: classSchema
cn: stka-user
governsID: 1.3.6.1.4.1.123456.1.3
lDAPDisplayName: stka-user
subClassOf: top
objectClassCategory: 3
mayContain: stka-geburtstag
mayContain: stka-kfz
description: Auxiliary ObjectClass zur Erweiterung von Benutzerobjekten
————
Dann können Sie die ObjectClass einspielen:
ldbmodify -H /var/lib/samba/private/sam.ldb /root/new-objectclass.ldif –option=“dsdb:schema update allowed“=true
Für alle folgenden Änderungen an den Objekten, verwenden Sie immer das Kommando:
ldbmodify -H /var/lib/samba/private/sam.ldb <datei.ldif>
Jetzt einen LDIF erstellen um die neue ObjectClass zu einem Benutzer hinzuzufügen:
———–
dn: CN=Karl_Klammer,CN=Users,DC=example,DC=net
changetype: modify
add: objectClass
objectClass: stka-user
———–
Erst jetzt können die neuen Attribute dem Benutzer hinzugefügt werden. Dafür wird der folgende LDIF benötigt:
———–
dn: CN=Karl_Klammer,CN=Users,DC=example,DC=net
changetype: modify
add: stka-geburtstag
stka-geburtstag: 1990-05-14
–
add: stka-kfz
stka-kfz: AB-XY-1234
———–
Jetzt ist der Benutzer geändert und die Änderung kann angezeigt werden:
————
root@dc01:~# ldbsearch -H /var/lib/samba/private/sam.ldb cn=Karl_Klammer
# record 1
dn: CN=Karl_klammer,CN=Users,DC=example,DC=net
cn: Karl_klammer
instanceType: 4
whenCreated: 20251030190730.0Z
uSNCreated: 4080
name: Karl_klammer
objectGUID: 8c932e96-9ae7-4d77-b0f8-62553617cfe8
badPwdCount: 0
codePage: 0
countryCode: 0
badPasswordTime: 0
lastLogoff: 0
lastLogon: 0
primaryGroupID: 513
objectSid: S-1-5-21-1270304378-1688964665-1878507777-1106
accountExpires: 9223372036854775807
logonCount: 0
sAMAccountName: Karl_klammer
sAMAccountType: 805306368
userPrincipalName: Karl_klammer@example.net
objectCategory: CN=Person,CN=Schema,CN=Configuration,DC=example,DC=net
pwdLastSet: 134063248508330770
userAccountControl: 512
objectClass: top
objectClass: stka-user
objectClass: person
objectClass: organizationalPerson
objectClass: user
stka-geburtstag: 1990-05-14
stka-kfz: AB-XY-1234
whenChanged: 20251030191518.0Z
uSNChanged: 4084
distinguishedName: CN=Karl_klammer,CN=Users,DC=example,DC=net# Referral
ref: ldap://example.net/CN=Configuration,DC=example,DC=net# Referral
ref: ldap://example.net/DC=DomainDnsZones,DC=example,DC=net# Referral
ref: ldap://example.net/DC=ForestDnsZones,DC=example,DC=net# returned 4 records
# 1 entries
# 3 referrals
————Natürlich können die Werte in den Benutzerobjekten auch geändert oder gelöscht werden. Dazu wird wieder ein entsprechender LDIF benötigt. Als erstes sehen Sie den LDIF für die Änderung eines der beiden Attribute:
————
dn: CN=Karl_Klammer,CN=Users,DC=example,DC=net
changetype: modify
replace: stka-geburtstag
stka-geburtstag: 1999-05-14
————
Das folgende Listing zeigt das löschen eines Attributs
————
dn: CN=Karl_Klammer,CN=Users,DC=example,DC=net
changetype: modify
delete: stka-geburtstag
————
Um die ObjectClass bei einem Objekt zu entfernen, müssen erst alle Attribute der ObjectClass vom Objekt entfernt werden. Dazu wird der LDIF aus dem folgenden Listing benötigt:
————
dn: CN=Karl_Klammer,CN=Users,DC=example,DC=net
changetype: modify
delete: objectClass
objectClass: stka-user
————
Hier noch einmal der Hinweis: Die eingespielten Attribute und Objektklassen können NICHT wieder entfernt werden.
So können Sie in Zukunft Ihren Samba-AD um eigen ObjectClasses und Attribute erweitern.

Neueste Kommentare