Server Tools: Sicherheit und Schutzmechanismen
Sicherheit und Schutzmechanismen von Server Tools: Eingabevalidierung je Typ, Backups vor dem Löschen und was sie nicht abdecken, Rollbacks, Dateirechte, Audit-Log, Passwörter und Grenzen.
Sicherheit und Schutzmechanismen
Server Tools läuft als root und verändert das System. Diese Seite beschreibt, was das Tool absichert und was nicht.
graph LR
A["Eingabe validieren"] --> B["Konfiguration sichern"]
B --> C["Rückfrage"]
C --> D["Änderung ausführen"]
D --> E["Konfigurationstest und Reload"]
E --> F["Audit-Log"]
E -->|"Fehler"| G["Rollback"]
Nicht jede Operation durchläuft alle Stufen. Welche, steht auf den Seiten der jeweiligen Befehle.
Eingabevalidierung
Jede Eingabe wird vor der Verwendung gegen ein festes Muster geprüft. Bei einem Fehler ändert das Tool nichts.
| Typ | Regel |
|---|---|
| Domain | Labels aus Buchstaben, Ziffern und - (je 1 bis 63 Zeichen), Endung nur aus Buchstaben, mindestens 2. Ein Name wie localhost ist gültig, eine IP-Adresse nicht |
| Datenbankname | a-z A-Z 0-9 _ -, 1 bis 64 Zeichen |
| User-Name (MySQL) | a-z A-Z 0-9 _ -, 1 bis 32 Zeichen |
| Linux-User | Kleinbuchstaben, Ziffern, _, -, beginnt mit Buchstabe oder _, höchstens 32 Zeichen. Bestehende Accounts mit UID unter 1000 werden abgelehnt |
| Pfad (DocumentRoot) | Wird mit realpath aufgelöst und muss unter einem Eintrag von ST_ALLOWED_DOCROOT_PATHS liegen. .. und Symlinks werden vorher aufgelöst |
lokal@host.tld mit üblichen Zeichen |
|
| Passwort | Mindestlänge ST_PASSWORD_MIN_LENGTH |
| PHP-Version | 7.4, 8.0, 8.1, 8.2, 8.3 oder 8.4 |
| Cron-Schedule | Fünf Felder aus Ziffern und * / , - |
| Port | Ganzzahl von 1 bis 65535 |
| Protokoll | tcp oder udp |
| IP-Adresse | IPv4, jedes Oktett 0 bis 255 |
| URL | http:// oder https://, Host, optional Port. Der Teil ab dem ersten / wird nicht weiter geprüft |
| SSH-Schlüssel | Eine Zeile, 40 bis 8192 Zeichen, Typ ssh-rsa, ssh-ed25519, ecdsa-sha2-nistp256/384/521 oder FIDO (sk-) |
Zusätzlich gilt:
- MySQL-Namen werden in Backticks gesetzt und escaped, Zeichensatz und Kollation müssen aus
A-Za-z0-9_bestehen. - Cron-Befehle: höchstens 500 Zeichen, druckbar, ohne Zeilenumbruch.
- Der DNS-Provider muss auf der Liste der unterstützten Provider stehen, wenn das Plugin installiert werden soll.
Backups vor dem Löschen
Mit ST_AUTO_BACKUP=true legt das Tool vor dem Löschen eine .tar.gz-Datei (Rechte 600) in ST_BACKUP_DIR (Rechte 700) an:
| Operation | Gesichert | Dateiname |
|---|---|---|
db delete |
Credential-Datei der Datenbank | db_<name>_<zeitstempel>.tar.gz |
vhost delete |
VHost-Konfigurationsdatei | vhost_<domain>_<zeitstempel>.tar.gz |
Das Backup entsteht vor der Rückfrage, auch wenn du danach abbrichst. Schlägt es fehl, fragt das Tool Continue without backup?.
Nicht gesichert werden der Inhalt einer Datenbank, das DocumentRoot und die Logs einer Domain, die
-le-ssl.conf, die Logrotate-Datei, Cron-Dateien, SSH-Schlüssel und Zertifikate. Alte Backups werden nicht automatisch gelöscht.
Rollbacks
| Operation | Bei Fehler |
|---|---|
db create |
Schlägt das Anlegen des Users fehl, wird die Datenbank wieder gelöscht. Schlägt das Vergeben der Rechte fehl, bleiben Datenbank und User bestehen |
| Datenbank neu zuweisen (Menü) | Der alte User bekommt seine Rechte zurück |
vhost create |
Schlägt der Reload fehl, wird der Site deaktiviert. Dateien bleiben |
vhost php |
Die alte Konfigurationsdatei wird wiederhergestellt und neu geladen |
| www- und HTTPS-Weiterleitung (Menü) | Die alte Konfigurationsdatei wird wiederhergestellt |
user create |
Der User wird gelöscht, ein neu angelegtes .ssh entfernt |
Bei VHost-Änderungen läuft vor dem Apache- oder Nginx-Reload ein Konfigurationstest (apache2ctl configtest bzw. nginx -t). Besteht er nicht, wird nicht neu geladen. Ausnahmen sind das direkte systemctl reload apache2 bei "Recreate all certificates" im Menü und im erzeugten ssl-renewal.sh. Beide laden ohne vorherigen Konfigurationstest neu.
Dateien und Rechte
| Datei | Rechte |
|---|---|
| Credential-Dateien | 600 (oder 400 per ST_CREDENTIAL_FILE_PERMISSIONS) |
| Audit-Log | 600 |
| Backup-Verzeichnis, Dump-Verzeichnis | 700 |
| Backups, Dumps, Exporte | 600 |
Config /etc/server-tools/config |
600 bei Installation, Prüfung beim Laden |
| VHost-Konfigurationen | 640 (Redirect-VHosts 644) |
| Logrotate-Dateien, Cron-Dateien | 644 |
| Installierte Binary | 700 |
Das Tool schreibt Dateien mit Rechten über eine temporäre Datei und benennt sie danach um. Ein Symlink als Ziel wird abgelehnt.
Beim Laden der Config-Datei prüft es Eigentümer und Rechte, siehe Konfiguration. Die Options-Datei für MySQL erzeugt eine Warnung, wenn ihre Rechte nicht 600 oder 400 sind.
Passwörter
- Erzeugte Passwörter stammen aus
openssl rand -base64 32, bereinigt um=,+und/. - Sie werden nur auf einem Terminal angezeigt, nicht in Pipes oder Scripten.
- Übergibst du ein Passwort per
--password, ist es während des Aufrufs in der Prozessliste sichtbar und landet in der Shell-History. - Beim Anlegen eines MySQL-Users steht das Passwort als Teil der SQL-Anweisung kurzzeitig in den Argumenten des
mysql-Prozesses. user set-passwordlehnt Passwörter mit Doppelpunkt ab.
Audit-Log
Das Tool protokolliert Anlegen, Löschen und Ändern mit Zeitstempel, ausführendem User und Aktion in ST_AUDIT_LOG, siehe Firewall, Fail2Ban, Logs und Status. Das Log wird nicht rotiert oder gekürzt.
Installer-Schutz
uninstalllöscht das Library-Verzeichnis nur, wenn dortcore.shundinstall.shliegen, und entfernt Shortcuts nur, wenn sie auf die eigene Binary zeigen.installbricht ab, wenn es aus der installierten Kopie heraus läuft.
Was das Tool nicht schützt
- Mit
--yesentfallen alle Rückfragen. Besondersvhost deletelöscht damit bei VHosts mit DocumentRoot das Verzeichnis/var/www/<domain>,vhost createüberschreibt bestehende VHosts undcron removelöscht jede passende Datei. - Wer die Config-Datei schreiben kann, führt Code als root aus.
- Die SSH-User-Isolation beruht auf ACLs, nicht auf chroot, siehe SSH-User.
- Das Tool setzt keine Firewall-Regel für SSH und prüft vor
firewall-Änderungen nichts.