Frage:
Ist das Ausführen eines CGI-Servers als Root zu gefährlich?
Tomas
2012-10-16 19:38:21 UTC
view on stackexchange narkive permalink

Ich habe meinen Raspberry Pi mit Nginx und fcgiwrap als CGI eingerichtet. Ich wollte GPIO-Ports mithilfe eines Python-Skripts mit der Bibliothek Rpi.GPIO steuern. Das Problem ist, dass ich Python als Root ausführen muss, um die Ports steuern zu können, daher CGI als Root.

Ich habe hier die Frage Wie man RPi einschließt. GPIO in einem Python-CGI-Skript mit lighttpd?, das einen CGI-Server als Root ausführt, öffnet eine große Sicherheitslücke. Können Sie erklären, warum?

Zwei antworten:
#1
+4
Der Hochstapler
2012-10-16 19:51:36 UTC
view on stackexchange narkive permalink

Das Ausführen eines Webservers als Root wird als unsicher angesehen, da ein Angreifer aufgrund einer Sicherheitslücke in Ihren Webanwendungen möglicherweise Code mit Root-Rechten ausführen kann.

Wenn Ihr Webserver mit eingeschränkten Rechten ausgeführt wird, kann ein Angreifer können höchstens die gleichen Berechtigungen wie der Webserver erhalten.

Der Webserver wird nicht als Root ausgeführt, sondern ruft den CGI-Server auf, der als Root ausgeführt wird. Ist das das gleiche Szenario?
@Tomas: Das Wesentliche ist, dass Benutzereingaben niemals in einem Stammkontext ausgewertet werden sollten. Denn dies führt dazu, dass in diesem Kontext möglicherweise schädlicher Code ausgeführt wird.
Ein Angreifer kann auch mit einem eingeschränkten Webserver weitere Berechtigungen erlangen, muss aber auch etwas anderes beschädigen. Z.B. Verwenden Sie einen httpd-Fehler, um Zugriff auf einen Host zu erhalten und dann schlechte Berechtigungen zu finden, vertrauenswürdigen internen Netzwerkverkehr zu schnüffeln oder Trojaner zu pflanzen, um Root oder Zugriff auf einen anderen Computer zu erhalten usw. Personen, die glauben, Sicherheit sei ein Produkt oder ein Perimeter, haben normalerweise andere Fehler Netzwerk und es wird immer Fehler geben, so dass Sie auch nicht volles Vertrauen in eingeschränkte Privilegien setzen können.
#2
+3
Chris Stratton
2012-10-16 20:53:24 UTC
view on stackexchange narkive permalink

Sie können den Besitz der erforderlichen GPIO-Gerätedateien in eine Nicht-Root-Benutzer-ID ändern, unter der Sie den Webserver und die zugehörigen Helfer ausführen. Weisen Sie sie noch besser einer Benutzergruppe zu, die sowohl den Webserver als auch Ihr Testkonto umfasst, und legen Sie die Gruppenberechtigungsbits fest.

Sie können auch einen Dämon schreiben, der als Benutzer ausgeführt wird, dem Zugriff gewährt wurde diese Dateien und akzeptiert Befehle und Abfragen, die sorgfältig über einen Kanal wie einen Unix-Domain-Socket, eine Named Pipe mit Zugriffsbeschränkungen auf Dateiebene usw. bereinigt werden.

Die neueste Version des Python-GPIO-Moduls (ab Version 0.3.0) verwendet speicherabgebildete GPIO-Register von "/ dev / mem" (anstelle von / sys / class / gpio). Man könnte den Besitz von `/ dev / mem` überprüfen, aber dies wäre nicht viel sicherer, wenn man als root ausgeführt würde. Ihr zweiter Vorschlag ist viel besser, erfordert aber viel mehr Arbeit.
Oder man könnte zur alten Methode des GPIO zurückkehren ...


Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...