Bug 23917 - Posix UID Mapping für Samba4
Posix UID Mapping für Samba4
Status: CLOSED FIXED
Product: UCS
Classification: Unclassified
Component: Samba4
UCS 3.0
Other Linux
: P5 normal (vote)
: UCS 3.0 - RC
Assigned To: Arvid Requate
Stefan Gohmann
:
Depends on:
Blocks:
  Show dependency treegraph
 
Reported: 2011-10-04 14:23 CEST by Arvid Requate
Modified: 2011-12-13 15:48 CET (History)
1 user (show)

See Also:
What kind of report is it?: ---
What type of bug is this?: ---
Who will be affected by this bug?: ---
How will those affected feel about the bug?: ---
User Pain:
Enterprise Customer affected?:
School Customer affected?:
ISV affected?:
Waiting Support:
Flags outvoted (downgraded) after PO Review:
Ticket number:
Bug group (optional):
Max CVSS v3 score:


Attachments
Ein Beispiel-shellscript zum Anpassen der idmap per ldpadd/ldbmodify (1.75 KB, text/plain)
2011-10-17 19:38 CEST, Arvid Requate
Details
Ein Beispiel-shellscript zum Anpassen der idmap per ldpadd/ldbmodify (1.75 KB, text/plain)
2011-10-17 19:39 CEST, Arvid Requate
Details
listener.log (157.48 KB, text/plain)
2011-11-22 11:22 CET, Stefan Gohmann
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Arvid Requate univentionstaff 2011-10-04 14:23:59 CEST
Samba4 verwendet aktuell nicht die Posix-ID Zuordnung, die im OpenLDAP definiert ist:

root@master:~# wbinfo --name-to-sid "Domain Admins"
S-1-5-21-1128718043-107420793-2367769490-512 SID_DOM_GROUP (2)
root@master:~# wbinfo --sid-to-uid  S-1-5-21-1128718043-107420793-2367769490-512
3000000

Die Mappings sind in /var/lib/samba/private/idmap.ldb definiert:

root@master:~# univention-s4search  -H /var/lib/samba/private/idmap.ldb objectsid=S-1-5-21-1128718043-107420793-2367769490-512 xidNumber
# record 1
dn: CN=S-1-5-21-1128718043-107420793-2367769490-512
xidNumber: 3000000

Diese Posix-ID wird z.B. beim Anlegen von Dateien unter /var/lib/samba/sysvol verwendet.
Comment 1 Arvid Requate univentionstaff 2011-10-04 14:24:08 CEST
Aktuell ist dort auch für sehr wenige Benutzern/Gruppen eine Posix-ID definiert:

root@master:~# wbinfo --name-to-sid "Domain Users"
S-1-5-21-1128718043-107420793-2367769490-513 SID_DOM_GROUP (2)
root@master:~# wbinfo --sid-to-uid  S-1-5-21-1128718043-107420793-2367769490-513
failed to call wbcSidToUid: WBC_ERR_DOMAIN_NOT_FOUND
Could not convert sid S-1-5-21-1128718043-107420793-2367769490-513 to uid
Comment 2 Arvid Requate univentionstaff 2011-10-04 14:24:15 CEST
Anscheinend wird die Posix-ID nicht direkt bei der Erzeugung eines Samba4-Benutzers zugewiesen, sondern erst bei einer Anfrage an den internen ID mapper:


root@master:~# samba-tool newuser user1 univention
User user1 created successfully
root@master:~# samba-tool newuser user2 univention
User user2 created successfully

root@master:~# wbinfo --name-to-sid user1
S-1-5-21-1128718043-107420793-2367769490-1111 SID_USER (1)
root@master:~# wbinfo --name-to-sid user2
S-1-5-21-1128718043-107420793-2367769490-1112 SID_USER (1)

## Abfrage in umgedrehter Reihenfolge:
root@master:~# wbinfo --sid-to-uid \
         S-1-5-21-1128718043-107420793-2367769490-1112
3000001
root@master:~# wbinfo --sid-to-uid \
         S-1-5-21-1128718043-107420793-2367769490-1111
3000002
Comment 3 Arvid Requate univentionstaff 2011-10-17 19:38:45 CEST
Created attachment 3647 [details]
Ein Beispiel-shellscript zum Anpassen der idmap per ldpadd/ldbmodify
Comment 4 Arvid Requate univentionstaff 2011-10-17 19:39:44 CEST
Created attachment 3648 [details]
Ein Beispiel-shellscript zum Anpassen der idmap per ldpadd/ldbmodify
Comment 5 Arvid Requate univentionstaff 2011-10-17 19:52:32 CEST
Zu klären ist noch, ob die objectclass=foreignSecurityPrincipal Objekte unter "CN=WellKnown Security Principals,cn=configuration,$ldap_base" auch mappen muss. Diese werden bis jetzt nicht als Gruppenobjekte in das OpenLDAP-Verzeichnis synchronisiert und haben daher noch keine GID.
Comment 6 Arvid Requate univentionstaff 2011-10-20 18:01:51 CEST
Die Einträge in idmap.ldb werden jetzt über das Listener-Modul samba4-idmap gepflegt, wenn die Attribute sambaSID oder uidNumber / gidNumber im UCS LDAP geschrieben werden.

