Berechtigungsprobleme im Programm setuid-root

495
Christoph

Ich habe ein Programm geschrieben, kompiliert, nach / usr / local / bin / kopiert und ihm die setuid-root-Datei erteilt.

Leider kann ich das Programm aufgrund von Berechtigungsproblemen nicht wie gewünscht ausführen. Das heißt, es läuft gut, wenn ich es als nicht privilegierter Benutzer von der Befehlszeile aus anrufe, aber es gibt Fehler, wenn ich es als nicht privilegiertes Programm aufrufe Benutzer vom PAM-Modul pam_exec - und so möchte ich es am Ende verwenden.

Bisher hatte ich folgende Unterschiede zwischen dem Aufruf von der Befehlszeile und dem Aufruf von pam_exec:

  1. Wenn ich dem Programm nicht die setuid-root-Datei erlaube, sondern ihm die Linux-Funktion cap_setuid gebe, funktioniert das von der Kommandozeile aus, aber mit pam_exec wird das Programm überhaupt nicht ausgeführt, mit dem Fehler "Operation nicht erlaubt".

  2. Für die weitere Ausführung des Programms muss nicht nur die effektive, sondern auch die reale UID 0 sein. Von der Befehlszeile aus funktioniert dies, wenn ich setuid (0) im Programmcode verwende. Bei pam_exec schlägt setuid (0) jedoch fehl Um die reale UID zu ändern, muss ich stattdessen setreuid (0,0) verwenden.

  3. Obwohl echte und effektive UID 0 sind, erhalte ich immer noch Fehler wie "Permission denied" und "Operation unzulässig", wenn das Programm von pam_exec aufgerufen wird. Dies geschah beim Ausführen des externen Befehls lvcreate von meinem Setuid-Root-Programm aus, und nachdem ich das jetzt gelöst habe, indem ich stattdessen lvm-dbus-Bibliotheksaufrufe verwendet habe, bekomme ich sogar eine "Operation unzulässig", wenn ich ein einfaches chown () für ein Verzeichnis in mache das lokale Dateisystem. Das funktioniert natürlich perfekt, wenn ich mein Programm von der Kommandozeile aus starte.

Alle möglichen Gründe, warum sich ein Programm mit setuid-root-Dateiberechtigung (oder ein Programm mit speziellen Linux-Fähigkeiten), wenn es von einem nicht privilegierten Benutzer aus dem PAM-Modul pam_exec aufgerufen wird, ganz anders verhält, als wenn es von einem nicht privilegierten Benutzer von aufgerufen wird die Befehlszeile? Oder wie ist es überhaupt möglich, dass Fehler "Operation nicht erlaubt" und "Berechtigung verweigert" auftreten, obwohl sowohl getuid () als auch geteuid () 0 zurückgeben?

Grüße Christoph

0
Was ist hier zu breit? Ich habe das Problem bereits in mehreren Mailing-Listen beschrieben und nirgends eine befriedigende Lösung oder sogar den kleinsten Hinweis auf den Grund für die Berechtigungsprobleme erhalten. Daher gehe ich davon aus, dass eine spezifischere Frage die Wahrscheinlichkeit verringert, überhaupt eine Antwort zu erhalten . Christoph vor 5 Jahren 0

0 Antworten auf die Frage