Benutzer und Gruppen
owncloud.online verwaltet Konten und Gruppen in der Weboberfläche unter
Einstellungen → Benutzer und auf der Kommandozeile über occ. Beide Wege
schreiben in dieselben Tabellen, es gibt keine getrennten Datenbestände. Diese
Seite beschreibt, was ein Konto ausmacht, wie Gruppen und
Gruppen-Administratoren wirken, wie Speicherkontingente aufgelöst werden und was
beim Löschen eines Kontos tatsächlich passiert.
Die Verwaltungsseite
Der Menüpunkt Benutzer (/settings/users) erscheint für Administratoren und
für Gruppen-Administratoren (lib/private/legacy/app.php). Links steht die
Gruppenliste mit den Einträgen Jeder, Administratoren, den vorhandenen
Gruppen und Gruppe hinzufügen; rechts das Anlegeformular und die Kontenliste.
Jeder ist keine Gruppe, sondern ein Filter über alle Konten
(data-gid="_everyone" in settings/templates/users/part.grouplist.php).
Welche Spalten die Kontenliste zeigt, steuern die Ankreuzfelder unter
Einstellungen am unteren Rand der linken Spalte. Jedes davon schreibt einen
App-Konfigurationswert der App core:
| Ankreuzfeld | Schlüssel (App core) |
Standard |
|---|---|---|
| Option Aktiviert/Deaktiviert anzeigen | umgmt_show_is_enabled |
false |
| Speicherort anzeigen | umgmt_show_storage_location |
false |
| Erstellungszeitpunkt anzeigen | umgmt_show_creation_time |
false |
| Letzte Anmeldung anzeigen | umgmt_show_last_login |
false |
| Benutzer-Backend anzeigen | umgmt_show_backend |
false |
| E-Mail-Adresse anzeigen | umgmt_show_email |
false |
| Passwort für neue Nutzer anlegen | umgmt_set_password |
false |
| Passwortfeld anzeigen | umgmt_show_password |
true |
| Kontingent-Feld anzeigen | umgmt_show_quota |
true |
Die Werte gelten instanzweit, nicht pro Administrator. Sie lassen sich auch direkt setzen:
sudo -u www-data php8.4 occ config:app:set core umgmt_show_last_login --value true
Anmeldename und Anzeigename
Ein Konto hat zwei Namen, die oft verwechselt werden.
| Anmeldename (uid) | Anzeigename | |
|---|---|---|
| Zweck | Identität des Kontos: Anmeldung, Name des Home-Verzeichnisses, Eigentümer von Dateien und Freigaben | Beschriftung in der Oberfläche, Freigabedialog, E-Mails |
| Spalte in der Liste | Benutzername | Vollständiger Name |
| Änderbar | nein | ja |
| Eindeutig | ja | nein |
Der Anmeldename wird beim Anlegen geprüft (lib/private/User/Manager.php):
erlaubt sind a-z, A-Z, 0-9 sowie +_.@-', mindestens 3 und höchstens 64
Zeichen; führende oder abschließende Leerzeichen werden abgewiesen. Umlaute und
andere Sonderzeichen sind nicht zulässig. Die Zeichenklasse lässt zusätzlich das
Leerzeichen innerhalb des Namens durch, obwohl die Fehlermeldung es nicht nennt
— vermeiden Sie es trotzdem.
Reserviert und damit als Anmeldename gesperrt sind die Namen, die im
Datenverzeichnis neben den Konten liegen (lib/public/User/Constants.php):
avatars, meta, files_external, files_encryption, .htaccess,
.ocdata, htaccesstest.txt, owncloud.db, owncloud.log, index.html.
Es gibt keinen Weg, den Anmeldenamen später zu ändern — weder in der Oberfläche
noch als occ-Befehl. Wer umbenennen muss, legt ein neues Konto an und zieht
die Daten mit files:transfer-ownership um (siehe unten).
Anzeigenamen sind nicht eindeutig: zwei Konten dürfen denselben vollständigen
Namen tragen. Steht allow_user_to_change_display_name in config/config.php
auf false, dürfen nur Administratoren und Gruppen-Administratoren den
Anzeigenamen ändern, normale Konten nicht mehr
(lib/private/User/User.php, canChangeDisplayName).
Konten anlegen
In der Oberfläche füllen Sie Benutzername und je nach Einstellung Passwort
oder E-Mail aus und wählen optional Gruppen. Passwortfeld und E-Mail-Feld
schließen einander aus: Ist Passwort für neue Nutzer anlegen gesetzt, wird das
E-Mail-Feld ausgeblendet und umgekehrt (settings/js/users/users.js).
Bleibt das Passwort leer und ist eine E-Mail-Adresse angegeben, erzeugt der
Server ein Zufallspasswort und verschickt eine Einladung mit einem Link zum
Setzen des Passworts (settings/Controller/UsersController.php, create).
Ohne funktionierenden Mailversand kommt diese Nachricht nicht an, und das Konto
bleibt unbenutzbar.
Auf der Kommandozeile:
# interaktiv, mit Passwortabfrage
sudo -u www-data php8.4 occ user:add jdoe
# nicht-interaktiv, Passwort aus der Umgebung
OC_PASS='Beispielpasswort' sudo -u www-data php8.4 occ user:add jdoe \
--password-from-env \
--display-name "Jane Doe" \
--email jane.doe@example.com \
--group projekt-a --group vertrieb
user:add legt in --group genannte Gruppen an, falls sie noch nicht
existieren. Ohne --password-from-env und ohne interaktive Sitzung bricht der
Befehl ab, weil er kein Passwort erfragen kann.
Beim ersten Anmelden wird das Home-Verzeichnis aus dem Vorlagenordner befüllt
(skeletondirectory, siehe Konfiguration).
Konten ändern
Anzeigename und E-Mail-Adresse ändern Sie in der Liste über die Stiftsymbole neben Vollständiger Name und E-Mail oder auf der Kommandozeile:
sudo -u www-data php8.4 occ user:modify jdoe displayname "Jane Doe"
sudo -u www-data php8.4 occ user:modify jdoe email jane.doe@example.com
user:modify kennt genau diese beiden Schlüssel (displayname, email); eine
ungültige E-Mail-Adresse wird abgewiesen.
Passwort zurücksetzen:
# neues Passwort direkt setzen
OC_PASS='NeuesPasswort' sudo -u www-data php8.4 occ user:resetpassword jdoe \
--password-from-env
# stattdessen einen Rücksetz-Link erzeugen und anzeigen
sudo -u www-data php8.4 occ user:resetpassword jdoe --output-link
# Rücksetz-Link an die hinterlegte Adresse schicken (und ausgeben)
sudo -u www-data php8.4 occ user:resetpassword jdoe --send-email
Ist die App encryption aktiv, warnt der interaktive Modus ausdrücklich: Ein
Zurücksetzen des Passworts führt dann zu Datenverlust, sofern kein
Wiederherstellungsschlüssel greift. Siehe
Verschlüsselung.
Einzelne Kontoeinstellungen lesen und schreiben:
# alle Einstellungen eines Kontos
sudo -u www-data php8.4 occ user:setting jdoe
# nur die einer App
sudo -u www-data php8.4 occ user:setting jdoe core
# einzelnen Wert lesen, setzen, löschen
sudo -u www-data php8.4 occ user:setting jdoe core lang
sudo -u www-data php8.4 occ user:setting jdoe core lang --value de
sudo -u www-data php8.4 occ user:setting jdoe core lang --delete
--update-only schreibt nur, wenn der Schlüssel schon existiert;
--error-if-not-exists lässt --delete fehlschlagen, wenn nichts zu löschen
war; --default-value liefert beim Lesen einen Ersatzwert statt eines Fehlers.
Konten deaktivieren
Ein deaktiviertes Konto kann sich nicht mehr anmelden — weder über die
Weboberfläche noch über die Authentifizierungsmodule für WebDAV und Clients
(lib/private/User/Session.php). Dateien, Freigaben und Gruppenmitgliedschaften
bleiben unverändert bestehen. Das ist der richtige Schritt für Austritte,
Verdachtsfälle und alles, was reversibel bleiben soll.
sudo -u www-data php8.4 occ user:disable jdoe
sudo -u www-data php8.4 occ user:enable jdoe
In der Oberfläche geschieht das über die Spalte Aktiviert, die zuvor über Option Aktiviert/Deaktiviert anzeigen eingeblendet werden muss. Das eigene Konto lässt sich dort weder deaktivieren noch löschen.
Kandidaten finden:
# Konten, die sich seit 180 Tagen nicht angemeldet haben
sudo -u www-data php8.4 occ user:inactive 180
# letzte Anmeldung eines einzelnen Kontos
sudo -u www-data php8.4 occ user:lastseen jdoe
Konten löschen
Das Löschen ist endgültig. In der Oberfläche fragt vorher ein Dialog nach
(settings/js/users/users.js: „All user data, files and shares will be
deleted"), occ user:delete löscht ohne Rückfrage. lib/private/User/User.php
(delete) und die daran hängenden Hooks entfernen:
| Was | Wirkung |
|---|---|
| Gruppenmitgliedschaften | Konto wird aus allen Gruppen entfernt |
| Gruppen-Administratorrechte | Einträge in group_admin fallen weg (lib/private/SubAdmin.php) |
| Kontoeinstellungen | alle Werte des Kontos in preferences |
| Externer Speicher | persönliche Einbindungen werden gelöscht; aus globalen Einbindungen wird das Konto ausgetragen — war es der einzige Berechtigte, fällt die Einbindung ganz weg (lib/private/Files/External/Service/GlobalStoragesService.php) |
| Home-Verzeichnis | wird vollständig entfernt — samt Papierkorb und Dateiversionen |
| Kommentare | Beiträge und Lesemarken des Kontos |
| Konto- und Account-Datensatz | zuletzt, damit ein abgebrochener Lauf wiederholbar bleibt |
Bei den Freigaben greift OC\Share20\Hooks::post_deleteUser
(lib/private/Share20/Hooks.php). Gelöscht werden:
- Benutzer-Freigaben, die dem Konto gehören oder an das Konto gingen,
- Gruppen-Freigaben, die dem Konto gehören, sowie dessen persönliche Ableitungen von Gruppen-Freigaben,
- öffentliche Links, die das Konto besitzt oder angelegt hat,
- Freigaben an entfernte Instanzen
(
apps/federatedfilesharing/lib/FederatedShareProvider.php) und die von dort empfangenen Einbindungen (apps/files_sharing/lib/Hooks.php,deleteUser).
Ein Empfänger verliert damit sofort den Zugriff auf alles, was das gelöschte Konto geteilt hatte. Sollen Daten erhalten bleiben, übertragen Sie sie vor dem Löschen:
sudo -u www-data php8.4 occ files:transfer-ownership jdoe jsmith
sudo -u www-data php8.4 occ user:delete jdoe
files:transfer-ownership verschiebt Dateien und Ordner und nimmt die Freigaben
mit; --path grenzt auf einen Unterordner ein.
Bleibt nach einem gescheiterten Lauf ein verwaister Datenbestand zurück, räumt
sudo -u www-data php8.4 occ user:delete jdoe --force
auch dann auf, wenn das Konto selbst nicht mehr auffindbar ist.
Gruppen
Gruppen dienen der Rechtevergabe und dem Teilen. Sie werden über die linke Spalte der Verwaltungsseite oder auf der Kommandozeile gepflegt:
sudo -u www-data php8.4 occ group:add projekt-a
sudo -u www-data php8.4 occ group:add-member projekt-a -m jdoe -m jsmith
sudo -u www-data php8.4 occ group:list-members projekt-a
sudo -u www-data php8.4 occ group:remove-member projekt-a -m jsmith
sudo -u www-data php8.4 occ group:delete projekt-a
Zwei Eigenheiten sind wichtig:
- Die Gruppe
administ geschützt und lässt sich nicht löschen (lib/private/Group/Group.php). Wer in ihr Mitglied ist, ist Administrator der Instanz. - Gruppen lassen sich nicht umbenennen. Der Gruppenname ist zugleich die
Kennung; es gibt weder einen
occ-Befehl noch eine Schaltfläche dafür.
Beim Löschen einer Gruppe entfernt der Server alle Freigaben an diese Gruppe
mitsamt den daraus abgeleiteten persönlichen Freigaben der Mitglieder
(lib/private/Share20/DefaultShareProvider.php, groupDeleted). Wird nur ein
Mitglied aus der Gruppe entfernt, bleibt die Gruppen-Freigabe bestehen; nur der
Zugang dieses einen Kontos verschwindet.
Gruppen-Administratoren
Ein Gruppen-Administrator verwaltet die Konten seiner Gruppen, ohne Administrator der Instanz zu sein. Zuweisen können Sie ihn nur in der Oberfläche, in der Spalte Gruppenadministrator für — die Spalte erscheint nur für echte Administratoren.
Der Rahmen ergibt sich aus lib/private/SubAdmin.php und
settings/Controller/UsersController.php:
| Darf | Darf nicht |
|---|---|
| Konten in den eigenen Gruppen anlegen, ändern, deaktivieren und löschen | Konten außerhalb der eigenen Gruppen anfassen |
| Speicherkontingente dieser Konten setzen | Administratoren bearbeiten |
Anzeigenamen dieser Konten ändern, auch wenn allow_user_to_change_display_name auf false steht |
überhaupt Gruppen-Administratoren ernennen — der Endpunkt settings/ajax/togglesubadmins.php verlangt Administratorrechte |
Legt ein Gruppen-Administrator ein Konto ohne Gruppenangabe an, landet es automatisch in seinen eigenen Gruppen.
Das ganze Verfahren lässt sich abschalten. Mit
'allow_subadmins' => false,
in config/config.php gilt niemand mehr als Gruppen-Administrator; nur echte
Administratoren behalten Zugriff auf die Verwaltungsseite.
Zum Prüfen, wer wo Mitglied ist:
sudo -u www-data php8.4 occ user:list-groups jdoe
Speicherkontingent
Das Kontingent hängt am Konto, nicht an der Gruppe. Ein Kontingent je Gruppe gibt es in owncloud.online nicht; wer nach Abteilungen staffeln will, setzt den Wert je Konto oder arbeitet mit dem Standardwert.
Aufgelöst wird in dieser Reihenfolge (lib/private/legacy/util.php,
getUserQuota):
- der Wert am Konto, sofern er nicht
defaultist, - sonst
default_quotader Appfiles, - ist auch dieser
none, gilt kein Limit.
Zwei App-Konfigurationswerte steuern die Auswahllisten:
| Schlüssel | App | Standard | Bedeutung |
|---|---|---|---|
default_quota |
files |
none |
Vorgabe für alle Konten, die auf Standard stehen |
quota_preset |
files |
1 GB, 5 GB, 10 GB |
Werte, die im Auswahlfeld angeboten werden |
sudo -u www-data php8.4 occ config:app:set files default_quota --value "10 GB"
sudo -u www-data php8.4 occ config:app:set files quota_preset --value "1 GB, 5 GB, 10 GB, 100 GB"
Das Kontingent eines einzelnen Kontos setzen Sie in der Spalte Quota: neben
Standard und Unbegrenzt stehen die Vorgabewerte und Andere … für eine
freie Eingabe wie 512 MB oder 12 GB. Gespeicherte Werte prüfen Sie mit:
sudo -u www-data php8.4 occ user:list --attributes uid --attributes quota
Benutzerdefinierte Gruppen
Die App customgroups ergänzt die zentral gepflegten Gruppen um Gruppen, die
Konten selbst anlegen — gedacht zum Teilen, nicht zur Rechtevergabe. Sie liegen
unter Einstellungen → Benutzerdefinierte Gruppe; im Freigabedialog erscheinen
sie wie normale Gruppen.
Innerhalb einer solchen Gruppe gibt es zwei Rollen: Gruppenbesitzer darf Mitglieder aufnehmen und entfernen, umbenennen, löschen und Rollen vergeben; Mitglied darf mit der Gruppe teilen, die Mitgliederliste sehen und die Gruppe verlassen. Administratoren sehen und ändern alle benutzerdefinierten Gruppen.
Zwei Schalter unter Einstellungen → Administration → Teilen (im SaaS-Bundle
ist dieses Admin-Panel ausgeblendet, dort führt nur der occ-Weg zum Ziel):
| Ankreuzfeld | Schlüssel (App customgroups) |
Standard |
|---|---|---|
| Nur Gruppen-Administratoren sind berechtigt benutzerdefinierte Gruppen zu erstellen | only_subadmin_can_create |
false |
| Das Erstellen von mehreren Gruppen mit dem selben Namen erlauben | allow_duplicate_names |
false |
sudo -u www-data php8.4 occ config:app:set customgroups only_subadmin_can_create --value true
Ist shareapi_only_share_with_group_members der App core aktiv, kann ein
Mitglied nur Konten aufnehmen, mit denen es mindestens eine Gruppe teilt
(lib/Service/MembershipHelper.php der App).
Wichtig für die Fehlersuche: Das Gruppen-Backend der App meldet sich nur für den
Bereich „sharing" zuständig (isVisibleForScope). Benutzerdefinierte Gruppen
erscheinen deshalb nicht in occ group:list und nicht in
occ user:list-groups, obwohl es echte Gruppen mit dem Kennungspräfix
customgroup_ sind.
Das Repository der App: https://github.com/BWTECH-github/customgroups.
occ-Befehle im Überblick
| Befehl | Argumente und Optionen |
|---|---|
user:add |
uid; --password-from-env, --display-name, --email, -g/--group (mehrfach) |
user:delete |
uid; -f/--force |
user:disable / user:enable |
uid |
user:modify |
uid key value — Schlüssel: displayname, email |
user:resetpassword |
user; --password-from-env, --send-email, --output-link |
user:setting |
uid [app] [key]; --value, --update-only, --delete, --error-if-not-exists, --default-value, --ignore-missing-user |
user:list |
[suchmuster]; -a/--attributes (mehrfach), -s/--show-all-attributes, --output |
user:list-groups |
uid; --output |
user:lastseen |
uid |
user:inactive |
days; --output |
user:report |
keine |
user:sync |
[backend-class]; -l/--list, -u/--uid, -s/--seenOnly, -c/--showCount, -m/--missing-account-action (disable, remove), -r/--re-enable |
user:home:list-dirs |
--output |
user:home:list-users |
[path]; --all, --output |
user:move-home |
user_id new_location |
group:add |
group |
group:delete |
group |
group:add-member |
group; -m/--member (mehrfach) |
group:remove-member |
group; -m/--member (mehrfach) |
group:list |
[suchmuster]; --output |
group:list-members |
group; --output |
--output versteht plain (Vorgabe), json und json_pretty. Für user:list
sind als Attribute möglich: uid, displayName, email, quota, enabled,
lastLogin, creationTime, home, backend, cloudId, searchTerms; ohne
Angabe wird displayName ausgegeben.
Ein Überblick über den Bestand:
sudo -u www-data php8.4 occ user:report
sudo -u www-data php8.4 occ user:list --show-all-attributes --output json_pretty
user:sync gleicht die Konten eines Backends mit der accounts-Tabelle ab;
--list zeigt die dafür in Frage kommenden Backend-Klassen. Achtung:
--missing-account-action remove löscht Konten samt Daten, sobald sie im
Backend fehlen — im Zweifel disable wählen und die Liste erst prüfen.
Fehlersuche
| Symptom | Ursache | Abhilfe |
|---|---|---|
occ user:add bricht mit „Interactive input or --password-from-env is needed" ab |
Aufruf ohne Terminal, etwa aus einem Skript | OC_PASS setzen und --password-from-env angeben |
| Anmeldename mit Umlaut oder anderem Sonderzeichen wird abgewiesen | Zeichenprüfung in lib/private/User/Manager.php |
nur a-z, A-Z, 0-9, +_.@-', 3 bis 64 Zeichen verwenden |
| Neues Konto bekommt keine Einladungsmail | bei gesetztem Passwort für neue Nutzer anlegen wird das E-Mail-Feld ausgeblendet — oder der Mailversand ist nicht eingerichtet | Ankreuzfeld abwählen; SMTP prüfen, siehe Linux-Server |
| Konto gelöscht, Dateien und Freigaben sind weg | user:delete entfernt Home-Verzeichnis, Papierkorb, Versionen und alle Freigaben |
vorher files:transfer-ownership; Wiederherstellung nur aus dem Backup |
Benutzerdefinierte Gruppe fehlt in occ group:list und occ user:list-groups |
das Backend ist nur für den Bereich „sharing" sichtbar | über Einstellungen → Benutzerdefinierte Gruppe prüfen |
| Gruppe soll umbenannt werden | Gruppenname ist die Kennung, es gibt keine Umbenennung | neue Gruppe anlegen, Mitglieder und Freigaben umziehen, alte löschen |
occ group:delete admin schlägt fehl |
die Gruppe admin ist fest geschützt |
Mitglieder einzeln entfernen |
| Spalte Gruppenadministrator für fehlt | die Spalte wird nur für echte Administratoren gerendert (settings/users.php, part.userlist.php) |
als Administrator anmelden |
| Konto kann seinen Anzeigenamen nicht ändern | allow_user_to_change_display_name steht auf false |
Wert entfernen oder Änderung durch einen Administrator vornehmen |
occ user:setting <uid> files quota --value "5 GB" bleibt wirkungslos |
maßgeblich ist der Wert am Konto in der accounts-Tabelle; die Einstellung wird erst bei einem Abgleich des Kontos ausgewertet |
Kontingent in der Spalte Quota setzen und mit occ user:list -a uid -a quota prüfen |
| Passwort zurückgesetzt, Dateien nicht mehr lesbar | die App encryption war aktiv |
Wiederherstellungsschlüssel verwenden, siehe Verschlüsselung |
| Deaktiviertes Konto belegt weiter Speicher | Deaktivieren löscht nichts, es sperrt nur die Anmeldung | Daten übertragen und Konto löschen |