SSH als Ersatztechnik für Sudo
(whynothugo.nl)Ziel
- Nur berechtigte Benutzer sollen Befehle mit root-Rechten ausführen können
- Keine Privilegieneskalation verwenden
Umsetzung
-
Einen dedizierten SSH-Schlüssel erzeugen und für die root-Authentifizierung verwenden
mkdir /root/.ssh/ echo ssh-ed25519 AAAAC3Nza... > /root/.ssh/local_keys -
Eine
sshd-Serverinstanz starten, die an ein Unix-Domain-Socket gebunden istmkdir /run/sshd/ chown root:wheel /run/sshd/ chmod 750 /run/sshd/ s6-ipcserver /run/sshd/sshd.sock sshd -ie -o AuthorizedKeysFile=/root/.ssh/local_keys -o PermitRootLogin=yes -
Das root-Konto sperren und die Anmeldung per Passwort deaktivieren
# Root-Passwort in der Datei /etc/passwd ändern -
Die Option
ProxyCommandverwenden, um sich mit der lokalensshd-Instanz zu verbindenssh -o ProxyCommand='socat STDIO UNIX-CONNECT:/run/sshd/sshd.sock' \ -i .ssh/root-key.pub \ -t \ root@root \ "cd $(pwd); '$SHELL' --login" -
Ein Skript schreiben, das mit der Option
ProxyUseFdpassden Socket-Dateideskriptor übergibt#!/usr/bin/env python3 import sys import socket import array s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) s.connect("/run/sshd/sshd.sock") fds = array.array("i", [s.fileno()]) ancdata = [(socket.SOL_SOCKET, socket.SCM_RIGHTS, fds)] socket.socket(fileno=1).sendmsg([b'\0'], ancdata) -
Abschließend den
ssh-Befehl ausführenssh -o ProxyCommand='/home/hugo/tmp/passfd.py' \ -i .ssh/root-key.pub \ -o ProxyUseFdpass=yes \ -t \ root@root \ "cd $(pwd); '$SHELL' --login"
Fazit
- Diese Technik nutzt OpenSSH, um die Sicherheitsdetails zu handhaben
- Unterstützt verschiedene Authentifizierungsmethoden, einschließlich hardwarebasierter SSH-Schlüssel
- Die Einrichtung auf neuen Hosts ist nicht kompliziert
- Das Skript
passfd.pyist eine provisorische Lösung für Experimente; für den täglichen Einsatz wäre ein kleines ausführbares Programm besser
Meinung von GN⁺
- Diese Methode kann als Alternative zu
sudooderdoasdie Sicherheit erhöhen - Der Ansatz, SSH zur Stärkung der Authentifizierung zu verwenden, unterstützt verschiedene Authentifizierungsmethoden einschließlich hardwarebasierter Authentifizierung
- Die Systemkonfiguration ist vergleichsweise einfach, sodass auch Einsteiger unter den Engineers sie leicht nachvollziehen können
- Wenn man das Skript
passfd.pyals kleines ausführbares Programm erstellt und in/usr/local/binablegt, ist die Nutzung bequemer - Diese Methode funktioniert nur lokal ohne Netzwerkanbindung nach außen und bietet daher hohe Sicherheit
1 Kommentare
Hacker-News-Kommentare
Zusätzliche Komplexität: Statt einer bestehenden einzelnen SUID-Binärdatei werden zwei Binärdateien benötigt, die als Root laufen und UNIX-Sockets verwenden. Das erhöht die Komplexität, einschließlich asymmetrischer kryptografischer Operationen.
Systemsicherheit: Wenn man die
sudo-Binärdatei auf eine bestimmte Gruppe (wheel) beschränkt und die Berechtigungen anpasst, kann man ein ähnliches Sicherheitsniveau wie beimsshd-Ansatz beibehalten. Falls der System-Paketmanager diesudo-Berechtigungen beschädigt, kann man sie regelmäßig percronreparieren odersudodirekt aus dem Quellcode installieren.run0von systemd: Das Toolrun0von systemd funktioniert ähnlich wiesudo, ist aber kein SUID. Stattdessen wird der Service-Manager aufgefordert, den Befehl auszuführen. Das verhält sich eher wiessh.Vergleich von
sshundsudo: Es ist fraglich, ob ein Root-Login übersshsicherer ist alssudo. Es braucht eine Diskussion darüber, wie sich der Zugriff entfernter Benutzer aufsshdunterbinden lässt. Verglichen mit den Einschränkungen vonsudokönnte derssh-Ansatz verwundbarer sein.Probleme mit Netzwerkdiensten: Wenn
sshbeim Booten nicht startet, ist auch eine Konsolenanmeldung unmöglich. Das kann mehr Probleme verursachen alssudoodersu.Ein
systemd run0ähnlicher Ansatz: Es gibt einen Ansatz, der dem Toolrun0von systemd ähnelt.Feingranulare Kontrolle mit
sudo:sudokann Befehle und Argumente sowie das Erzeugen von Subshells im Detail steuern. Ein neuer Ansatz verliert diese feingranulare Kontrolle, und vertrauenswürdiges Schlüsselmanagement wird schwieriger.SSH-Konsolenkonfiguration: Eine Methode, den Root-Zugriff über eine dedizierte SSH-Konsole zu verwalten. Mit Yubikey und Firewall-Konfigurationen wird die Sicherheit erhöht.
Grenzen des SSH-Protokolls: SSH umfasst Prozesserzeugung nicht als Teil des Protokolls und kann keine lokalen Ressourcen an Kindprozesse weiterreichen. Um es als Ersatz für
sudozu verwenden, wäre eine Erweiterung ähnlichPOSIX spawnnötig.Benutzerverwaltung: Es ist wichtig, Benutzer nicht wie kleine Kinder zu behandeln, sondern vernünftige Standardwerte zu setzen, um potenzielle Probleme zu vermeiden. Wenn Root-Zugriff nötig ist, ist eine Anmeldung über die Konsole wünschenswert.
Probleme im Einzelbenutzermodus: Wenn man sich im Einzelbenutzermodus nicht als Root anmelden kann, wird die Systemwiederherstellung schwierig. Das ist nötig, um Probleme zu beheben, die während System-Upgrades auftreten können.