Mit Python kann nicht zurück zum Root-Benutzer gewechselt werden

7

Ich habe mich als root-Benutzer beim Terminal angemeldet.

Dann in Python:

os.setuid(471) kann zu einem Teilstamm wechseln, aber wenn ich versuche, mit os.setuid(0) zurück zum root-Benutzer zu wechseln, erhalte ich den folgenden Fehler: Operation not permitted

Bitte lassen Sie mich wissen, wie ich vom Subroot zum root-Benutzer zurückwechseln kann.

    
Rajesh Kumar 09.01.2013, 07:46
quelle

3 Antworten

9

Rufen Sie os.fork() auf und wechseln Sie im Child-Prozess zum Nicht-Root-Benutzer. "Zurückschalten", indem Sie einfach das Kind verlassen und darauf warten, dass das Kind im Elternteil austritt. Zum Beispiel:

%Vor%     
user4815162342 09.01.2013 07:57
quelle
8

So funktioniert Setuid nicht. Wenn sich der Stamm selbst herabsetzt, ist es routinemäßig möglich, den Stamm nicht erneut zu erhalten. Sobald Sie root (in diesem Zusammenhang) aufgeben, ist es weg.

Wenn Sie setuid als root verwenden, können Sie nicht zurückgehen.

Ich gehe davon aus, dass os.setuid ein Thin-Proxy bis zum C-Level-Aufruf ist. Auf der Seite man :

  

Wenn der Benutzer root ist oder das Programm set-user-ID-root ist, muss besonders vorsichtig vorgegangen werden. Die Funktion setuid () überprüft die effektive Benutzer-ID des Aufrufers und wenn es der Superuser ist, werden alle prozessbezogenen Benutzer-IDs auf uid gesetzt. Nachdem dies geschehen ist, ist es für das Programm unmöglich, root-Privilegien wiederzuerlangen.

Was anbetrifft, warum root nicht wiederhergestellt werden kann, sollten Sie eine typische Verwendung in Betracht ziehen. Stellen Sie sich einen Apache-Server vor, der auf www (oder eine Art nichtprivilegierter Benutzer) herunterfährt, um aktuelle Anfragen zu bearbeiten. Wenn Sie root wiedergewinnen könnten, könnte ein Python-Skript (oder PHP / Perl / CGI / etc) Root wiederherstellen und absolutes Chaos anrichten.

Wie bei einer Lösung können Sie stattdessen seteuid verwenden (os.seteuid - noch einmal ein einfacher Proxy bis hin zur C-Ebene Seteuid ). Die Python-Dokumentation auf setuid und seteuid sieht ziemlich schlecht aus, aber es gibt jede Menge Dokumentation über die Systemaufrufe.

Was die Sicherheit anbetrifft, die Wurzel vorübergehend fallen zu lassen und wieder zu erlangen ... Sie müssen sehr vorsichtig sein. Wenn bösartiger Code die Möglichkeit hat, Root zu erreichen, sind Sie verrückt. Aus diesem Grund ist es eine gute Idee, in einen Child-Prozess zu verzweigen (wie Benutzer4815162342 vorgeschlagen). Der untergeordnete Prozess kann nicht neu rooten. Mehr über die Bedenken finden Sie hier . Mehr über die allgemeine Seltsamkeit von setuid ist hier .

Die Idee ist, die effektive Benutzer-ID mit seteuid zu setzen und einen neuen Prozess zu erzeugen. Wegen der Art und Weise, wie exec funktioniert, wird die effektive Benutzer-ID in die gespeicherte Benutzer-ID des neuen Prozesses kopiert. Da die gespeicherte Benutzer-ID nicht mehr root ist, kann root nicht mehr geändert werden. Noch mehr Spaß Dokumentation finden Sie hier .

Die relevantesten Teile:

  

Wenn das Bit set-user-ID für die Programmdatei, auf die filename verweist, gesetzt ist und das zugrunde liegende Dateisystem nosuid nicht angehängt ist (das MS_NOSUID-Flag für mount (2)) und der aufrufende Prozess nicht ptraced wird , dann wird die effektive Benutzer-ID des aufrufenden Prozesses in die des Eigentümers der Programmdatei geändert. Wenn das Set-Group-ID-Bit der Programmdatei gesetzt ist, wird die effektive Gruppen-ID des aufrufenden Prozesses auf die Gruppe der Programmdatei gesetzt.

     

Die effektive Benutzerkennung des Prozesses wird in die gespeicherte Benutzergruppe kopiert; In ähnlicher Weise wird die effektive Gruppen-ID in die gespeicherte Gruppengruppen-ID kopiert. Dieses Kopieren findet nach jeder effektiven ID-Änderung statt, die aufgrund der Berechtigungsbits Set-User-ID und Set-Group-ID erfolgt.

    
Corbin 09.01.2013 07:47
quelle
3

Verwenden Sie stattdessen seteuid (), um die effektive ID festzulegen, aber behalten Sie die Berechtigung:

%Vor%     
hoju 23.01.2013 09:09
quelle

Tags und Links