Maschinenraum/cp.uugrn.org
cp.uugrn.org[Bearbeiten]
| 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[Bearbeiten]
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[Bearbeiten]
Betrieb[Bearbeiten]
CryptPad läuft unter dem Benutzer cryptpad.
Installationsverzeichnis:
- /home/cryptpad/cryptpad
Dienste[Bearbeiten]
- 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[Bearbeiten]
- 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[Bearbeiten]
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[Bearbeiten]
Ö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[Bearbeiten]
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[Bearbeiten]
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[Bearbeiten]
- /root/sichercp
Update[Bearbeiten]
- 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[Bearbeiten]
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[Bearbeiten]
Backup-Skript:
- /root/sichercp
Backup-Verzeichnis:
- /root/backups/
Aufbewahrung:
- 180 Tage
Aktuelle Größe eines Backups:
- ca. 133 MB
Gesicherte CryptPad-Daten[Bearbeiten]
- data/
- datastore/
- block/
- blob/
- config/config.js
- customize/
- onlyoffice-conf/
- package.json
- package-lock.json
Zusätzlich gesichert[Bearbeiten]
- nginx-Konfiguration
- SSH-Konfiguration
- nftables
- Fail2ban
- APT-Konfiguration
- sudo-Konfiguration
- systemd-Konfiguration
- journald-Konfiguration
- Paket- und Versionsinformationen
- Netzwerk- und Routinginformationen
Nicht gesichert[Bearbeiten]
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[Bearbeiten]
- /root/sichercp
Backups anzeigen[Bearbeiten]
- 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[Bearbeiten]
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[Bearbeiten]
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[Bearbeiten]
Dieser Abschnitt dokumentiert den grundlegenden Aufbau des Servers. Bei einer Neuinstallation zusätzlich immer die aktuelle CryptPad-Dokumentation beachten.
Voraussetzungen[Bearbeiten]
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[Bearbeiten]
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[Bearbeiten]
- useradd -m cryptpad -s /bin/bash
CryptPad läuft ausschließlich unter diesem Benutzer.
CryptPad installieren[Bearbeiten]
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[Bearbeiten]
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[Bearbeiten]
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[Bearbeiten]
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[Bearbeiten]
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[Bearbeiten]
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[Bearbeiten]
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[Bearbeiten]
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[Bearbeiten]
| 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[Bearbeiten]
- 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
```