Was sind die Risiken beim Betrieb von "sudo pip"?


94

Gelegentlich laufe ich in Kommentaren oder Antworten dieser Zustand mit Nachdruck , dass läuft pipunter sudoist „falsch“ oder „schlecht“, aber es gibt Fälle (einschließlich der Art , wie ich eine Reihe von Tools eingerichtet haben) , wo es entweder viel einfacher ist , oder sogar notwendig, Führen Sie es so aus.

Was sind die Risiken im Zusammenhang mit dem Betrieb pipunter sudo?


Beachten Sie, dass dies nicht dieselbe Frage ist wie diese , die trotz des Titels keine Informationen über Risiken enthält. Dies ist auch keine Frage, wie man die Verwendung vermeidet sudo, sondern speziell, warum man dies möchte.

Antworten:


103

Wenn Sie laufen pipmit sudo, laufen Sie setup.pymit sudo. Mit anderen Worten, Sie führen beliebigen Python-Code aus dem Internet als Root aus. Wenn jemand ein schädliches Projekt auf PyPI erstellt und Sie es installieren, gewähren Sie einem Angreifer Root-Zugriff auf Ihren Computer. Vor einigen kürzlich vorgenommenen Korrekturen an pipund PyPI konnte ein Angreifer auch einen Mann im mittleren Angriff ausführen, um dessen Code einzufügen, wenn Sie ein vertrauenswürdiges Projekt herunterladen.


2
Gilt die Bedrohung nur während pipoder für einen nachfolgenden Lauf der installierten Datei?
Orome

2
Aber das wird wahr sein, ob ich sudooder nicht, wenn ich pip, richtig? Sobald es installiert ist, sind wir alle gefährdet, egal wie es dort ankam?
Orome

2
@raxacoricofallapatorius Es ist unangenehm, darauf zu antworten, nicht weil ich keine Ahnung habe (ich habe eine Ahnung und kann Gründe dafür angeben), sondern weil es notorisch schwer vorherzusagen ist, wie sich scheinbar kleine Änderungen wie diese insgesamt auswirken Sicherheit. Darüber hinaus ist es in der Regel äußerst einfach, nicht nur sudodiese Berechtigungsprobleme zu vermeiden, indem die Pakete an einer anderen Stelle installiert werden (z. B. in einer virtuellen Umgebung). Dies kann sogar besser und zuverlässiger sein, selbst wenn alle Sicherheitsbedenken ignoriert werden.

2
@raxacoricofallapatorius Abhängig von den genauen Schreibberechtigungen und dem Verzeichnislayout befürchte ich, dass komplexere Malware anderen, vertrauenswürdigeren Code überschreibt, z. B. Code, der von Systemdienstprogrammen verwendet wird, die routinemäßig als Root ausgeführt werden.

2
Diese Antwort ist bizarr. Wenn Sie etwas mit ausführen, sudogeben Sie ihm natürlich Root-Rechte. Das ist der springende Punkt sudound sicherlich nicht spezifisch für pip.

19

Neben offensichtlichen Sicherheitsrisiken (die meiner Meinung nach bei der Installation von Software, die Sie kennen, tatsächlich gering sind) gibt es noch einen anderen Grund. Python, das mit dem System geliefert wird, ist Teil dieses Systems. Wenn Sie das System verwalten möchten, verwenden Sie Tools, die für die Systemwartung vorgesehen sind, wie z. B. den Paketmanager, wenn Sie Software installieren, aktualisieren oder deinstallieren. Wenn Sie beginnen, die Systemsoftware mit Tools von Drittanbietern (in diesem Fall pip) zu ändern, haben Sie keine Garantie für den Status Ihres Systems. Ein weiterer Grund ist, dass Sudo Ihnen Probleme bereiten kann, für die Sie keine oder nur eine sehr geringe Chance hätten. Siehe zum Beispiel Nichtübereinstimmung zwischen sys.executable und sys.version in Python

Distributionen sind sich dieses Problems bewusst und versuchen, es zu mindern. Zum Beispiel Fedora - Sudo Pip sicher machen und Debian - dist-Pakete anstelle von Site-Paketen .


6

Wenn Sie pip auf diese Weise verwenden, vertrauen Sie ihm bis zu dem Grad, an dem Sie zulassen, dass er etwas für Ihr System bewirkt. Nicht nur pip, sondern auch jeglicher Code, der von Quellen heruntergeladen und ausgeführt wird, denen Sie möglicherweise nicht vertrauen, und die böswillig sein können.

Und pip benötigt nicht all diese Berechtigungen, sondern nur den Schreibzugriff auf bestimmte Dateien und Verzeichnisse. Wenn Sie den Paketmanager Ihres Systems nicht verwenden können und nicht in die virtuelle Umgebung wechseln möchten, können Sie einen bestimmten Benutzer mit Schreibberechtigung für das Python-Installationsverzeichnis erstellen und für pip verwenden. Auf diese Weise können Sie besser steuern, was Pip tun kann und was nicht. Und das können Sie nutzen sudo -u!


Alles was ich tun muss, ist mir zum Beispiel zu erlauben, Schreibberechtigungen zu schreiben site-packages?
Orome

1
@raxacoricofallapatorius nicht nur da, da einige Pakete auch Hilfsskripte installieren (wie sich pipselbst, IPython, Django, Pylements, ...), so dass Sie auch Zugriff auf das Verzeichnis benötigen, in dem sie sich selbst installieren.
MattDMo

Ja und nein. Ich bin kein Sicherheitsexperte, aber ich denke, es ist besser, wenn der Benutzer, der die Skripte ausführt, keine Schreibberechtigung hat. Daher schlage ich eher einen separaten Benutzer vor.
Cilyan

@MattDMo: Ja, das macht Sinn; Aber diese Fälle sind wahrscheinlich leicht zu entdecken, da die Dinge ohne die entsprechenden Berechtigungen fehlschlagen. Wenn dies erledigt ist, ist das nicht der sicherste Weg, dann ist das Schlimmste, was meinem gesamten System passieren kann, was passieren kann, wenn ich sowieso etwas ausführe, oder? Der einzige Unterschied ist, dass ich möglicherweise meine Python-Installation als ich ruinieren könnte (anstatt dafür su sein zu müssen), oder?
Orome

Wie erstelle ich einen solchen Benutzer für den alleinigen Verwendungszweck pip(keine weiteren Änderungen am System, wie z. B. ein neues Home-Verzeichnis usw. erforderlich)? Danach gehe ich davon aus site-packages, dass ich nur den Besitzer dieses Benutzers ändere , richtig?
Orome

1

Das einzige, was "falsch" sudoist, ist, dass es als Super User ala root fungiert, was bedeutet, dass Sie möglicherweise eine Installation mit dem falschen Befehl zerstören können. Da es sich bei PIP um eine Paketwartung für ein bestimmtes Programm handelt, benötigen Sie einen solchen Zugriff, um Änderungen vornehmen zu können ...

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.