Discussion:
Rechte in setuid-root-Programm
Christoph Pleger
2018-11-27 09:51:35 UTC
Permalink
Hallo,

hat jemand eine Idee für mögliche Gründe, warum ein Programm mit
setuid-root-Dateirechten (oder auch ein Programm mit besonderen
Capabilities), wenn ich es als unprivilegierter Nutzer über das
PAM-Modul pam_exec aufrufe, sich völlig anders verhält, als wenn ich es
als unprivilegierter Nutzer über die Kommaandozeile aufrufe?

Bisher habe ich bei meinem Programm folgende Unterschiede festgestellt:

1. Wenn ich dem Programm keine setuid-root-Dateirechte gebe, sondern
stattdessen die Linux-Capability cap_setuid zuteile, funktioniert das
von der Kommandozeile, pam_exec verweigert aber die Ausführung des
Programms (Operation not permitted).

2. Für den Verlauf des Programms muss nicht nur die effektive, sondern
auch die reale UID auf 0 gesetzt sein. Dies funtioniert beim Aufruf von
der Kommandozeile mit setuid(0), jedoch nicht beim Aufruf über pam_exec,
dafür muss ich setreuid(0,0) nutzen.

3. Obwohl getreuid() anzeigt, dass sowohl die effektive als auch die
reale UID auf 0 gesetzt sind, bekomme ich beim Aufruf über pam_exec
Fehler wie "Permission denied" und "Operation not permitted". Dies war
erst beim externen Programm lvcreate so; nachdem ich das nun durch die
Verwendung von Bibliotheks-Aufrufen statt exec(lvcreate, ...) gelöst
habe, scheitert nun selbst ein simples chown() auf einem Verzeichnis im
lokalen Dateisystem. Beim Aufruf von der Kommandozeile funktioniert das
natürlich alles ohne Probleme.

Was können allgemein Gründe sein, warum Operationen wegen fehlender
Rechte fehlschlagen, obwohl getuid() und geteuid() beide 0 zurück geben?

Viele Grüße
Christoph

Loading...