437 Stimmen

Wie man in einem Bash-Skript überprüft, ob man als Root läuft

Ich schreibe ein Skript, das Root-Berechtigungen erfordert, und ich möchte es so machen, dass es einfach "Bitte als Root ausführen" ausgibt und beendet, wenn das Skript nicht als Root ausgeführt wird.

Hier ist etwas Pseudocode für das, was ich suche:

if (whoami != root)
  then echo "Bitte als Root ausführen"

  else (Aktionen ausführen)
fi

exit

Wie könnte ich das am besten (sauber und sicher) umsetzen? Vielen Dank!

Ach, um es klarzustellen: Der Teil (Aktionen ausführen) würde das Ausführen von Befehlen erfordern, die selbst Root-Rechte benötigen. Das Ausführen als normaler Benutzer würde also einfach einen Fehler verursachen. Dies soll nur dazu dienen, ein Skript sauber auszuführen, das Root-Befehle erfordert, ohne sudo im Skript zu verwenden. Ich suche nur etwas syntaktischen Zucker.

38voto

Slater Victoroff Punkte 20536

Es gibt eine einfache Überprüfung darauf, ob der Benutzer root ist.

# Erstklassige rote Fehlerfunktion mit `stderr`-Umleitung mit `exit`.
error ()
{
    { printf '\E[31m'; echo "$@"; printf '\E[0m'; } >&2
    exit 1
}

# Test für Root-Benutzer.
if [ "$EUID" -eq 0 ]; then
    error "Führen Sie dies nicht als Root-Benutzer aus"
fi

Dies setzt auch voraus, dass Sie mit einem Exit-Code von 1 fehlschlagen möchten. Die error-Funktion ist eine kleine Spielerei, die den Ausgabetext rot macht (nicht notwendig, aber ziemlich schick, wenn Sie mich fragen).

30voto

Jeremy J Starcher Punkte 22465

Wie @wrikken in seinen Kommentaren erwähnt hat, ist id -u eine viel bessere Überprüfung auf root.

Zusätzlich könnten Sie mit der richtigen Verwendung von sudo das Skript überprüfen und sehen, ob es als root läuft. Wenn nicht, lassen Sie es sich über sudo selbst aufrufen und dann mit Root-Rechten ausführen.

Je nachdem, was das Skript macht, könnte eine andere Option sein, einen sudo-Eintrag für die spezialisierten Befehle einzurichten, die das Skript benötigen könnte.

14voto

Sergio Abreu Punkte 2326

1- Lesen Sie die offizielle GNU Linux-Dokumentation, es gibt viele Möglichkeiten, es richtig zu machen.

2- Stellen Sie sicher, dass Sie die Shell-Signatur setzen, um Fehler in der Interpretation zu vermeiden:

#!/bin/bash

3- Das ist mein Skript

#!/bin/bash 

if [[ $EUID > 0 ]]; then  
  echo "Bitte als root/sudo ausführen"
  exit 1
else
  #Führen Sie Ihre Aufgaben aus
fi

11voto

Matthew Trotter Punkte 167

Sehr einfacher Weg, einfach eingeben:

if [ "$(whoami)" = "root" ]; then
    # Sie sind root
else
    # Sie sind nicht root
fi

Der Vorteil der Verwendung dies anstelle von id ist, dass Sie auch überprüfen können, ob ein bestimmter Nicht-Root-Benutzer den Befehl ausführt; z. B.

if [ "$(whoami)" = "john" ]; then
    # Sie sind john
else
    # Sie sind nicht john
fi

Anmerkung des Editors: Verwenden Sie entweder den POSIX-kompatiblen Testbefehl und den Vergleich [... = ...] oder Sie können Bash/+andere spezifische Schalen verwenden [[... == ...]].

7voto

alexandre1985 Punkte 1014

Ein einfacher Weg, um das Skript nur ausführbar für root zu machen, besteht darin, das Skript mit shebang zu starten:

#!/bin/su root

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X