[gelöst] Herausfinden ob Skript mit sudo läuft
[gelöst] Herausfinden ob Skript mit sudo läuft
Hallo,
Die Überschrift sagt eigentlich schon alles.
Das Skript soll selbstständig herausfinden ob es als "root" oder mit "sudo" aufgerufen wird. Als "root" ist es ja einfach (Einfach die USER-Variable überprüfen), aber wenn ich es mit "sudo" starte, ändert sich die Variable nicht.
Gibt es irgendeine Variable die ich auslesen kann?
Ergänzung :
Es würde mir auch schon ausreichen, wenn es eine Möglichkeit gebe die Kommandezeile zu überprüfen, d.h. alles was ich eingegeben habe und nicht nur bei "echo $0", "bash" als Ergebnis.
Die Überschrift sagt eigentlich schon alles.
Das Skript soll selbstständig herausfinden ob es als "root" oder mit "sudo" aufgerufen wird. Als "root" ist es ja einfach (Einfach die USER-Variable überprüfen), aber wenn ich es mit "sudo" starte, ändert sich die Variable nicht.
Gibt es irgendeine Variable die ich auslesen kann?
Ergänzung :
Es würde mir auch schon ausreichen, wenn es eine Möglichkeit gebe die Kommandezeile zu überprüfen, d.h. alles was ich eingegeben habe und nicht nur bei "echo $0", "bash" als Ergebnis.
Zuletzt geändert von glasen am 23.05.2005 18:34:49, insgesamt 1-mal geändert.
Ich bin gerade dabei ein Skript zu schreiben, welches ein deutsches OpenOffice.org2 Debianarchiv automatisch erzeugt.
Das Problem was dabei auftaucht, ist das ich sicherstellen muss, das der Benutzer das Skript als root oder mit "fakeroot" aufruft, da das Paket sonst alle Dateien mit den Rechten des jeweiligen Nutzer generiert (oder gar keinen Benutzer setzt und dann die Dateien einen "numerischen" Benutzer haben).
Bisher hab ich einfach eine Meldung eingebaut, welche den Benutzer darauf hinweist und er gegegenenfalls das Skript noch abbrechen kann. Diese Lösung finde ich aber alles andere als elegant.
Bin gerade dabei eine Lösung im folgenden Stil zu auszuprobieren :
TMP=`ps ax | grep "sudo"`
if [${TMP} = ""] ;
then
[...]
Wenn du dir das bisherige Skript mal anschauen willst :
http://www.glasen-hardt.de
Das Problem was dabei auftaucht, ist das ich sicherstellen muss, das der Benutzer das Skript als root oder mit "fakeroot" aufruft, da das Paket sonst alle Dateien mit den Rechten des jeweiligen Nutzer generiert (oder gar keinen Benutzer setzt und dann die Dateien einen "numerischen" Benutzer haben).
Bisher hab ich einfach eine Meldung eingebaut, welche den Benutzer darauf hinweist und er gegegenenfalls das Skript noch abbrechen kann. Diese Lösung finde ich aber alles andere als elegant.
Bin gerade dabei eine Lösung im folgenden Stil zu auszuprobieren :
TMP=`ps ax | grep "sudo"`
if [${TMP} = ""] ;
then
[...]
Wenn du dir das bisherige Skript mal anschauen willst :
http://www.glasen-hardt.de
Genau das.
Wenn das Skript als normaler User (z.B. glasen) ausgeführt wird, werden alle Dateien mit den Rechten des Nutzers erzeugt.
Wenn ich das generierte Debianarchiv installiere, erhalten alle Dateien als UID und GID die Werte des Nutzers, welcher das Paket erzeugt hat (im meinem Beispiel also "glasen").
Wenn das Paket als "root" oder mit "sudo" generiert wird, passiert das nicht. Alle Dateien werden dann mit den Dateirechten von "root" installiert.
Wenn das Skript als normaler User (z.B. glasen) ausgeführt wird, werden alle Dateien mit den Rechten des Nutzers erzeugt.
Wenn ich das generierte Debianarchiv installiere, erhalten alle Dateien als UID und GID die Werte des Nutzers, welcher das Paket erzeugt hat (im meinem Beispiel also "glasen").
Wenn das Paket als "root" oder mit "sudo" generiert wird, passiert das nicht. Alle Dateien werden dann mit den Dateirechten von "root" installiert.
- meandtheshell
- Beiträge: 4054
- Registriert: 14.01.2005 17:51:30
Code: Alles auswählen
function <functionname> {
test "$UID" != "0" && { echo "Option '-l' erfordert Rootrechte"; }
#be creative here
}
edit: ok auf der hompage stehts ausführlicher
- Savar
- Beiträge: 7174
- Registriert: 30.07.2004 09:28:58
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Berlin
?? bei mir schon..
läuft doch?!
Code: Alles auswählen
check@tne:~$ cat sudotest
#!/bin/bash
echo $UID
check@tne:~$ sudo ./sudotest
0
check@tne:~$ su
tne:/home/check# cat /etc/sudoers
# /etc/sudoers
root ALL=(ALL) ALL
check ALL=(root) NOPASSWD: /sbin/mynetworks
check ALL=(root) NOPASSWD: /usr/bin/kaffeine
check ALL=(root) NOPASSWD: /home/check/sudotest
tne:/home/check#
Irgendwie bin ich zu blöd!!!!!
Ich hab die ganze Zeit folgendes ausprobiert :
Dann liefert es mir den Wert "1000" zurück. Ich hab es im Skript selbst noch gar nicht ausprobiert, weil ich dachte wenn es wie oben nicht geht, dann wird es im Skript auch nicht gehen.
Aus Fehlern wird man klüger. Danke für deine Geduld. Werds gleich in mein Skript einbauen.
Ich hab die ganze Zeit folgendes ausprobiert :
Code: Alles auswählen
sudo echo $UID
Aus Fehlern wird man klüger. Danke für deine Geduld. Werds gleich in mein Skript einbauen.
$UID wird ja von der Shell sofort ersetzt, du hast also effektiv ausgeführt.
Code: Alles auswählen
sudo echo 1000