
Ich habe ein Java-Programm, mit dem ich den Prozess der Erstellung von VPN-Einstellungen für Clients automatisiere. Das Programm ruft einige Bash-Skripte auf, erstellt und kopiert Dateien. Ich muss es als Root-Benutzer ausführen, da sich die gesamte VPN-Konfiguration unter /etc/openvpn befindet. Für dieses Verzeichnis benötige ich Root-Berechtigungen. Auf derselben Maschine habe ich den Glassfish-Anwendungsserver, der das erwähnte Java-Programm aufruft. Glassfish wird als Nicht-Root-Benutzer ausgeführt.
Was ist die beste und sicherste Möglichkeit, ein Programm als Root-Benutzer auszuführen (natürlich ohne Eingabe eines Kennworts), wenn ich es über sudo ausführe?
Antwort1
Die sicherste Option wäre, herauszufinden, welcher Gruppe OpenVPN gehört, und einen nicht privilegierten Benutzer mit Zugriff darauf hinzuzufügen.Die empfohlene Methode besteht darin, einen OpenVPN-Benutzer zu erstellen, und erteilen Sie ihm mit sudo die Berechtigung, OpenVPN zu verwenden.
Das Hinzufügen des Benutzers, unter dem Sie dieses Programm ausführen, zur Gruppe (wahrscheinlich nur mit Lesezugriff), um ihm Zugriff auf OpenVPN zu gewähren, und das Erteilen der erforderlichen Sudo-Berechtigungen (zum Ausführen von OpenVPN – identische Einstellungen wie die, die der OpenVPN-Benutzer verwendet) sollte den Zweck sicher erfüllen.
Die Verwendung von Root ist ein einfacher Weg ;)
Antwort2
Ich habe herausgefunden, dass es zwei Möglichkeiten gibt, einen Befehl als „sudo“ auszuführen, ohne das Passwort einzugeben:
- echo PASSWORT | sudo -S BEFEHL
Hinzufügen der folgenden Zeile zu /etc/sudoers
Benutzername ALL=(ALL) NOPASSWD: BEFEHL
Beachten Sie, dass diese Zeile nach allen Gruppendefinitionen stehen muss. Sie können überprüfen, welche Sudo-Berechtigungen Sie haben, indem Sie verwenden sudo -l
. Für diesen Fall ergibt dies:
(ALL) ALL
(ALL) NOPASSWD: COMMAND
Das bedeutet, dass für alle Befehle außer dem Befehl ein Passwort erforderlich ist. Wenn wir es username ALL=(ALL) NOPASSWD: COMMAND
vor Gruppendefinitionen setzen würden sudo -l
, ergäbe sich:
(ALL) NOPASSWD: COMMAND
(ALL) ALL
Dies würde dennoch ein Passwort für den BEFEHL erfordern, da (ALL) ALL
es nach der Zeile NOPASSWD angegeben wird.