Benutzer-Umbenennung fuer Kerio Connect
Benennt einen Benutzer vollstaendig um: Login-Name und voller Name ueber die Administration API, dazu das Mailbox-Verzeichnis im Store auf der Platte. Kerio zieht das Verzeichnis beim Aendern des Login-Namens nicht mit, sodass der Benutzer sonst eine leere Mailbox vorfindet. Ablauf: Vorpruefungen (Benutzer vorhanden, neuer Name frei, kein LDAP-Benutzer, Verzeichnis vorhanden und Ziel frei, gleiches Dateisystem, Dienst steuerbar), dann Users.set, Dienst stoppen, Verzeichnisse verschieben, Dienst starten. Verschoben werden mail/ und archive/. Scheitert das Verschieben, werden bereits verschobene Verzeichnisse zurueckgenommen und der Login-Name zurueckgesetzt, damit Konfiguration und Platte konsistent bleiben. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,117 @@
|
||||
# kerio-connect-rename-user
|
||||
|
||||
Benennt einen Benutzer in Kerio Connect vollständig um — Login-Name in der
|
||||
Serverkonfiguration **und** das zugehörige Mailbox-Verzeichnis im Store.
|
||||
|
||||
## Warum
|
||||
|
||||
Kerio Connect legt die Mailbox eines Benutzers unter
|
||||
|
||||
```
|
||||
<store>/mail/<domain>/<loginname>/
|
||||
```
|
||||
|
||||
ab. Ändert man den Login-Namen über die Administration API oder die
|
||||
Admin-Konsole, zieht dieses Verzeichnis nicht mit — der Benutzer findet danach
|
||||
eine leere Mailbox vor, während die alten Daten unter dem alten Verzeichnisnamen
|
||||
liegenbleiben. Typischer Anlass: Heirat oder ein anderer Namenswechsel.
|
||||
|
||||
Dieses Script erledigt beide Hälften in der richtigen Reihenfolge.
|
||||
|
||||
## Voraussetzungen
|
||||
|
||||
- Python 3.9 oder neuer, nur Standardbibliothek — keine Pakete zu installieren
|
||||
- Läuft **lokal auf dem Kerio-Server als root** (Dateisystemzugriff + Dienstkontrolle)
|
||||
- Administration API erreichbar (Standard: `https://localhost:4040/admin/api/jsonrpc/`)
|
||||
|
||||
## Ablauf
|
||||
|
||||
1. **Vorprüfungen**, bevor irgendetwas geschrieben wird:
|
||||
- Domain und Benutzer über die API auflösen
|
||||
- Benutzer aus einem Verzeichnisdienst (LDAP/AD)? → Abbruch, denn der Name
|
||||
gehört dann dem Verzeichnisdienst
|
||||
- neuer Login-Name noch frei?
|
||||
- Mailbox-Verzeichnis vorhanden, Zielname noch nicht belegt,
|
||||
Quelle und Ziel auf demselben Dateisystem?
|
||||
- ist der Dienst überhaupt steuerbar?
|
||||
2. Plan ausgeben. `--dry-run` endet hier, sonst Rückfrage (`--yes` überspringt).
|
||||
3. `Users.set` setzt `loginName` und optional `fullName`.
|
||||
4. Kerio-Dienst stoppen und warten, bis er wirklich unten ist.
|
||||
5. Verzeichnisse per `os.rename` verschieben (`mail/`, und `archive/` falls vorhanden).
|
||||
6. Dienst wieder starten.
|
||||
|
||||
Schlägt Schritt 5 fehl, werden bereits verschobene Verzeichnisse zurückgenommen
|
||||
und der Login-Name in Kerio auf den alten Wert zurückgesetzt — Konfiguration und
|
||||
Platte bleiben konsistent.
|
||||
|
||||
## Benutzung
|
||||
|
||||
```bash
|
||||
# Erst ansehen, was passieren würde (braucht kein root):
|
||||
./kerio_rename_user.py \
|
||||
--admin admin \
|
||||
--domain firma.de \
|
||||
--old-login anna.mueller \
|
||||
--new-login anna.schmidt \
|
||||
--full-name "Anna Schmidt" \
|
||||
--dry-run
|
||||
|
||||
# Dann wirklich:
|
||||
sudo -E ./kerio_rename_user.py \
|
||||
--admin admin \
|
||||
--domain firma.de \
|
||||
--old-login anna.mueller \
|
||||
--new-login anna.schmidt \
|
||||
--full-name "Anna Schmidt"
|
||||
```
|
||||
|
||||
Das Passwort kommt aus der Umgebungsvariablen `KERIO_ADMIN_PASSWORD` oder wird
|
||||
interaktiv abgefragt — nicht über die Kommandozeile, sonst landet es in der
|
||||
Shell-History. (`sudo -E` reicht die Variable durch.)
|
||||
|
||||
Nur den angezeigten Namen ändern, ohne Login und Verzeichnis anzufassen:
|
||||
|
||||
```bash
|
||||
./kerio_rename_user.py --admin admin --domain firma.de \
|
||||
--old-login anna.mueller --full-name "Anna Schmidt"
|
||||
```
|
||||
|
||||
## Optionen
|
||||
|
||||
| Option | Bedeutung |
|
||||
| --- | --- |
|
||||
| `--server`, `--port` | Admin-API, Standard `localhost:4040` |
|
||||
| `--admin`, `--password` | Admin-Zugang; besser `KERIO_ADMIN_PASSWORD` |
|
||||
| `--domain` | Mail-Domain, z. B. `firma.de` |
|
||||
| `--old-login`, `--new-login` | Login-Namen ohne `@domain` |
|
||||
| `--full-name` | Neuer angezeigter Name |
|
||||
| `--store-dir` | Store-Pfad, Standard `/opt/kerio/mailserver/store` |
|
||||
| `--service-name` | Dienstname, Standard `kerio-connect` |
|
||||
| `--service-manager` | `auto`, `systemd`, `initd` oder `none` |
|
||||
| `--service-wait` | Sekunden Wartezeit aufs Stoppen, Standard 90 |
|
||||
| `--dry-run` | Nur anzeigen |
|
||||
| `--yes` | Rückfrage überspringen |
|
||||
| `--force` | Auch bei LDAP-/AD-Benutzern versuchen |
|
||||
| `--insecure` | TLS-Zertifikat nicht prüfen (selbstsigniert) |
|
||||
|
||||
`--service-manager none` fasst den Dienst nicht an — dafür muss Kerio dann
|
||||
selbst gestoppt sein, bevor das Script läuft.
|
||||
|
||||
## Hinweise
|
||||
|
||||
- **Vorher ein Backup des Stores anlegen.** Das Script verschiebt Verzeichnisse.
|
||||
- Erst an einem Testbenutzer ausprobieren.
|
||||
- Der Benutzer sollte während des Laufs nicht angemeldet sein.
|
||||
- Nach der Umbenennung müssen sich alle Mail-Clients des Benutzers mit dem neuen
|
||||
Login neu anmelden.
|
||||
- Die alte Adresse wird bewusst **nicht** als Alias angelegt. Wer möchte, dass
|
||||
Mail an die alte Adresse weiterhin ankommt, legt den Alias anschließend in der
|
||||
Admin-Konsole an.
|
||||
- Weitere Adressen am Benutzer (`emailAddresses`) bleiben unverändert und werden
|
||||
im Plan zur Kontrolle mit angezeigt.
|
||||
|
||||
## API-Referenz
|
||||
|
||||
- [Administration API for Kerio Connect — Users](https://manuals.gfi.com/en/kerio/api/connect/admin/reference/interfacekerio_1_1jsonapi_1_1admin_1_1_users.html)
|
||||
- [Sample communication (Session.login, X-Token)](https://manuals.gfi.com/en/kerio/api/connect/admin/reference/sample_communication.html)
|
||||
- [User struct](https://manuals.gfi.com/en/kerio/api/connect/admin/reference/structkerio_1_1jsonapi_1_1admin_1_1_user.html)
|
||||
Reference in New Issue
Block a user