Benutzer-Werkzeuge

Webseiten-Werkzeuge


 [[anwenderwiki:owncloud:schuljahreswechsel]] 

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Letzte ÜberarbeitungBeide Seiten der Revision
anwenderwiki:owncloud:schuljahreswechsel [2018/10/07 05:02] Tobiasanwenderwiki:owncloud:schuljahreswechsel [2023/09/10 16:22] – [Noch nicht gelöschte Accounts anzeigen] tobias
Zeile 1: Zeile 1:
 +{{tag> }}
  
 +====== Schuljahreswechsel nextcloud: Alte Benutzer löschen ======
 +
 +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:
 +
 +  - Backup machen
 +  - Nicht verwendete Accounts anzeigen und durchgehen
 +  - vorsichtig folgendes Skript laufen lassen oder Benutzer manuell löschen
 +
 +===== Backup machen =====
 +[[anwenderwiki:owncloud:migration|Hier]] gibt es eine gute Beschreibung, was man machen kann. Wer einen Cloud-server virtualisiert hat, kann auch diesen backupen.
 +
 +===== Alle Accounts löschen, die nicht mehr in LDAP sind =====
 +
 +  - Der Pfad zur Owncloud/Nextcloud-installation (hier: ''/opt/nextcloud'') muss angepasst werden.
 +  - Der Pfad zu Owncloud/Nextcloud-Daten (hier: ''/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):
 +
 +
 +==== Alle User überprüfen ====
 +
 +Nun habe ich das owncloud-datenverzeichnis (bei mir ''/owncloud-data'') in eine liste gepackt, meines Erachtens die einzige Möglichkeit, alle Nutzernamen zu bekommen:
 +
 +<code>
 +ls /owncloud-data/ | grep -v "\." > /tmp/userlist
 +</code>
 +und dann den check-user-Befehl drauf losgelassen:
 +<code>
 +for i in `cat /tmp/userlist` ; do sudo -u www-data php /opt/nextcloud/occ ldap:check-user "$i"; done
 +</code>
 +Das findet nochmal alle die User, die bisher noch als vorhanden geglaubt wurden.
 +
 +==== Noch nicht gelöschte Accounts anzeigen ====
 +Auf dem Cloudserver folgender Befehl zeigt alle nicht (mehr) in LDAP gefunden User an:
 +<code>
 +sudo -u www-data php /opt/nextcloud/occ ldap:show-remnants
 +</code>
 +
 +Bei mir erscheinen hier auch viele Computerkonten, wenn es die Computer nicht mehr bei linuxmuster.net gibt. z.B:
 +<code>
 +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      |
 ++---------------+--------------------+---------------+---------+---------------+-----+--------+
 +</code>
 +
 +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.
 +
 +==== Accounts manuell löschen ====
 +Die mit ''ldap:show-remnants'' angezeigten Accounts kann man nun händisch löschen.
 +<note important>Achtung
 +
 +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.</note>
 +<code>
 +sudo -u www-data php /opt/nextcloud/occ user:delete zztop
 +</code>
 +===== Accounts per Skript löschen =====
 +Mit folgendem Skript landen alle zu loeschenden User in einer Zwischendatei in ''/tmp/zuloeschendeuser'', die man sich anschauen kann und sollte:
 +<code>
 +sudo -u www-data php /opt/nextcloud/occ ldap:show-remnants  | awk '{print $2}' | sed "2d;/^\s*$/d" > /tmp/zuloeschendeuser
 +</code>
 +bevor man mit dem zweiten Befehl die User tatsächlich löscht.
 +<code>
 +for i in `cat /tmp/zuloeschendeuser`; do echo sudo -u www-data php /opt/nextcloud/occ user:delete "$i"; done
 +</code>
 +
 +<note important>
 +Achtung, dieser Befehl zeigt nur an was getan wird. Für das richtige Löschen, entferne man das "echo" aus der Zeile.</note>
 +
 +----
 +
 +
 +==== Komplettes Skript vom Server aus ====
 +
 +<note important>
 +Achtung, folgendes Skript testet, ob der der server auch "server" heißt. 
 +Ebenso heißt der Server auf dem nextcloud läuft "cleese".
 +Ebenso müssen die Lage der installation und der Daten angepasst werden.
 +Das Skript löscht zudem (nach Entfernen von echo im Befehl echo rm -rf) auch noch User, die nicht mehr in der Datenbank sind, aber noch auf der Platte ein Verzeichnis haben (passierte bei mir vermutlich während Nextcloud 12-13).
 +</note>
 +
 +
 +<code bash update_clouddata.sh>
 +#!/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
 +</code>
 [[anwenderwiki:owncloud:schuljahreswechsel]] anwenderwiki/owncloud/schuljahreswechsel.txt · Zuletzt geändert: 2023/09/10 16:24 von tobias