Nachteile hat es eigentlich keine. Es wäre sogar sicherer, obwohl ich bezweifle, dass dieser Fall oft eintritt. Die User, die dein Script ausführen sollten schon wissen was sie machen. Ansonsten wäre es besser den Root abzugeben. Ich habe in meinen Scripts diese Überprüfung nur eingebaut, um die User vor sich selber zu schützen. Ich selber nutze zurz Zeit auch nur die whoami-Abfrage.
Die Umgebungsvariable $USER beinhaltet den User, der das Script gestartet hat. Der User root bekommt in der Datei /etc/passwd die ID 0 zugeteilt. Andere User die auch diese ID zugeteilt bekommen, haben Root-Rechte. Du kannst auch "id -u" anstatt "id -u $USER" verwenden. Der Befehl "id" gibt die UID, GID und GIDs aus. Mittels "id -u" wird nur die ID des aktuellen Users ausgegeben.
So wäre es noch kürzer:
|
Source code
|
1
|
test `id -u` = 0 && echo "User $USER hat Root-Rechte" || echo "User $USER hat keine Root-Rechte"
|
Hier noch ein Beispielscript:
|
Source code
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
#!/bin/bash
function usage
{
echo "$0 <pfad> <start|stop|restart> "
}
function test_root
{
test `id -u` = 0 && echo "User $USER hat Root-Rechte"
}
#Die Funktion test_root wird aufgerufen und bei einem positiven Test,
#wird das Script mit dem Fehlercode 1 beendet
#Wenn z.B. das Script druch ein anderes aufgerufen würde,
#könnte das aufrufende Script mit dem Fehlercode vom vorherigen Script weiterarbeiten.
test_root && exit 1
#Test ob genügend Parameter angegeben worden sind
if [ $# -lt 2 ]; then echo "Zu wenig Parameter" && usage && exit 1; fi
#Prüft ob das angegebene Verzeichnis existiert
if [ ! -d $1 ]; then echo "Falscher Pfad" && usage && exit 1; fi
#Führt die Überprüfung aus, ob start, stop oder restart
#angegeben wurde und führt weitere Befehle aus
#Bei erfolglosem Test wird das Script wieder mit dem Fehlercode 1 beendet
if [ "$2" = "start" ]; then echo "start"
elif [ "$2" = "stop" ]; then echo "stop"
elif [ "$2" = "restart" ]; then echo "restart"
else echo "Falscher Parameter" && usage && exit 1
fi
#Hier geht das Programm weiter
echo "Keine Fehler"
|
Es ist aber die Frage welcher Admin für Gameserver mehrere User mit Root-Rechten hat und dies nicht weiß.