Bash-Skripting: Skript muss als Root ausgeführt werden (oder mit sudo)

Bash-Skripting: Skript muss als Root ausgeführt werden (oder mit sudo)

Ich versuche, ein Bash-Skript (in Ubuntu) zu schreiben, das ein Verzeichnis mit Tar sichert.

Wie kann ich im Skript eine Prüfung durchführen, sodass es nur als Root (bzw. mit sudo) ausgeführt werden kann?

Wenn ein Benutzer beispielsweise das Skript ausführt, sollte angegeben werden, dass dieses Skript mit Sudo-Berechtigungen ausgeführt und dann beendet werden muss. Wenn das Skript als Root ausgeführt wird, wird es nach der Prüfung fortgesetzt.

Ich weiß, dass es eine einfache Lösung geben muss, ich konnte sie nur beim Googeln nicht finden.

Antwort1

Um die effektive UID abzurufen, verwenden Sie diesen Befehl:

id -u

Wenn das Ergebnis „0“ ist, wird das Skript entweder als Root ausgeführt oder verwendet sudo. Sie können die Prüfung folgendermaßen ausführen:

if [[ $(/usr/bin/id -u) -ne 0 ]]; then
    echo "Not running as root"
    exit
fi

Antwort2

Ich gehe davon aus, dass Sie wissen, dass durch die Änderung des Eigentümers auf root

chown root:root file

und die Berechtigungen auf 700 setzen

chmod 700 file

Sie erreichen dasselbe – ohne den Vorschlag, als sudo auszuführen.

Der Vollständigkeit halber werde ich diese Antwort jedoch veröffentlichen.

Antwort3

Die Bash-Variable $EUIDzeigt die effektive UID, unter der das Skript ausgeführt wird. Wenn Sie sicherstellen möchten, dass das Skript als Root ausgeführt wird, überprüfen Sie, ob $EUIDder Wert 0 enthalten ist oder nicht:

if [[ $EUID -ne 0 ]]; then
    echo "$0 is not running as root. Try using sudo."
    exit 2
fi

Dies ist besser als die Lösung mit /usr/bin/id(für Bash-Skripte!), da kein externer Befehl erforderlich ist.

Antwort4

Was ist hier Ihr Ziel: den Benutzer darüber zu informieren, dass er das Skript als Root ausführen soll, oder als eine Art Sicherheitsvorkehrung?

Wenn Sie den Benutzer lediglich informieren möchten, sind alle UID-Vorschläge in Ordnung, aber als Sicherheitsvorkehrung sind sie so nützlich wie Reifen für ein Pferd – nichts hindert einen Benutzer daran, das Skript zu kopieren, die if-Anweisung herauszunehmen und es trotzdem auszuführen.

Wenn dies ein Sicherheitsproblem ist, sollte das Skript auf 700 gesetzt werden und Eigentum von root:root sein, sodass es von keinem anderen Benutzer gelesen oder ausgeführt werden kann.

verwandte Informationen