Dies ist eine alte Version des Dokuments!
Wer seine Owncloud/Nextcloud an das LDAP angeschlossen hat, der verliert z.B. nach einem Schuljahreswechsel Schüler und auch Lehrer. Wer diese „Karteileichen“ vermeiden will, der kann folgende Prozedur durchlaufen:
Hier gibt es eine gute Beschreibung, was man machen kann. Wer einen Cloud-server virtualisiert hat, kann auch diesen backupen.
/opt/nextcloud
) muss angepasst werden./owncloud-data
) muss angepasst werden.(danke @max, der https://ask.linuxmuster.net/t/own-nextcloud-userpflege-automatisch-funktioniert-nicht-selfmade/754 das Verfahren dokumentiert hat, inkl. der Problematik irgendwo zw. Nextcloud 11 und 12, ab Nextcloud 13 funktioniert es wieder):
Nun habe ich das owncloud-datenverzeichnis (bei mir /owncloud-data
) in eine liste gepackt, meines Erachtens die einzige Möglichkeit, alle Nutzernamen zu bekommen:
ls /owncloud-data/ | grep -v "\." > /tmp/userlist
und dann den check-user-Befehl drauf losgelassen:
for i in `cat /tmp/userlist` ; do sudo -u www-data php /opt/nextcloud/occ ldap:check-user "$i"; done
Das findet nochmal alle die User, die bisher noch als vorhanden geglaubt wurden.
Auf dem Cloudserver folgender Befehl zeigt alle nicht (mehr) in LDAP gefunden User an:
sudo -u www-data php /opt/nextcloud/occ ldap:show-remnants
Bei mir erscheinen hier auch viele Computerkonten, wenn es die Computer nicht mehr bei linuxmuster.net gibt. z.B:
root@cleese:~# sudo -u www-data php /opt/nextcloud/occ ldap:show-remnants +---------------+--------------------+---------------+---------+---------------+-----+--------+ | ownCloud name | Display Name | LDAP UID | LDAP DN | Last Login | Dir | Sharer | +---------------+--------------------+---------------+---------+---------------+-----+--------+ | lzdisplay01 | | | | - | | N | | lzdisplay02 | | | | - | | N | | lzlaptop01 | | | | - | | N | | test | | | | - | | N | | zztop | | | | - | | N | +---------------+--------------------+---------------+---------+---------------+-----+--------+
Zudem: Achtung, manchmal findet `ldap:show-remnants` auch zu viele Nutzer, also auch Nutzer, die noch in LDAP sind. Das kann passieren, wenn man zuvor z.B. alle Nutzer aus LDAP ausgeblendet hat, oder zu einem Abfragezeitpunkt LDAP nicht kontaktiert werden konnte. Dann denkt ein Cache, dass der LDAP-User nicht drin ist. Ein check-user (siehe oben) überprüft aber tatsächlich, ob der User in LDAP ist.
Die mit ldap:show-remnants
angezeigten Accounts kann man nun händisch löschen.
Natürlich werden alle Daten der Karteileichen entfernt. Wenn also dem ehemaligen Benutzer Daten gehören, die er/sie geteilt hat und die andere noch sehen konnten, so sind diese nach dieser Löschung spätestens verschwunden.
sudo -u www-data php /opt/nextcloud/occ user:delete zztop
Mit folgendem Skript landen alle zu loeschenden User in einer Zwischendatei in /tmp/zuloeschendeuser
, die man sich anschauen kann und sollte:
sudo -u www-data php /opt/nextcloud/occ ldap:show-remnants | awk '{print $2}' | sed "2d;/^\s*$/d" > /tmp/zuloeschendeuser
bevor man mit dem zweiten Befehl die User tatsächlich löscht.
for i in `cat /tmp/zuloeschendeuser`; do echo sudo -u www-data php /opt/nextcloud/occ user:delete "$i"; done
#!/bin/bash lmnservername="server" nextcloudservername="cleese" occ="/opt/nextcloud/occ" data="/srv/nextcloud/data" if [ `hostname` = "$lmnservername" ]; then echo "copying $0 to $nextcloudservername" scp $0 ${nextcloudservername}: ssh -t ${nextcloudservername} $0 exit 0 fi hardlist=`mktemp` pv --version > /dev/null if [ $? -ne 0 ] ; then apt install pv fi echo -n "Erstelle Liste: " ls $data | grep -v "\." | grep -vE "(appdata|files_external)" > /tmp/userlist echo `cat /tmp/userlist | wc -l` "user" echo "Checke, ob User noch in LDAP sind:" for i in `cat /tmp/userlist` ; do if sudo -u www-data php $occ ldap:check-user "$i" | grep "not" 2>&1 >/dev/null ; then # not a local user? if ! sudo -u www-data php $occ user:info "$i" 2>&1 >/dev/null ; then echo "$i" >> $hardlist fi else echo -n "." fi done | pv -s `cat /tmp/userlist | wc -l` > /dev/null echo -n "Users nicht mehr im LDAP:" sudo -u www-data php /opt/nextcloud/occ ldap:show-remnants | awk '{print $2}' | sed "2d;/^\s*$/d" > /tmp/zuloeschendeuser if [ -s /tmp/zuloeschendeuser ]; then cat /tmp/zuloeschendeuser | paste -s -d " " echo "Sollen diese User gelöscht werden? yes/NO" read if [ "x$REPLY" = "xyes" ] ; then for i in `cat /tmp/zuloeschendeuser`; do sudo -u www-data php /opt/nextcloud/occ user:delete "$i"; done fi else echo "keine" fi echo -n "Users in $hardlist, deren Home gelöscht werden könnte $data:" if [ -s $hardlist ]; then cat $hardlist | paste -s -d " " echo "Sollen diese User per rm -rf $data/<user> gelöscht werden? yes/NO" read if [ "x$REPLY" = "xyes" ] ; then for i in `cat $hardlist`; do echo rm -rf $data/$i done fi else echo "keine" fi