Які ризики запуску "sudo pip"?


97

Іноді я біжу в коментарі або відповіді , які держава рішуче , що запуск pipUnder sudo«неправильно» або «погано», але є випадки ( в тому числі , як у мене є купа інструментів , створених) , де він або набагато простіше, або навіть необхідно запустити так.

Які ризики , пов'язані з запуском pipпід sudo?


Зверніть увагу, що це не те саме питання, що й це , яке, незважаючи на заголовок, не містить інформації про ризики. Це також не питання про те, як уникнути використання sudo, а про те, чому саме цього хочеться.

Відповіді:


103

Коли ти бігаєш pipіз sudo, ти бігаєш setup.pyіз sudo. Іншими словами, ви запускаєте довільний код Python з Інтернету як root. Якщо хтось розміщує шкідливий проект на PyPI, і ви встановлюєте його, ви надаєте зловмиснику root-доступ до вашої машини. До деяких нещодавніх виправлень pipта PyPI зловмисник також міг запустити людину в середині атаки, щоб внести їх код під час завантаження надійного проекту.


2
Чи застосовується загроза лише під час pipабо для будь-якого подальшого запуску встановленого ним?
orome

2
Але це буде правдою незалежно від того, я sudoчи ні pip, правда? Після встановлення ми всі ризикуємо, як би там не потрапили?
orome

2
@raxacoricofallapatorius Це потрапляння на територію, на яку мені незручно відповідати, не тому, що я не маю жодної ідеї (я здогадуюсь і можу наводити причини для цього), а тому, що, як відомо, важко передбачити, як подібні, здавалося б, невеликі зміни впливають загалом безпеки. Крім того, як правило, надзвичайно просто уникнути не лише sudoцих питань, але й цих дозволів, встановивши пакунки де-небудь ще (наприклад, у virtualenv). Це може бути навіть кращим та надійнішим, навіть якщо ігнорувати всі проблеми безпеки.

2
@raxacoricofallapatorius Залежно від точних дозволів на запис та розташування каталогів, я боюся, що більш досконале шкідливе програмне забезпечення перезапише інший, більш надійний код, такий як код, що використовується системними утилітами, що зазвичай виконуються як root.

2
Ця відповідь химерна. Звичайно, коли ви запускаєте щось із sudoсобою, надайте йому права root; в цьому вся суть sudoі, звичайно, не специфічна для pip.

19

Окрім очевидних ризиків безпеки (які, на мою думку, насправді низькі при встановленні відомого вами програмного забезпечення), що виникають у інших відповідях, є ще одна причина. Python, який постачається з системою, є частиною цієї системи, і коли ви хочете керувати системою, ви використовуєте інструменти, призначені для обслуговування системи, такі як менеджер пакунків у разі встановлення / оновлення / видалення програмного забезпечення. Коли ви починаєте модифікувати програмне забезпечення системи за допомогою сторонніх інструментів (піп у цьому випадку), ви не маєте жодних гарантій щодо стану вашої системи. Ще однією причиною є те, що судо може принести вам проблеми, у яких ви б не мали шансів або мали б дуже малий шанс мати інакше. Див., Наприклад, Невідповідність між sys.executable та sys.version у Python

Дистриб'ютори усвідомлюють цю проблему і намагаються її пом'якшити. Наприклад, Fedora - Забезпечення sudo pip безпечним, а Debian - dist-пакунки замість пакетів сайту .


6

Використання піпа таким чином означає, що ви довіряєте йому до рівня, який дозволяє йому зробити що-небудь для вашої системи. Не тільки pip, але й будь-який код, який він буде завантажувати та виконувати з джерел, яким ви можете не довіряти, і які можуть бути шкідливими.

І pip не потребує всіх цих привілеїв, лише доступ на запис до певних файлів та каталогів. Якщо ви не можете використовувати менеджер пакетів вашої системи і не хочете йти шляхом віртуального середовища, ви можете створити конкретного користувача, який має привілеї на запис в директорію встановлення python, і використовувати його для pip. Таким чином, ви краще контролюєте, що pip може робити, а чого не робити. І ви можете використовувати sudo -uдля цього!


Отже, все, що мені потрібно зробити, це, наприклад, дозволити собі дозволи на запис site-packages?
orome

1
@raxacoricofallapatorius не просто там, оскільки деякі пакети також встановлюють допоміжні скрипти (як він pipсам, IPython, django, пігменти, ...), тому вам також буде потрібен доступ до будь-якого каталогу, в який вони встановлюються самі.
MattDMo

Так і ні. Я не фахівець з питань безпеки, але вважаю, що краще, якщо користувач, який запускає сценарії, не має дозволу на запис. Тому я пропоную скоріше окремого користувача.
Cilyan

@MattDMo: Так, це має сенс; але ці випадки, напевно, легко виявити, оскільки речі не вдаються без відповідних дозволів. Якщо все-таки це зробити, хіба це не найбезпечніший спосіб, то найгірше, що може статися з моєю системою в цілому, - це те, що може статися, коли я що-небудь запускаю, так? Єдина відмінність полягає в тому, що я міг би потенційно зіпсувати свою установку Python як я (а не для того, щоб це робити), так?
orome

Як мені створити такого користувача з єдиною метою використання pip(ніяких інших змін у системі, таких як новий домашній каталог тощо)? Після цього я припускаю, що я просто змінив власника site-packagesна цього користувача, правильно?
orome

1

Єдине, що "не так", sudoце те, що це, ну, робить це суперкористувачем, але корінь, що означає, що ви потенційно можете знищити установку неправильною командою. Оскільки PIP - це обслуговування пакетів для певної програми, вам потрібен буде такий доступ для внесення змін ...

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.