Sie sind nicht angemeldet.

1

Sonntag, 1. März 2009, 11:16

Rootuserabfrage per Script

Hi

Es gibt ja zum einem die Möglichkeit über whoami und zum anderen über $UID abzufragen ob root eingeloggt ist.
Bei whoami kann ich allerdings nur den user root vergleichen, kann ja nicht wissen wer welche rootuser mit welchem Namen angelegt hat.
Bei $UID ist das meiner Meinung nach besser, da ich da mit der ID 0 vergleichen kann.
In den meissten Scripts sehe ich aber immer if [ "$USER" = "root" ]; then bla bla bla...................

Gibt es irgendwelche Nachteile das ganze über $UID zu machen ????

mfg chris
<!-- m --><a class="postlink" href="http://www.clan-tbm.de">http://www.clan-tbm.de</a><!-- m -->

DeaD_EyE

Administrator

Beiträge: 3 980

Wohnort: Hagen

Beruf: Mechatroniker (didaktische Systeme)

Rootserver vorhanden: Nein

  • Nachricht senden

2

Sonntag, 1. März 2009, 19:00

Re: Rootuserabfrage per Script

Klar, du fragst einfach die ID ab.

Quellcode

1
test `id -u $USER` = 0 && echo "User $USER hat Root-Rechte" || echo "User $USER hat keine Root-Rechte"

3

Sonntag, 1. März 2009, 19:52

Re: Rootuserabfrage per Script

Hi

Ja wenn ich das über die ID mache schon, aber meisst wird das, was ich in anderen Scripts gesehn habe, nicht über die ID sondern über whoami abgefragt.
Aber es wäre doch besser es über die Id abzufragen, kann ja aber sein dass das irgendwelche andere Nachteile hat, da es anscheinend kaum jemand über die ID abfragt.

Deswegen die Frage ob über die ID abfragen Nachteile hat.

mfg chris
<!-- m --><a class="postlink" href="http://www.clan-tbm.de">http://www.clan-tbm.de</a><!-- m -->

DeaD_EyE

Administrator

Beiträge: 3 980

Wohnort: Hagen

Beruf: Mechatroniker (didaktische Systeme)

Rootserver vorhanden: Nein

  • Nachricht senden

4

Sonntag, 1. März 2009, 22:34

Re: Rootuserabfrage per Script

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:

Quellcode

1
test `id -u` = 0 && echo "User $USER hat Root-Rechte" || echo "User $USER hat keine Root-Rechte"


Hier noch ein Beispielscript:

Quellcode

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ß.

5

Montag, 2. März 2009, 07:29

Re: Rootuserabfrage per Script

Hi

Ok danke das wollt ich wissen, werd mir das aber glaub trotzdem angewöhnen, ist glaub auch bisle kürzer. ^^

So wird das dann wohl immer bei mir aussehen:

if [ "$UID" = "0" ]; then..............else..............fi

Und das admins nicht immer wissen was sie machen, sieht man an dem Beitrag hier im Forum meines Hosters.

http://forum.g-portal.de/showthread.php?t=655">http://forum.g-portal.de/showthread.php?t=655</a>

Das es Admins gibt, die nicht wissen was ein SSH Client ist, ist schon traurig.

mfg chris
<!-- m --><a class="postlink" href="http://www.clan-tbm.de">http://www.clan-tbm.de</a><!-- m -->

DeaD_EyE

Administrator

Beiträge: 3 980

Wohnort: Hagen

Beruf: Mechatroniker (didaktische Systeme)

Rootserver vorhanden: Nein

  • Nachricht senden

6

Montag, 2. März 2009, 14:56

Re: Rootuserabfrage per Script

Jo stimmt, die Variable gibt es ja auch noch. Da wäre der Weg über den Befehl id langsamer, da erst der Befehl ausgeführt werden muss und danach der ausgegebene Wert überprüft wird. Jetzt ist nur Fraglich ob die Umgebungsvariable UID bei jeder Distribution vorkommt. Bei Suse und Debian ist es der Fall.