Ist es unter Linux möglich, ein Skript als Dateieigentümer auszuführen?

Ist es unter Linux möglich, ein Skript als Dateieigentümer auszuführen?

Es tut mir leid, ich weiß nicht, ob das der richtige Ort ist. Ich bin in Eile und renne mit der Zeit. Ich habe eine Datei mit den folgenden Attributen auf einer Linux-Maschine. (Kernel 2.6.26)

-rwxrwxrwx 1 root root 25 2015-06-01 08:08 /usr/bin/runme

Ich habe keine Root-Rechte auf dem Computer und kenne das Root-Passwort nicht. Ist es möglich, dieses Skript als Eigentümer auszuführen? Ich habe C-Code in einer anderen Datei geschrieben und kompiliert, aber es hat nicht funktioniert. Der Code, den ich verwendet habe:

#include <unistd.h>
#include <errno.h>

int main(void) {        
     setuid(0);
     system("/bin/bash /usr/bin/runme"); 
}

Dann sagte jemand, ich solle execve verwenden, aber das Ergebnis ändert sich nicht. Hier ist der Code, wenn ich execve verwende:

#include <unistd.h>
#include <errno.h>

int main(void) {        
        extern char * const environ[];
    char * const command[] = {"runme", NULL, NULL, NULL, NULL,NULL, NULL};
    execve("/usr/bin/runme", command, environ);
}

Antwort1

Das ist möglich, aber Sie müssen dabei äußerst vorsichtig sein - Ihr Skript hat globale Lese- und Schreibrechte, was bedeutetirgendjemandkönnte es ändern und könnte daherirgendetwasals root.

Das ist eine haarsträubende Sicherheitslücke. Wenn Sie einenormalUm die Binärdatei als Benutzer auszuführen, müssen Sie setuidder Binärdatei das Flag mit hinzufügen chmod g+s. Dies müssen Sie als Root tun, da dies andernfalls ebenfalls eine große Sicherheitslücke öffnet.

Wenn Sie ein Skript verwenden möchten, hängt dies von der Skriptsprache ab. Einige (und tatsächlich viele) werden aufgrund ihrer Implementierung einfach nicht funktionieren – auch hier ein Sicherheitsrisiko.

Ich würde vorschlagen, dass der Root (sic) sich das ansieht sudo- es ist ein "Superuser" und ermöglicht nicht privilegierten Benutzern, Befehle als privilegierte (oder Root-)Konten auszuführen. Dann - nach der Konfiguration - können Sie:

sudo /path/to/script

Trotzdem würde ich diese Skriptwelt nicht beschreibbar lassen. Das ist immer noch ein Sicherheitsrisiko.

Wenn Sie weder Root noch Root-Passwort noch Administratorzugriff haben, ... würde ich sagen, dass es NICHT Ihr System ist, und dass Sie es nicht weiter versuchen sollten, da es sich wahrscheinlich um Computermissbrauch handelt und je nach Wohnort eine Straftat darstellen kann.

Antwort2

Es gibt keine Möglichkeit (ohne eine Sicherheitslücke auszunutzen), ein Skript (oder eine ausführbare Datei) als ein anderer Benutzer auszuführen, es sei denn, dieser Benutzer hat Ihnen irgendwann dieses Recht gewährt.

Für „echte“ ausführbare Dateien kann dies mithilfe des Setuid-Bits erfolgen, das vom Dateibesitzer gesetzt werden kann. Für Skripte wird das Setuid-Bit in modernen Umgebungen normalerweise ignoriert, sodass Sie eine Art Wrapper benötigen (entweder einen benutzerdefinierten oder sudo). Siehehttps://unix.stackexchange.com/questions/364/allow-setuid-on-shell-scriptsfür weitere Details.

Ihr konkreter Fall ist ein hervorragendes Beispiel dafür, wie gefährlich das Setuid-Bit sein kann. Wenn das Setuid-Bit auf einer Datei vorhanden ist, die allgemein beschreibbar und ausführbar ist, können Sie als Dateibesitzer jeden beliebigen Befehl ausführen. Da der Dateibesitzer eigentlich root ist, erhalten Sie eine Root-Shell, wenn Sie den Inhalt einer solchen Datei beispielsweise durch den Inhalt von bash ersetzen.

verwandte Informationen