Wie überprüft man, ob es in einem Bash-Skript als root läuft?
Ich Schreibe ein Skript, das benötigt root-Berechtigungen, und ich will es so machen, dass wenn das Skript nicht als root laufen, es ist einfach echo "Bitte als root ausführen." und beendet sich.
Hier einige pseudocode für das, was ich Suche:
if (whoami != root)
then echo "Please run as root"
else (do stuff)
fi
exit
Wie könnte ich am besten (sauber und sicher) dies erreichen? Danke!
Ah, nur zur Klarstellung: das (Zeugs) Teil beinhalten würde Befehle ausführen, die in-und-von sich selbst benötigen root. So läuft es wie ein normaler user würde nur kommen mit einer Fehlermeldung. Dies ist nur gedacht, um sauber ein Skript ausführen, müssen Sie über root-Befehle ohne die Verwendung von sudo im script, ich bin gerade auf der Suche für einige syntaktische Zucker.
InformationsquelleAutor der Frage Nathan | 2013-08-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
$EUID-Umgebung variable enthält den aktuellen Benutzer die UID. Root die UID 0 ist. So verwenden Sie in Ihrem Skript:
InformationsquelleAutor der Antwort ptierno
In einem bash-Skript haben Sie mehrere Möglichkeiten, um zu überprüfen, ob die Laufenden Benutzer ist root.
Als Warnungnicht überprüfen, wenn ein Benutzer ist root, indem Sie mit der
root
Benutzername. Nichts garantiert, dass der Benutzer mit der ID 0 genannt wirdroot
. Es ist eine sehr starke Konvention, die weitgehend gefolgt, aber niemanden umbenennen kann der superuser ein anderer name.Ich denke, der beste Weg, wenn Sie bash ist die Verwendung
$EUID
aus der man-page:Dies ist ein besserer Weg, als
$UID
was verändert werden könnte und spiegeln nicht die wirklichen Benutzer der das Skript ausführt.Einer Art, wie ich Ansatz, dass die Art von problem wird durch die Injektion
sudo
in meine Befehle, wenn Sie nicht als root laufen. Hier ist ein Beispiel:Diesem Wege mein Befehl ausgeführt wird, wird durch die Wurzel bei der Verwendung der superuser oder durch
sudo
bei der Ausführung durch einen normalen Benutzer.Wenn Ihr Skript immer ausgeführt werden, indem root einfach die Rechte entsprechend (
0500
).InformationsquelleAutor der Antwort sberder
oder
🙂
InformationsquelleAutor der Antwort Dale_Reagan
Einige Antworten gegeben worden, aber es scheint, dass die beste Methode zu verwenden ist:
id -u
Dies erscheint zuverlässiger als die anderen Methoden, und es scheint, dass es wieder eine id von 0, selbst wenn das Skript ausgeführt wird, durch
sudo
.InformationsquelleAutor der Antwort Nathan
Als @wrikken erwähnt in seinem Kommentar,
id -u
ist eine viel bessere check für den root.Zusätzlich mit der richtigen Verwendung
sudo
hätte Sie das script überprüfen und sehen, wenn es als root läuft. Wenn nicht, haben Sie es erinnern sich übersudo
und dann mit root-rechten läuft.Je nachdem, was das Skript tut, ist eine weitere option kann die Aufstellung eines
sudo
Eintritt für was auch immer spezialisierte Befehle, die das Skript benötigt.InformationsquelleAutor der Antwort Jeremy J Starcher
Es ist eine einfache Prüfung, die für einen Benutzer root.
Den
[[ stuff ]]
syntax ist die standardisierte Art und Weise der Ausführung der Prüfung in der bash.Dies setzt auch Voraus, dass Sie verlassen wollen, mit einer 1, wenn Sie scheitern. Die
error
Funktion ist etwas flair, stellt die Ausgabe von text auf rot (nicht notwendig, aber ziemlich Edel, wenn Sie mich Fragen).InformationsquelleAutor der Antwort Slater Victoroff
0 - Lesen Sie die offizielle GNU-Linux-Dokumentation, es gibt viele Möglichkeiten, es zu tun korrekt.
1 - stellen Sie sicher, Sie setzen die shell-Signatur zur Vermeidung von Fehlern in der interpretation:
2 - dies ist mein Skript
InformationsquelleAutor der Antwort Sergio Abreu
Sehr einfache Weise setzen Sie einfach:
Der Vorteil dieser statt
id
ist, dass Sie können überprüfen, ob ein bestimmter nicht-root-Benutzer ausgeführt wird, den Befehl, zu; zB.InformationsquelleAutor der Antwort Matthew Trotter
Wenn das Skript wirklich benötigt root-Zugriff, dann die Datei-Berechtigungen sollte das widerspiegeln. Mit einem root-Skript ausführbar, indem Sie nicht-root-Benutzer wäre eine rote fahne. Ich möchte Sie ermutigen, nicht, um den Zugriff mit einem
if
überprüfen.InformationsquelleAutor der Antwort John Kugelman
versuchen Sie den folgenden code:
ODER
InformationsquelleAutor der Antwort MLSC
id -u
ist viel besser alswhoami
da einige Systeme wie android nicht das Wort root.Beispiel:
InformationsquelleAutor der Antwort Smeterlink
Einen einfachen Weg, um das Skript nur von root ausführbar ist, starten Sie das Skript mit der Zeile:
#!/bin/su root
InformationsquelleAutor der Antwort alexandre1985
Check für den root-Benutzer, exit, wenn nicht:
Dann gibt es auch whoami und 'wer bin ich', wenn Sie wissen möchten, wer Sie angerufen hat ein Skript Verse, die derzeit ein Skript:
(sehen, dass auch mit sudo aufgerufen, es gibt die Anwender-id)
Daher
InformationsquelleAutor der Antwort Mike Q
InformationsquelleAutor der Antwort Pramod Kharade