Ausführen eines Dienstes als Root

Ausführen eines Dienstes als Root

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: COMMANDvor 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) ALLes nach der Zeile NOPASSWD angegeben wird.

verwandte Informationen