Seite 1 von 1

feststellen im programm, ob es mit sudo aufgerufen wurde

Verfasst: Montag 9. August 2010, 16:20
von Francesco
Hallo, der betreff sagt es ja. Kann ich das im Programm feststellen? Würde mich auch für C++ interessieren.

Re: feststellen im programm, ob es mit sudo aufgerufen wurde

Verfasst: Montag 9. August 2010, 16:33
von cofi

Code: Alles auswählen

%> sudo python -c "import os; print os.getuid()"
0
%> python -c "import os; print os.getuid()"     
1000
Fuer C++ gilt dasselbe: Du musst an die UserID rankommen, ich kenn mich da allerdings nicht aus.

Re: feststellen im programm, ob es mit sudo aufgerufen wurde

Verfasst: Montag 9. August 2010, 16:36
von Rebecca
Das prueft, ob das Programm als root laeuft. Ob dabei sudo im Spiel ist, kann man nicht feststellen.

Re: feststellen im programm, ob es mit sudo aufgerufen wurde

Verfasst: Montag 9. August 2010, 16:36
von Francesco
cofi hat geschrieben:

Code: Alles auswählen

%> sudo python -c "import os; print os.getuid()"
0
%> python -c "import os; print os.getuid()"     
1000
Fuer C++ gilt dasselbe: Du musst an die UserID rankommen, ich kenn mich da allerdings nicht aus.
Danke schön.

Re: feststellen im programm, ob es mit sudo aufgerufen wurde

Verfasst: Montag 9. August 2010, 16:42
von Francesco
Rebecca hat geschrieben:Das prueft, ob das Programm als root laeuft. Ob dabei sudo im Spiel ist, kann man nicht feststellen.
Aha, das ist mir zu diesem Zeitpunkt aber gleichgültig, da ich nur wissen möchte, ob es als root läuft. Aber du warst aufmerksam, die Frage wurde so gestellt, gemeint habe ich aber, ob es mit root rechten ausgeführt wird. ;)

Re: feststellen im programm, ob es mit sudo aufgerufen wurde

Verfasst: Montag 9. August 2010, 16:45
von jbs

Re: feststellen im programm, ob es mit sudo aufgerufen wurde

Verfasst: Montag 9. August 2010, 16:47
von lunar
sudo setzt ein paar Umgebungsvariablen für das aufgerufene Programm:

Code: Alles auswählen

sudo env | grep -i sudo
SUDO_COMMAND=/usr/bin/env
SUDO_USER=lunar
SUDO_UID=1000
SUDO_GID=1000
Anhand dieser Variablen kann man feststellen, ob ein Programm durch sudo aufgerufen wurde. $SUDO_USER wird von sudo in bestimmten Situationen selbst verwendet, ist also die zuverlässigste Wahl. Ich wüsste aber nicht, wozu man das brauchen sollte.

Wenn prüfen will, ob ein Programm mit den effektiven Rechten der UID 0 läuft, so sollte man übrigens "os.geteuid()" nutzen.

Re: feststellen im programm, ob es mit sudo aufgerufen wurde

Verfasst: Montag 9. August 2010, 16:51
von Francesco
lunar hat geschrieben:sudo setzt ein paar Umgebungsvariablen für das aufgerufene Programm:

Code: Alles auswählen

sudo env | grep -i sudo
SUDO_COMMAND=/usr/bin/env
SUDO_USER=lunar
SUDO_UID=1000
SUDO_GID=1000
Anhand dieser Variablen kann man feststellen, ob ein Programm durch sudo aufgerufen wurde. $SUDO_USER wird von sudo in bestimmten Situationen selbst verwendet, ist also die zuverlässigste Wahl. Ich wüsste aber nicht, wozu man das brauchen sollte.

Wenn prüfen will, ob ein Programm mit den effektiven Rechten der UID 0 läuft, so sollte man übrigens "os.geteuid()" nutzen.
Danke; ja sonst hätte ich noch versuchen können, im Programm die filerechte eines Tesfiles auf root zu ändern, und dann wieder einlesen, ob sie es wirklich sind oder fehler abfragen. Ist aber nicht sehr elegant.

Re: feststellen im programm, ob es mit sudo aufgerufen wurde

Verfasst: Montag 9. August 2010, 18:48
von Leonidas
Francesco hat geschrieben:ja sonst hätte ich noch versuchen können, im Programm die filerechte eines Tesfiles auf root zu ändern, und dann wieder einlesen, ob sie es wirklich sind oder fehler abfragen. Ist aber nicht sehr elegant.
Ja, das passende Wort für solch einen Einsatz wäre "grottig". Das würde ja schon bei Read-Only-Dateisystemen scheitern.

Re: feststellen im programm, ob es mit sudo aufgerufen wurde

Verfasst: Montag 9. August 2010, 21:07
von Francesco
Leonidas hat geschrieben:
Francesco hat geschrieben:ja sonst hätte ich noch versuchen können, im Programm die filerechte eines Tesfiles auf root zu ändern, und dann wieder einlesen, ob sie es wirklich sind oder fehler abfragen. Ist aber nicht sehr elegant.
Ja, das passende Wort für solch einen Einsatz wäre "grottig". Das würde ja schon bei Read-Only-Dateisystemen scheitern.
Ich habe beim letzten Satz einen bösen smilie vergessen. ;)