Ich habe ine Script geschrieben, was die Sache hoffentlich ausbügelt. Für einen einzelnen Testuser funktioniert es schon mal. Vielleicht kann es jemand brauchen der mal UIDNummern nachträglich ändern muss und Samba4 im Einsatz hat.
Sollte jemand einen Grund kennen, weshalb ich genau das nicht machen sollte, bin ich für Warnungen dankbar.
Das Script tut folgendes:
[ol][li]Schlägt alte und neu UIDNummer sowie SID und HomeDir nach[/li]
[li]ändert die UIDNummer im openldap[/li]
[li]passt die Zuordnung zwischen Samba SID und Unix UIDNummer in der idmap.ldb an[/li]
[li]Ändert die Eigentümerschaft des Home-Verzeichnisses auf die neue UIDNummer[/li]
[li]Optional: Sucht Dateien mit der alten UIDNummer-Eigentümerschaft und ändert diese[/li][/ol]
#!/bin/bash
# Dieses Script der nachträglichen Änderung der Posix UID auf einem UCS System
# Mit Samba4 AD-Master.
#
# Es addiert einen festen Wert zur alten UID und passt danach das ID-Mapping in
# Der SAMBA Datenbank idmap.ldb an.
#
# Als Eingangsdatei wird eine liste der zu ändernden DNs aus dem UCS openldap
# verwendet.
# Diese Datei muss folgede Form haben:
#
# uid=benutzer1,cn=users,dc=domain,dc=local
# uid=benutzer2,cn=users,dc=domain,dc=local
# Konstanten
IDMAPPFAD=/var/lib/samba/private/idmap.ldb # real
#test# IDMAPPFAD=/tmp/idmap.ldb #test
EINGABEDATEI=/root/korrektur/nutzer
LDAPBASIS=dc=juwe,dc=local
for i in `cat $EINGABEDATEI `; do
echo $i
#Daten aus openldap holen
univention-ldapsearch -x -LLL -b $i > /tmp/ucsldaptemp
OLDUID=$(cat /tmp/ucsldaptemp | grep uidNumber | cut -d " " -f 2)
NEWUID=$(($OLDUID+2000))
SID=$(cat /tmp/ucsldaptemp | grep sambaSID | cut -d " " -f 2)
HDIR=$(cat /tmp/ucsldaptemp | grep homeDirectory | cut -d " " -f 2)
UNAME=$(cat /tmp/ucsldaptemp | grep uid: | cut -d " " -f 2)
echo $i
echo "OLDUID = $OLDUID"
echo "NEWUID = $NEWUID"
echo "SID = $SID"
echo "HOMEDIR= $HDIR"
echo "Username = $UNAME"
# Hier UID im UCS LDAP ändern
echo"dn: $i
changetype: modify
replace: uidNumber
uidNumber: $NEWUID" > /tmp/$UNAME_UCS.ldif
ldapmodify -D cn=admin,$LDAPBASIS -y /etc/ldap.secret -h localhost -p 7389 -f /tmp/$UNAME_UCS.ldif
# Hier mapping im S4 idmap ändern
echo "dn: cn=$SID
changetype: modify
replace: xidNumber
xidNumber: $NEWUID" > /tmp/idmapchange$OLDUID_TO_$NEWUID.ldif
ldbmodify --url=$IDMAPPFAD /tmp/idmapchange$OLDUID_TO_$NEWUID.ldif
if [ $? -eq 0 ] ; then
echo "$UNAME $OLDUID nach $NEWUID" >> /tmp/idmapchange_ok.log
rm /tmp/idmapchange$OLDUID_TO_$NEWUID.ldif
else
echo $i >> /tmp/idmapchange_fehler.log
cp /tmp/idmapchange$OLDUID_TO_$NEWUID.ldif /tmp/failed-idmapchange$OLDUID_TO_$NEWUID.ldif
fi
# Hier Dateieigentum ändern
chown -R --from $OLDUID $NEWUID $HDIR
# Man könnte auch sowas wie "find /mnt/shares/firmendaten -uid $OLDUID -exec chown $NEWUID {} \;" machen.
done