Jakie są zagrożenia związane z uruchomieniem „sudo pip”?

99

Czasami napotykam komentarze lub odpowiedzi, które wyraźnie stwierdzają, że bieganie pippod sudojest „niewłaściwe” lub „złe”, ale są przypadki (w tym sposób, w jaki skonfigurowałem zestaw narzędzi), w których jest to znacznie prostsze lub nawet konieczne uruchom to w ten sposób.

Jakie są zagrożenia związane z bieganiem pippod sudo?


Zwróć uwagę, że to nie to samo pytanie, co to , które pomimo tytułu nie zawiera żadnych informacji o ryzyku. Nie jest to również kwestia tego, jak unikać używania sudo, ale konkretnie, dlaczego ktoś miałby chcieć.

orome
źródło

Odpowiedzi:

105

Po uruchomieniu pipz sudobiegniesz setup.pyz sudo. Innymi słowy, jako root uruchamiasz dowolny kod Pythona z Internetu. Jeśli ktoś umieści złośliwy projekt na PyPI i go zainstalujesz, dajesz atakującemu uprawnienia roota do twojego komputera. Przed wprowadzeniem kilku ostatnich poprawek do pipi PyPI osoba atakująca mogła również przeprowadzić atak typu man in the middle, aby wstrzyknąć swój kod podczas pobierania wiarygodnego projektu.


źródło
2
Czy zagrożenie występuje tylko podczas piplub podczas każdego kolejnego uruchomienia tego, co zostało zainstalowane?
orome
3
Ale to będzie prawda, czy ja, sudoczy nie, kiedy ja pip, prawda? Po zainstalowaniu wszyscy jesteśmy zagrożeni, bez względu na to, jak to się stało?
orome
2
@raxacoricofallapatorius To jest wkraczanie na terytorium, nie mogę odpowiedzieć, nie dlatego, że nie mam pojęcia (mam przeczucie i mogę podać powody), ale dlatego, że notorycznie trudno jest przewidzieć, jak pozornie małe zmiany, takie jak te, wpływają ogólnie bezpieczeństwo. Ponadto zazwyczaj niezwykle łatwo jest uniknąć nie tylko, sudoale także tych problemów z uprawnieniami, instalując pakiety w innym miejscu (np. W virtualenv). Może to być nawet lepsze i bardziej niezawodne, nawet jeśli zignorujesz wszystkie obawy dotyczące bezpieczeństwa.
2
@raxacoricofallapatorius W zależności od dokładnych uprawnień do zapisu i układu katalogów, obawiam się, że bardziej wyrafinowane złośliwe oprogramowanie zastąpi inny, bardziej zaufany kod, taki jak kod używany przez narzędzia systemowe rutynowo uruchamiane jako root.
2
Ta odpowiedź jest dziwna. Oczywiście, kiedy coś uruchamiasz sudo, dajesz temu uprawnienia roota; o to właśnie chodzi sudo, a już na pewno nie tylko o to pip.
19

Oprócz oczywistych zagrożeń bezpieczeństwa (które, jak sądzę, są w rzeczywistości niskie, gdy instalujesz oprogramowanie, które znasz), przyniosły inne odpowiedzi, jest jeszcze jeden powód. Python dostarczany z systemem jest częścią tego systemu i kiedy chcesz zarządzać systemem, używasz narzędzi przeznaczonych do konserwacji systemu, takich jak menedżer pakietów w przypadku instalacji / aktualizacji / deinstalacji oprogramowania. Kiedy zaczynasz modyfikować oprogramowanie systemu za pomocą narzędzi stron trzecich (w tym przypadku pip), nie masz żadnej gwarancji co do stanu systemu. Kolejnym powodem jest to, że sudo może przynieść ci problemy, których nie miałbyś szansy lub masz bardzo małą szansę na inne. Zobacz na przykład niezgodność między sys.executable i sys.version w Pythonie

Dystrybutorzy są świadomi tego problemu i starają się go złagodzić. Na przykład Fedora - zabezpieczanie sudo pip i Debian - pakiety dist zamiast pakietów witryn .

Piotr Dobrogost
źródło
6

Używanie pip w ten sposób oznacza, że ​​ufasz mu do tego stopnia, że ​​pozwalasz mu na wprowadzenie czegokolwiek do twojego systemu. Nie tylko pip, ale także każdy kod, który pobierze i uruchomi ze źródeł, którym możesz nie ufać i który może być złośliwy.

A pip nie potrzebuje tych wszystkich uprawnień, tylko prawa do zapisu w określonych plikach i katalogach. Jeśli nie możesz użyć menedżera pakietów systemu i nie chcesz korzystać z wirtualnego środowiska, możesz utworzyć określonego użytkownika, który ma uprawnienia do zapisu w katalogu instalacyjnym języka Python i użyć go dla pip. W ten sposób lepiej kontrolujesz, co pip może robić, a czego nie. I możesz tego użyć sudo -u!

Cilyan
źródło
Więc wszystko, co muszę zrobić, to na przykład zezwolić sobie na zapisywanie site-packages?
orome,
1
@raxacoricofallapatorius nie tylko tam, jak również zainstalować niektórych pakietów pomocniczych skryptów (jak pipsama, ipython, Django, pygments, ...), więc musisz również dostęp do katalogu w zależności od tego, że instalują się w.
MattDMo
Tak i nie. Nie jestem ekspertem w dziedzinie bezpieczeństwa, ale myślę, że lepiej, jeśli użytkownik uruchamiający skrypty nie ma uprawnień do zapisu. Dlatego proponuję raczej osobnego użytkownika.
Cilyan,
@MattDMo: Tak, to ma sens; ale takie przypadki są prawdopodobnie łatwe do wykrycia, ponieważ bez odpowiednich uprawnień wszystko zawodzi. Jeśli jednak to zrobisz, czy nie jest to najbezpieczniejszy sposób, to najgorsze, co może się przydarzyć mojemu systemowi jako całości, to to, co może się stać, gdy i tak cokolwiek uruchomię, prawda? Jedyną różnicą jest to, że mógłbym potencjalnie zrujnować moją instalację Pythona jako ja (zamiast być su, aby to zrobić), prawda?
orome
Jak utworzyć takiego użytkownika wyłącznie w celu jego używania pip(żadne inne zmiany w systemie, jak nowy katalog domowy itp. Nie są potrzebne)? Potem zakładam, że po prostu zmieniam właściciela site-packagesna tego użytkownika, prawda?
orome
1

Jedyną „złą” rzeczą sudojest to, że to, cóż, DZIAŁA jako superużytkownik ala root, co oznacza, że ​​możesz potencjalnie zniszczyć instalację za pomocą złego polecenia. Ponieważ PIP to usługa zarządzania pakietami dla określonego programu, i tak potrzebujesz takiego dostępu, aby wprowadzić zmiany ...

EkriirkE
źródło