Udm Syntax

Hallo,

ich habe eine Frage zur Syntax von udm.

Nach einer Migration auf Samba 4 möchte ich Benutzer wieder automatisiert in ihre Gruppen verschieben.
Vor der Migration hat mir das Tool /usr/share/univention-directory-manager-tools/proof_uniqueMembers alle Benutzer aus den Gruppen entfernt. (warum auch immer)
siehe auch [url]Samba Migration 3 > 4]

Wenn ich nun z.B. folgenden Befehl eingebe:

udm groups/group modify --dn cn=kba,cn=groups,dc=gfm,dc=local \
	--append users=uid=eng604,cn=groups,dc=gfm,dc=local \
	--append users=uid=eng606,cn=groups,dc=gfm,dc=local \
	--append users=uid=eng608,cn=groups,dc=gfm,dc=local \
	--append users=uid=eng617,cn=groups,dc=gfm,dc=local \
	--append users=uid=eng623,cn=groups,dc=gfm,dc=local

Bekomme ich diese Fehlermeldung:
LDAP Error: Type or value exists: modify/add: memberUid: value #0 already exists

Soweit ist das klar, das entsprechende Attribut ist bereits gesetzt:

# kba, groups, gfm.local
dn: cn=kba,cn=groups,dc=gfm,dc=local
sambaGroupType: 2
cn: kba
objectClass: top
objectClass: posixGroup
objectClass: univentionGroup
objectClass: sambaGroupMapping
objectClass: univentionObject
description: added by Siedl Networks
gidNumber: 1135
sambaSID: S-1-5-21-2657495056-2441450391-3094810640-1271
univentionObjectType: groups/group
univentionGroupType: -2147483646
memberUid: eng604
memberUid: eng608
memberUid: eng606
memberUid: eng617
memberUid: eng623

Wenn ich den ersten Benutzer manuell in der UMC in die Gruppe eintrage, sieht mein LDAP-Dump so aus:

# kba, groups, gfm.local
dn: cn=kba,cn=groups,dc=gfm,dc=local
sambaGroupType: 2
cn: kba
objectClass: top
objectClass: posixGroup
objectClass: univentionGroup
objectClass: sambaGroupMapping
objectClass: univentionObject
description: added by Siedl Networks
gidNumber: 1135
sambaSID: S-1-5-21-2657495056-2441450391-3094810640-1271
univentionObjectType: groups/group
univentionGroupType: -2147483646
memberUid: eng604
memberUid: eng608
memberUid: eng606
memberUid: eng617
memberUid: eng623
uniqueMember: uid=eng604,cn=users,dc=gfm,dc=local

Wie muss ich den UDM-Befehl umschreiben, sodass ich die Änderungen übernommen werden?

Wenn man in der UMC etwas ändert, ruft Univention intern einen udm-Befehl auf, richtig?
Kann man in einem Logfile nachsehen, wie der letzte Befehl ausgesehen hat?

Das wäre natürlich sehr cool und würde meine erste Frage obsolet machen.

LG,
Roland.

Moin,

zuerst: die UMC führt, meines Wissens nach, die Änderungen direkt über die internen Schnittstellen aus, die auch das Kommandozeilentool »udm« nutzt – aber eben nicht über den Aufruf des Tools selber. Insofern ist ein solches Erzeugen der Kommandozeile vermutlich nicht möglich.

Dann zu Ihrem Problem. Normalerweise gibt es im LDAP zwei Attribute, die gesetzt sind, wenn ein Benutzer Mitglied einer Gruppe ist: memberUid und uniqueMember, wie Sie es ja auch in Ihrem letzten Paste zeigen. Warum nun nach der Verwendung von »proof_uniqueMembers« die ganzen uniqueMember-Attribute weg sind, die memberUid aber noch existieren, ist eine gute Frage.

Das Tool udm versucht, schlicht beide Attribute zu setzen, wenn Sie einen User zu einer Gruppe hinzufügen. Meines Wissens ist eine Modifikation nur der memberUid mit udm nicht möglich.

In dieser Situation würde ich die memberUid-Attribute mit einem ldapmodify löschen und danach mit udm die User den Gruppen hinzufügen, so wie Sie das initial geschrieben haben. Mit etwas Scripten sollte das automatisierbar sein.

Also mein ldapmodify-Skript ist fertig und danach konnte ich die Gruppen auch mit dem zuerst geposteten UDM-Befehl modifizieren.

In den Gruppen sehe ich jetzt die Benutzer.
Wenn ich mir jedoch die Benutzer ansehe, dann sind dort die entsprechenden Gruppenzugehörigkeiten nicht vermerkt.
Klar, beim UDM-Befehl steht nur “groups/group modify” und genau das tut er auch, aber sollte nicht klar sein, dass ich dann auch beim Benutzer eine entsprechende Änderung vorgenommen werden muss?

Moin,

in einem normalen Linux-LDAP werden Gruppenmitgliedschaften ausschließlich in der Gruppe gespeichert, nicht aber beim Benutzerobjekt. Beim Benutzerobjekt wird nur die Nummer der primären Gruppe vermerkt. Das ist analog zu den klassischen Dateien /etc/passwd und /etc/group: in der passwd steht für einen User ja auch nur die ID der primären Gruppe, und in der group steht für jede Gruppe, wer die Mitglieder sind.

Das ist übrigens anders als bei einem Active Directory. In einem AD-LDAP stehen die Gruppenmitgliedschaften am Benutzerobjekt (Eigentschaft »memberOf«).

Nun meine Nachfrage: wo sehen Sie bei den Benutzern nicht, dass sie in der Gruppe sind?

Wo Sie es sehen sollten:

[ul][li]In der Ausgabe von »udm users/user list --filter=uid=test123«; hier sollten die zusätzlichen Gruppen als »groups:« aufgeführt werden[/li]
[li]In der UMC, wenn Sie einen Benutzer bearbeiten und den Reiter »Groups« betrachten[/li]
[li]In der Ausgabe von »univention-s4search cn=test123«; hier wie oben erläutert in der Eigenschaft »memberOf«[/li]
[li]In der Ausgabe von »groups test123« oder »id test123«[/li][/ul]

Wo Sie die Gruppenmitgliedschaft hingegen nicht sehen sollten, ist in der Ausgabe von »univention-ldapsearch«.

Ich habe ehrlich gesagt nur in der UMC nachgesehen.

Inzwischen habe ein weiteres kleines Skript geschrieben, dass die Benutzer angepasst hat.
War letztlich nicht so umfangreich wie ich ursprünglich dachte.

Damit passt jetzt wieder die Gruppenmitgliedschaft und sie werden so angezeigt (bzw. nicht angezeigt) wie Sie geschrieben haben.

Danke für die Unterstützung!

Mastodon