Maschinenraum/cp.uugrn.org
cp.uugrn.org
| Bereich | Wert |
|---|---|
| Admin-Kontakt | sh[at]uugrn.org |
| Hostname | cp.uugrn.org |
| Aufgabe | Plattform für kollaborative und verschlüsselte Dokumente |
| Produktiv seit | 06.01.2025 |
| Hosting | Hetzner CX22, 2 CPU, 4 GB RAM, 40 GB SSD |
| Betriebssystem | Debian 13.6 (Trixie) |
| CryptPad | v2026.5.1 |
| nginx | 1.30.4 |
| Node.js | 24.18.1 |
Beschreibung
CryptPad ermöglicht die gemeinsame Bearbeitung von Texten, Tabellen, Präsentationen, Kanban-Boards und weiteren Dokumenten. Die Inhalte werden verschlüsselt auf dem Server gespeichert.
Instanz:
Sandbox-Domain:
Diagnose:
Dokumentation und Unterstützung
Betrieb
CryptPad läuft unter dem Benutzer cryptpad.
Installationsverzeichnis:
- /home/cryptpad/cryptpad
Dienste
- CryptPad
- systemctl status cryptpad
- systemctl restart cryptpad
- nginx
- systemctl status nginx
- nginx -t
- systemctl reload nginx
- SSH
- systemctl status ssh
- Firewall
- systemctl status nftables
- nft list ruleset
- Fail2ban
- systemctl status fail2ban
- fail2ban-client status sshd
- Fehlerhafte Dienste
- systemctl --failed
Logs und Diagnose
- CryptPad-Log
- journalctl -u cryptpad -f
- nginx-Log
- journalctl -u nginx -b
- Offene Ports
- ss -lntup
- Aktive TCP-Verbindungen
- ss -ant
- Häufigste IP-Adressen im nginx-Zugriffslog
- awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head
CryptPad kann zur Fehlersuche auch direkt gestartet werden. Zuvor muss der systemd-Dienst gestoppt werden.
- Dienst stoppen
- systemctl stop cryptpad
- Als CryptPad-Benutzer
- su - cryptpad
- cd /home/cryptpad/cryptpad
- npm start
Danach den manuellen Prozess beenden und CryptPad wieder über systemd starten.
- systemctl start cryptpad
SSH
Der direkte SSH-Zugang als root sowie die Passwortanmeldung sind deaktiviert.
Administrativer Benutzer:
- adminBenutzer
Anmeldung:
- ssh -4 -i ~/.ssh/ssh-rsa-private-4096-key adminBenutzer@cp.uugrn.org
Anschließend:
- sudo -i
Wesentliche SSH-Härtung:
- PermitRootLogin no
- PasswordAuthentication no
- KbdInteractiveAuthentication no
- PubkeyAuthentication yes
- AllowGroups sshusers
- LoginGraceTime 30
- MaxAuthTries 3
- MaxStartups 10:30:30
- PerSourceMaxStartups 3
- Konfiguration prüfen
- sshd -t
- Effektive Konfiguration
- sshd -T
Firewall und Fail2ban
Öffentlich erreichbar sind:
| Port | Dienst |
|---|---|
| 22/tcp | SSH |
| 80/tcp | HTTP |
| 443/tcp | HTTPS |
CryptPad selbst ist nur über Loopback erreichbar, unter anderem auf Port 3000 und 3003.
nftables:
- INPUT DROP
- FORWARD DROP
- OUTPUT ACCEPT
Konfiguration:
- /etc/nftables.conf
Fail2ban schützt SSH zusätzlich.
Konfiguration:
- /etc/fail2ban/jail.d/sshd.local
Einstellungen:
- 4 Fehlversuche innerhalb von 10 Minuten
- Sperrdauer 1 Stunde
- Backend systemd
- Sperren über nftables
- usedns = no
Normalerweise sind folgende nftables-Tabellen vorhanden:
- table inet filter
- table inet f2b-table
Nach einem manuellen Neustart von nftables auch Fail2ban neu starten:
- systemctl restart nftables
- systemctl restart fail2ban
Updates
Debian-Sicherheitsupdates werden automatisch über unattended-upgrades installiert.
Nicht automatisch aktualisiert werden:
- normale Debian-Updates
- Node.js / NodeSource
- nginx
- CryptPad
Automatische Neustarts sind deaktiviert.
- Updates prüfen
- apt update
- apt list --upgradable
- Automatische Sicherheitsupdates testen
- unattended-upgrade --dry-run
- Neustartbedarf prüfen
- test -f /var/run/reboot-required && cat /var/run/reboot-required
CryptPad aktualisieren
Vor einem Update:
- Wartungsarbeiten über die üblichen UUGRN-Kanäle ankündigen.
- Release Notes der Zielversion lesen.
- Diagnoseseite prüfen.
- Backup erstellen.
- CryptPad stoppen.
- Update als Benutzer cryptpad durchführen.
- CryptPad starten und testen.
Backup vor dem Update
- /root/sichercp
Update
- CryptPad stoppen
- systemctl stop cryptpad
- Zum CryptPad-Benutzer wechseln
- su - cryptpad
- cd /home/cryptpad/cryptpad
VERSION durch die gewünschte Version ersetzen.
- git fetch --depth 1 origin tag VERSION
- git checkout VERSION
- npm ci
- npm run install:components
OnlyOffice bei Bedarf beziehungsweise entsprechend den Release Notes aktualisieren:
- ./install-onlyoffice.sh
Prüfen, ob sich die Beispielkonfiguration geändert hat:
- diff -u config/config.example.js config/config.js
Danach den CryptPad-Benutzer verlassen:
- exit
CryptPad starten:
- systemctl start cryptpad
- systemctl status cryptpad
Logs prüfen:
- journalctl -u cryptpad -n 100 --no-pager
Anschließend prüfen:
- https://cp.uugrn.org/checkup/
- Anmeldung
- bestehende Pads
- neues Pad
- gemeinsames Bearbeiten
- Datei-Upload
- Dokument, Tabelle und Präsentation mit OnlyOffice
nginx aktualisieren
Vor einer manuellen nginx-Aktualisierung Konfiguration sichern:
- cp -a /etc/nginx /etc/nginx.backup.$(date +%F-%H%M)
Pakete aktualisieren:
- apt update
- apt upgrade
Konfiguration prüfen:
- nginx -t
Bei erfolgreicher Prüfung neu laden:
- systemctl reload nginx
Kontrolle:
- nginx -v
- journalctl -u nginx -b --no-pager
- certbot certificates
- certbot renew --dry-run
Backup
Backup-Skript:
- /root/sichercp
Backup-Verzeichnis:
- /root/backups/
Aufbewahrung:
- 180 Tage
Aktuelle Größe eines Backups:
- ca. 133 MB
Gesicherte CryptPad-Daten
- data/
- datastore/
- block/
- blob/
- config/config.js
- customize/
- onlyoffice-conf/
- package.json
- package-lock.json
Zusätzlich gesichert
- nginx-Konfiguration
- SSH-Konfiguration
- nftables
- Fail2ban
- APT-Konfiguration
- sudo-Konfiguration
- systemd-Konfiguration
- journald-Konfiguration
- Paket- und Versionsinformationen
- Netzwerk- und Routinginformationen
Nicht gesichert
Reproduzierbare große Bestandteile werden nicht gesichert:
- .git/
- node_modules/
- www/
- www/common/onlyoffice/dist/
OnlyOffice und die npm-Abhängigkeiten werden bei einer Neuinstallation erneut installiert.
Backup starten
- /root/sichercp
Backups anzeigen
- ls -lh /root/backups/
Die Backups liegen derzeit ausschließlich lokal auf dem Server. Ein externes Backup sollte ergänzt werden, sobald ein geeignetes Ziel zur Verfügung steht.
Restore
Ein Backup kann ohne Eingriff in das Produktivsystem testweise entpackt werden.
- Neuestes Backup auswählen
- BACKUP=$(ls -1t /root/backups/cp-backup-*.tar.gz | head -1)
- Testverzeichnis erstellen
- mkdir -p /root/restore-test
- Backup entpacken
- tar --acls --xattrs --numeric-owner -C /root/restore-test -xzf "$BACKUP"
Nach der Kontrolle:
- rm -rf /root/restore-test
Notfall-Restore
Bei vollständigem Verlust des Servers:
- Debian 13 installieren.
- Netzwerk und SSH-Zugang einrichten.
- Node.js 24 installieren.
- nginx installieren.
- CryptPad in der passenden Version installieren.
- npm-Abhängigkeiten installieren.
- OnlyOffice installieren.
- CryptPad stoppen.
- Daten aus dem Backup zurückspielen.
- Besitzer cryptpad:cryptpad kontrollieren.
- Serverkonfiguration zurückspielen.
- systemd neu laden.
- nginx, SSH, nftables und Fail2ban prüfen.
- Dienste starten.
- CryptPad vollständig testen.
Installation / Neuaufbau
Dieser Abschnitt dokumentiert den grundlegenden Aufbau des Servers. Bei einer Neuinstallation zusätzlich immer die aktuelle CryptPad-Dokumentation beachten.
Voraussetzungen
Benötigte DNS-Namen:
- cp.uugrn.org
- sandboxcp.uugrn.org
Beide Namen zeigen auf den CryptPad-Server.
Benötigte Software:
- Git
- Node.js mit npm
- nginx
- Certbot
Node.js installieren
Aktuell wird Node.js 24 aus dem NodeSource-Repository verwendet.
- apt install curl ca-certificates gnupg
- curl -fsSL https://deb.nodesource.com/setup_24.x -o nodesource_setup.sh
- bash nodesource_setup.sh
- apt install nodejs
Prüfen:
- node --version
- npm --version
CryptPad-Benutzer anlegen
- useradd -m cryptpad -s /bin/bash
CryptPad läuft ausschließlich unter diesem Benutzer.
CryptPad installieren
Zum Benutzer wechseln:
- su - cryptpad
Repository klonen:
- git clone https://github.com/cryptpad/cryptpad.git cryptpad
- cd cryptpad
Gewünschte Release-Version auschecken:
- git fetch --tags
- git checkout VERSION
Abhängigkeiten installieren:
- npm ci
- npm run install:components
OnlyOffice installieren:
- ./install-onlyoffice.sh
Beispielkonfiguration übernehmen:
- cp config/config.example.js config/config.js
Konfiguration bearbeiten:
- nano config/config.js
Wichtige Domains:
- httpUnsafeOrigin: 'https://cp.uugrn.org'
- httpSafeOrigin: 'https://sandboxcp.uugrn.org'
systemd-Dienst
CryptPad wird über folgende Unit gestartet:
- /etc/systemd/system/cryptpad.service
Nach Anlegen oder Ändern der Unit:
- systemctl daemon-reload
- systemctl enable --now cryptpad
Prüfen:
- systemctl status cryptpad
Die aktuelle Unit enthält zusätzliche systemd-Härtung und sollte bei einem Neuaufbau aus dem Backup übernommen werden.
nginx installieren
nginx wird aus dem offiziellen nginx.org-Repository installiert.
Voraussetzungen:
- apt install curl gnupg2 ca-certificates lsb-release debian-archive-keyring
Signaturschlüssel installieren:
- curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor | tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
Fingerprint prüfen:
- gpg --dry-run --quiet --no-keyring --import --import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg
Erwarteter Fingerprint:
- 573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62
Repository einrichten:
- echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] https://nginx.org/packages/debian trixie nginx" | tee /etc/apt/sources.list.d/nginx.list
nginx.org-Pakete bevorzugen:
- echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" | tee /etc/apt/preferences.d/99nginx
Installieren:
- apt update
- apt install nginx
Aktivieren:
- systemctl enable --now nginx
Prüfen:
- nginx -v
- nginx -t
- systemctl status nginx
TLS / Let's Encrypt
Certbot installieren:
- apt install certbot python3-certbot-nginx
Zertifikat für beide Domains anfordern:
- certbot --nginx certonly -d cp.uugrn.org -d sandboxcp.uugrn.org
Zertifikate liegen unter:
- /etc/letsencrypt/live/cp.uugrn.org/fullchain.pem
- /etc/letsencrypt/live/cp.uugrn.org/privkey.pem
Certbot-Timer prüfen:
- systemctl status certbot.timer
Erneuerung testen:
- certbot renew --dry-run
nginx für CryptPad konfigurieren
Die von CryptPad mitgelieferte Beispielkonfiguration kann als Ausgangspunkt verwendet werden:
- wget https://raw.githubusercontent.com/cryptpad/cryptpad/main/docs/example.nginx.conf -O /etc/nginx/conf.d/cryptpad.conf
Danach insbesondere anpassen:
- Hauptdomain cp.uugrn.org
- Sandbox-Domain sandboxcp.uugrn.org
- Pfade der Let's-Encrypt-Zertifikate
- interne CryptPad-Ports
Vor jeder Aktivierung:
- nginx -t
Danach:
- systemctl reload nginx
Die aktuelle produktive nginx-Konfiguration befindet sich im Backup und sollte bei einem Wiederaufbau bevorzugt verwendet werden.
CryptPad-Anpassungen
Lokale Anpassungen gehören nach:
- /home/cryptpad/cryptpad/customize/
Nicht direkt customize.dist oder Programmdateien verändern.
Beispiel:
- su - cryptpad
- cd /home/cryptpad/cryptpad
- cp customize.dist/application_config.js customize/application_config.js
- nano customize/application_config.js
Für die bisherige Instanz wurden unter anderem Einstellungen für den Gastzugriff verwendet:
- AppConfig.disableAnonymousStore = true;
- AppConfig.disableAnonymousPadCreation = false;
Nach Änderungen:
- systemctl restart cryptpad
Danach die Funktion im Browser prüfen.
Aufräumjobs
CryptPad enthält Skripte zum Aufräumen inaktiver und archivierter Dokumente.
Vorhandene Crontab prüfen:
- crontab -u cryptpad -l
In der ursprünglichen Installation wurden folgende Jobs verwendet:
- 30 1 1,15 * * (cd /home/cryptpad/cryptpad; node scripts/evict-inactive.js > /dev/null)
- 30 1 7,22 * * (cd /home/cryptpad/cryptpad; node scripts/evict-archived.js > /dev/null)
Vor einer Neuinstallation prüfen, ob diese Jobs von der aktuell eingesetzten CryptPad-Version weiterhin empfohlen werden.
CryptPad-Administrator einrichten
Zunächst ein normales CryptPad-Benutzerkonto anlegen.
In den Benutzereinstellungen den öffentlichen Schlüssel des Kontos kopieren.
Konfiguration bearbeiten:
- /home/cryptpad/cryptpad/config/config.js
Den Schlüssel unter adminKeys eintragen, beispielsweise:
- adminKeys: [
- "[cryptpad-user@cp.uugrn.org/ÖFFENTLICHER-SCHLÜSSEL]",
- ],
CryptPad anschließend neu starten:
- systemctl restart cryptpad
Administrationsoberfläche:
Dort können unter anderem Registrierung und Benutzerverwaltung konfiguriert werden.
Wichtige Pfade
| Bereich | Pfad |
|---|---|
| CryptPad | /home/cryptpad/cryptpad |
| CryptPad-Konfiguration | /home/cryptpad/cryptpad/config/config.js |
| Anpassungen | /home/cryptpad/cryptpad/customize/ |
| nginx | /etc/nginx/ |
| SSH | /etc/ssh/ |
| Firewall | /etc/nftables.conf |
| Fail2ban | /etc/fail2ban/ |
| systemd-Unit | /etc/systemd/system/cryptpad.service |
| Backup-Skript | /root/sichercp |
| Backups | /root/backups/ |
Regelmäßige Kontrolle
- Dienste
- systemctl --failed
- Ports
- ss -lntup
- Firewall
- nft list ruleset
- Fail2ban
- fail2ban-client status sshd
- Updates
- apt list --upgradable
- Speicherplatz
- df -h
- CryptPad-Daten
- du -sh /home/cryptpad/cryptpad/data /home/cryptpad/cryptpad/datastore /home/cryptpad/cryptpad/block /home/cryptpad/cryptpad/blob
- Backups
- du -sh /root/backups
- Warnungen
- journalctl -p warning..alert --since today
```