Server Tools: SSH-User
SSH-User pro Domain mit Server Tools: Anlegen mit ACL-Rechten, SSH-Schlüssel und Passwort, Auflisten, Info und Löschen, welche Rechte gesetzt werden und welche Grenzen die Isolation hat.
SSH-User
Die User-Verwaltung legt pro Domain einen Systemuser an, der per SSH auf die Dateien dieser Domain zugreift. Mehrere Entwickler teilen sich den User und tragen jeweils einen eigenen Schlüssel ein.
Das Modell ist 1:1: Ein User gehört zu genau einer Domain. Als Domain-User erkennt das Tool jeden Account mit einem Home-Verzeichnis unter /var/www/ und einer UID ab 1000. Die Domain ergibt sich aus dem Verzeichnisnamen.
Die user-Befehle brauchen weder Apache noch Nginx auf dem Server. Sie benötigen setfacl und getfacl aus dem Paket acl.
User anlegen
server-tools user create --domain example.com --username exampledev
Voraussetzungen, in dieser Reihenfolge geprüft:
--domainist ein gültiger Domainname.--usernameist ein POSIX-Name: Kleinbuchstaben, Ziffern,_und-, beginnt mit Buchstabe oder_, höchstens 32 Zeichen. Ein bereits vorhandener Account mit UID unter 1000 wird abgelehnt.- Das Verzeichnis
/var/www/<domain>existiert und ist kein Symlink. setfaclundgetfaclsind installiert undgetfacl /var/wwwfunktioniert, das Dateisystem unterstützt also ACLs.- Die Domain hat noch keinen User und der Username ist noch nicht vergeben.
- Gibt es für die Domain keine Apache-Konfiguration
<domain>.conf, warnt das Tool und fragtContinue without vhost?. Das gilt auch mitST_WEBSERVER=nginx. ST_USER_DEFAULT_SHELList ein absoluter, ausführbarer Pfad. Steht er nicht in/etc/shells, gibt es eine Warnung.
Danach legt das Tool den User mit useradd an (Home /var/www/<domain>, ohne Home-Verzeichnis anzulegen, Kommentar server-tools domain user for <domain>), erstellt .ssh und setzt die Rechte. Schlägt .ssh oder die ACL-Einrichtung fehl, wird der User wieder gelöscht und ein neu angelegtes .ssh entfernt.
Der neue User hat kein Passwort und keinen Schlüssel. Setze beides, wie unten beschrieben.
Rechte
| Pfad | Eigentümer | Zusätzliche Rechte |
|---|---|---|
/var/www/<domain>/html |
User (rekursiv, inklusive Gruppe gleichen Namens) | ACL www-data: rwX, auch als Default für neue Dateien |
/var/www/<domain>/logs |
bleibt www-data |
ACL <user>: rX, auch als Default |
/var/www/<domain>/.ssh |
User, Rechte 700 | authorized_keys mit 600 |
html und logs müssen unter /var/www/<domain> bereits existieren, sonst scheitert die ACL-Einrichtung und der User wird zurückgenommen. Ein DocumentRoot an anderer Stelle, das du mit vhost create --docroot gewählt hast, erfasst das Tool nicht.
Das Tool verwendet ACLs statt chroot. Es ändert nur die Rechte unter
/var/www/<domain>. Der User hat eine normale Login-Shell und sieht alles, was das System für andere lesbar lässt. DocumentRoots, die das Tool anlegt, haben Rechte 755, andere Domains sind für ihn also lesbar.
SSH-Schlüssel hinzufügen
server-tools user add-key --username exampledev --key "ssh-ed25519 AAAAC3Nza... dev@laptop"
Erlaubt sind ssh-rsa, ssh-ed25519, ecdsa-sha2-nistp256, ecdsa-sha2-nistp384, ecdsa-sha2-nistp521 und die FIDO-Varianten mit Präfix sk-. Der Schlüssel muss eine einzelne Zeile mit 40 bis 8192 Zeichen sein. Eine identische Zeile, die schon in authorized_keys steht, wird nicht doppelt eingetragen.
Das Tool prüft, dass der Account existiert und keine UID unter 1000 hat. Es prüft nicht, ob es ein Domain-User ist. Die Datei authorized_keys liegt im Home-Verzeichnis des Accounts.
Passwort setzen
server-tools user set-password --username exampledev
server-tools user set-password --username exampledev --password 'ein-langes-passwort'
Ohne --password erzeugt das Tool ein Passwort mit ST_PASSWORD_LENGTH Zeichen. Es wird nur angezeigt, wenn stdout ein Terminal ist. In Scripten ist ein erzeugtes Passwort daher nicht abrufbar. Übergib es dort mit --password. Eigene Passwörter brauchen mindestens ST_PASSWORD_MIN_LENGTH Zeichen und dürfen keinen Doppelpunkt enthalten.
Auflisten und Info
server-tools user list
server-tools user info --username exampledev
list zeigt Username, Domain und Shell aller Domain-User. info zeigt Username, Domain, UID, Home, Shell, den Kommentar, die Anzahl der Schlüssel in authorized_keys und ob html dem User gehört und eine www-data-ACL trägt.
User löschen
server-tools user delete --username exampledev
Der Account muss ein Home unter /var/www/ haben. Nach der Rückfrage passiert dies:
- Die ACLs werden entfernt und
htmlwird rekursiv anwww-datazurückgegeben. Die User-ACL auflogswird entfernt. - Das Verzeichnis
/var/www/<domain>/.sshwird samt allen Schlüsseln gelöscht. - Alle Prozesse des Users werden beendet (SIGTERM, nach einer Sekunde SIGKILL, höchstens fünf weitere Sekunden Wartezeit).
userdelohne-r.
Dateien in html bleiben erhalten. Erst danach lässt sich der VHost der Domain mit vhost delete löschen.