Da Samba4 Provision die idmap wieder löscht nachdem das Listener-Modul im univention-samba4.postinst initialisiert worden ist, wurde das Listener-Modul so erweitert, dass man es auch als Skript aufrufen kann, um die Ausgabe von univention-ldapsearch erneut durch den Modul-Handler zu schicken. Dies wird im Joinskript nach dem Provision aufgerufen.

Nach Abschluss der Installation von univention-s4-connector stehen jetzt in der idmap weder temporäre SIDs (S-1-4-*) noch von Samba selbst vergebene UIDs/GIDs. Später kann Samba UIDs/GIDs aus dem Bereich 3000000 - 4000000 vergeben, falls es noch keinen Eintrag für eine SID in der idmap gibt. Falls es eine entsprechende in das UCS-LDAP geschrieben wird, korrigiert das Listener-Modul die UID/GID in der idmap auf den Wert im UCS-LDAP.


Note: Samba4 vergibt für einige SIDs von foreignSecurityPrincipal-Objekten eigenmächtig PosixIDs aus dem Bereich 3000000 - 4000000. Z.B. für

  S-1-5-11   CN=Authenticated Users
  S-1-5-2    CN=Network

siehe univention-s4search -b CN=Configuration,$samba4_ldap_base \
     objectsid=S-1-5-2

Man sollte im Auge behalten, ob es notwendig ist, auch diese in das UCS-LDAP zu synchronisieren, um ihnen Posix-IDs zu geben, die per nss_ldap auflösbar sind. Dies ist insbesondere dann der Fall, wenn für diese SIDs/PosixIDs Datei-Rechte vergeben werden.
Comment 7 Stefan Gohmann univentionstaff 2011-11-22 11:08:22 CET
(In reply to comment #6)
> Da Samba4 Provision die idmap wieder löscht nachdem das Listener-Modul im
> univention-samba4.postinst initialisiert worden ist, wurde das Listener-Modul
> so erweitert, dass man es auch als Skript aufrufen kann, um die Ausgabe von
> univention-ldapsearch erneut durch den Modul-Handler zu schicken. Dies wird im
> Joinskript nach dem Provision aufgerufen.

Das sollten wir in zukünftigen Versionen noch etwas weiter einschränken, da das in großen Umgebungen relativ lange dauern kann. Das ist in Bug #24783 ausgelagert.
Comment 8 Stefan Gohmann univentionstaff 2011-11-22 11:22:05 CET
Created attachment 3853 [details]
listener.log

Eine im S4 gelöschte Gruppe wird derzeit nicht aus dem idmap entfernt. Die Gruppe ist im UCS LDAP durch den S4 Connector entfernt worden. Im Anhang die listener.log, die sollte das Anlegen und das Löschen der Gruppe (grp1) beinhalten.

root@master61:~# ldbsearch -H /var/lib/samba/private/idmap.ldb  xidNumber=5038 -d 0
# record 1
dn: CN=S-1-5-21-2192183024-2677559174-2030691912-1142
objectClass: sidMap
type: ID_TYPE_GID
xidNumber: 5038
cn: S-1-5-21-2192183024-2677559174-2030691912-1142
objectSid: S-1-5-21-2192183024-2677559174-2030691912-1142
distinguishedName: CN=S-1-5-21-2192183024-2677559174-2030691912-1142

# returned 1 records
# 1 entries
# 0 referrals
root@master61:~#
Comment 9 Stefan Gohmann univentionstaff 2011-11-22 11:22:14 CET
reopen
Comment 10 Arvid Requate univentionstaff 2011-11-22 12:12:55 CET
Der entsprechende Zeig im handler ist jetzt aktiviert.
Comment 11 Stefan Gohmann univentionstaff 2011-11-22 22:04:30 CET
Funktioniert soweit. In der Listener Log erscheint die folgende Meldung:
lpcfg_servicenumber: couldn't find ldb

Dazu habe ich Bug #24811 geöffnet.
Comment 12 Sönke Schwardt-Krummrich univentionstaff 2011-12-13 15:48:58 CET
UCS 3.0-0 wurde veröffentlicht. Sollte der hier beschriebene Bug mit einer
neueren Version von UCS erneut auftreten, so sollte dieser Bug dupliziert
werden: "Clone This Bug"