feststellen im programm, ob es mit sudo aufgerufen wurde

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

Hallo, der betreff sagt es ja. Kann ich das im Programm feststellen? Würde mich auch für C++ interessieren.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

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.
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Das prueft, ob das Programm als root laeuft. Ob dabei sudo im Spiel ist, kann man nicht feststellen.
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

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.
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

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. ;)
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
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.
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

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.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

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. ;)
Antworten