.png)
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 $EUID
zeigt 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 $EUID
der 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.