ich bin gerade dabei, mir ein Tool zu schnitzen, mit dem ich mehrere Server und Jails bequem vom heimischen Rechner aus konfigurieren und verwalten kann [1]. Der Zugang zum entfernten System soll dabei über SSH erfolgen; allerdings stellt sich hier jetzt die Frage nach der Sicherheit eines solchen Zugangs.
Bisher gibt es auf meinen Servern einen "normalen" User, und nur dieser darf sich per SSH einloggen. root-Rechte erwirbt dieser normalerweise, indem er su nutzt. Aus praktischen Erwägungen heraus lässt sich diese Vorgehensweise nicht nachbilden, was auch mit dem Aufbau des SSH-Protokolls zusammenhängt: Jeder Befehl wird in einem neuen Channel abgefeuert; der Kontext bleibt also nur erhalten, wenn gleich der erste Befehl selbst einen Kontext herstellt, in dem dann alles weitere geschieht (z. B. eine Shell, was sich dann von außen nur schwer bis gar nicht skripten lässt).
Ich sehe daher drei theoretisch mögliche Vorgehensweisen:
- Anders als bisher darf root sich doch direkt per SSH einloggen, natürlich beschränkt auf Public Key Authentication
- Es darf sich weiterhin nur ein normaler User einloggen; dieser darf aber sudo ohne Passworteingabe nutzen
- Es darf sich weiterhin nur ein normaler User einloggen; dieser spawnt als erstes eine Shell, in deren Kontext dann alles weitere abläuft.
Pro a: Einfach umzusetzen, PubKey sehr schwer zu knacken
Contra a: root ist ein bekannter Account => minimaler Vorteil bei einem Brute Force Angriff
Pro b: Immer noch relativ einfach umzusetzen, PubKey sehr schwer zu knacken, kein bekanntes User-Handle
Contra b: sudo ohne Passwort-Schutz => wer in den Account reinkommt, ist faktisch root
Pro c: PubKey sehr schwer zu knacken, kein bekanntes User-Handle, selbst bei erfolgreichem Einbruch noch keine root-Rechte
Contra c: Sehr komplex (und damit fehleranfällig) in der Umsetzung, root-Passwort muss irgendwie lokal gespeichert werden
Momentan tendiere ich zu Variante a., da ich den tatsächlichen Sicherheitsgewinn der Varianten b. und c. als sehr gering einschätze - wie seht Ihr das? Habe ich ggf. etwas übersehen?
[1] https://github.com/daemotron/controlbeast