Im Zuge einer Überarbeitung meiner VPN-Firewall-Gateway-VM stolperte ich wieder über den Routing-Activator. Dieses kleine Script macht nichts anderes, als das externe VPN-Netzwerk über eine Gateway-VM zu routen. Da jedoch route
zwingend root-Rechte benötigt, musste ich bei jedem VPN-Aufbau (sprich: Starten der VPN-Gateway-VM) oder einem Netzwerk-Neustart ein sudo /path/to/your/script
via Terminal abfeuern – inklusive lästiger Passworteingabe.
Okay. Gehen wir das Problem an!
Das eigentliche Problem ist, das route
nur als superuser ausgeführt werden darf. Für solche Fälle gibt es die sudoers-Datei, welche in Kurzform beschreibt, welche User welche Befehle als superuser ausführen dürfen. In der Regel landen dort manchmal Services (wenn ein Service bspw. zwar als Superuser gestartet werden muss, aber eigentlich im Kontext eines normalen Benutzers läuft und gesteuert wird) oder bestimmte Systembefehle.
Nun könnte man natürlich route für den eigenen Benutzer komplett freischießen, aber dann gelte dieser Freibrief für alle Prozesse. Nein, das will man auch nicht. Eigentlich soll ja nur die eine Route erlaubt werden. Und da praktischerweise diese Konfiguration bereits als ein Script – /path/to/your/script
– vorliegt, wird einfach dieses dort eingetragen. Dabei sind jedoch einige Vorsichtsmaßnahmen zu treffen.
- Mit dem Befehl
sudo visudo
öffnet man eine spezielle Instanz von vi zum Editieren der sudoers. - Ganz am Ende trägt man eine weitere Zeile an (man kann sich an den Beispielen orientieren): Damit erlaubt man dem Benutzer USER das Ausführen des definierten Commands ohne Passwortabfrage.
Sollte das Script natürlich woanders liegen, so muss das angepasst werden (irgendwie klar, oder?) Man kann auch andere Muster (beispielsweise ganze Gruppen) oder andere Modi wählen (siehe dazu _man sudoers_).
Wichtig: Um jegliches Sicherheitsrisiko zu vermeiden, sollte man unbedingt das Script danach abschotten. Dazu werden die Rechte auf das mindeste entfernt.
sudo chmod -w /path/to/your/script
entfernt für alle Benutzer das Schreibrecht (muss man es dennoch editieren, geht es mit sudo vi und einem abschließenden :wq! natürlich dennoch).sudo chown root /path/to/your/script
übertragt das Script dem Root-Benutzer, um eine nachträgliche Rechte-Änderung ohne Passwort zu verhindern.
Fertig. Das Script kann nun mit
sudo /path/to/your/script
nun mit Rechten des superuser gestartet werden (ohne Passwort) und ist gleichzeitig ohne administrative Rechte nicht mehr änderbar.