[gelöst] Herausfinden ob Skript mit sudo läuft

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
glasen
Beiträge: 30
Registriert: 28.06.2004 13:16:03
Wohnort: Adelsheim

[gelöst] Herausfinden ob Skript mit sudo läuft

Beitrag von glasen » 23.05.2005 15:06:31

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.
Zuletzt geändert von glasen am 23.05.2005 18:34:49, insgesamt 1-mal geändert.

Benutzeravatar
Savar
Beiträge: 7174
Registriert: 30.07.2004 09:28:58
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Berlin

Beitrag von Savar » 23.05.2005 15:25:53

ich befürchte das wirst du nicht feststellen können ohne Hilfe des äußeren Skriptes..
MODVOICE/MYVOICE
Debianforum Verhaltensregeln
Log Dateien? -> NoPaste

Benutzeravatar
Joghurt
Beiträge: 5244
Registriert: 30.01.2003 15:27:31
Wohnort: Hamburg
Kontaktdaten:

Beitrag von Joghurt » 23.05.2005 16:32:09

Sinn und Zweck dieser Aktion :?:

glasen
Beiträge: 30
Registriert: 28.06.2004 13:16:03
Wohnort: Adelsheim

Beitrag von glasen » 23.05.2005 17:13:13

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

Benutzeravatar
Savar
Beiträge: 7174
Registriert: 30.07.2004 09:28:58
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Berlin

Beitrag von Savar » 23.05.2005 17:17:39

hmm.. ich versteh immer noch nicht was dein Problem ist.. du willst das das Skript nur als Root ausgeführt wird?

was willst du denn verhindern...?
MODVOICE/MYVOICE
Debianforum Verhaltensregeln
Log Dateien? -> NoPaste

glasen
Beiträge: 30
Registriert: 28.06.2004 13:16:03
Wohnort: Adelsheim

Beitrag von glasen » 23.05.2005 17:25:59

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.

Benutzeravatar
Savar
Beiträge: 7174
Registriert: 30.07.2004 09:28:58
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Berlin

Beitrag von Savar » 23.05.2005 17:29:18

und warum benutzt du dann nicht die Variable $UID zum Testen ob du als Root durch die Gegend läufst?
MODVOICE/MYVOICE
Debianforum Verhaltensregeln
Log Dateien? -> NoPaste

Benutzeravatar
meandtheshell
Beiträge: 4054
Registriert: 14.01.2005 17:51:30

Beitrag von meandtheshell » 23.05.2005 17:34:31

Code: Alles auswählen

function <functionname> {
    test "$UID" != "0" && { echo "Option '-l' erfordert Rootrechte"; }
   #be creative here 
}
das sollte dein problem lösen - obwohl auch ich zu der fraktion zähle die noch nicht ganz durchblickt was du eigentlich willst ...

edit: ok auf der hompage stehts ausführlicher

glasen
Beiträge: 30
Registriert: 28.06.2004 13:16:03
Wohnort: Adelsheim

Beitrag von glasen » 23.05.2005 18:08:46

$UID ->

Hab ich auch schon probiert. Doch leider ändert sich bei "sudo" die UID nicht.
Und da ich das Skript auch für Benutzer von Ubuntu zugänglich machen will, muss es wohl oder übel auch mit "sudo" funktionieren.

Benutzeravatar
Savar
Beiträge: 7174
Registriert: 30.07.2004 09:28:58
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Berlin

Beitrag von Savar » 23.05.2005 18:22:39

?? bei mir schon..

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# 
läuft doch?!
MODVOICE/MYVOICE
Debianforum Verhaltensregeln
Log Dateien? -> NoPaste

glasen
Beiträge: 30
Registriert: 28.06.2004 13:16:03
Wohnort: Adelsheim

Beitrag von glasen » 23.05.2005 18:31:52

Irgendwie bin ich zu blöd!!!!! :oops:

Ich hab die ganze Zeit folgendes ausprobiert :

Code: Alles auswählen

sudo echo $UID
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.

:oops: :oops: :oops: :oops:

Aus Fehlern wird man klüger. Danke für deine Geduld. Werds gleich in mein Skript einbauen.

Benutzeravatar
Joghurt
Beiträge: 5244
Registriert: 30.01.2003 15:27:31
Wohnort: Hamburg
Kontaktdaten:

Beitrag von Joghurt » 23.05.2005 18:37:11

$UID wird ja von der Shell sofort ersetzt, du hast also effektiv

Code: Alles auswählen

sudo echo 1000
ausgeführt.

Benutzeravatar
Savar
Beiträge: 7174
Registriert: 30.07.2004 09:28:58
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Berlin

Beitrag von Savar » 23.05.2005 18:37:19

schon ok ;-)... viel Spass
MODVOICE/MYVOICE
Debianforum Verhaltensregeln
Log Dateien? -> NoPaste

Antworten