Quels sont les risques liés à l'exécution de «sudo pip»?

97

Parfois, je rencontre des commentaires ou des réponses qui déclarent catégoriquement que courir pipsous sudoest "faux" ou "mauvais", mais il y a des cas (y compris la façon dont j'ai mis en place un tas d'outils) où il est soit beaucoup plus simple, voire nécessaire de exécutez-le de cette façon.

Quels sont les risques associés à la pipsous-utilisation sudo?


A noter que ce n'est pas la même question que celle-ci , qui, malgré le titre, ne donne aucune information sur les risques. Ce n'est pas non plus une question de savoir comment éviter d'utiliser sudo, mais de savoir pourquoi on le voudrait.

orome
la source

Réponses:

103

Lorsque vous courez pipavec sudo, vous courez setup.pyavec sudo. En d'autres termes, vous exécutez du code Python arbitraire à partir d'Internet en tant que root. Si quelqu'un met en place un projet malveillant sur PyPI et que vous l'installez, vous donnez à un attaquant un accès root à votre machine. Avant quelques correctifs récents de pipet PyPI, un attaquant pouvait également lancer une attaque de type homme au milieu pour injecter son code lorsque vous téléchargez un projet digne de confiance.


la source
2
La menace s'applique-t-elle uniquement pendant pipou pour toute exécution ultérieure de ce qu'elle a installé?
orome
2
Mais ce sera vrai que je sois sudoou non quand je pip, non? Une fois qu'il est installé, nous sommes tous à risque, peu importe comment il y est arrivé?
orome
2
@raxacoricofallapatorius Ceci entre dans un territoire auquel je ne suis pas à l'aise de répondre, non pas parce que je n'ai aucune idée (j'ai une intuition et je peux en donner des raisons) mais parce qu'il est notoirement difficile de prédire comment des changements apparemment mineurs comme ceux-ci affectent globalement Sécurité. De plus, il est généralement extrêmement simple d'éviter non seulement sudomais aussi ces problèmes d'autorisation en installant les paquets ailleurs (par exemple dans un virtualenv). Cela peut même être meilleur et plus fiable, même en ignorant tous les problèmes de sécurité.
2
@raxacoricofallapatorius En fonction des autorisations d'écriture exactes et de la disposition du répertoire, je crains que des logiciels malveillants plus sophistiqués n'écrasent d'autres codes plus fiables, tels que le code utilisé par les utilitaires système exécutés régulièrement en tant que root.
2
Cette réponse est bizarre. Bien sûr, lorsque vous exécutez quelque chose avec, sudodonnez-lui les privilèges root; c'est tout l'intérêt de sudo, et certainement pas spécifique à pip.
19

Outre les risques de sécurité évidents (qui, je pense, sont en fait faibles lorsque vous installez un logiciel que vous connaissez) ont apporté d'autres réponses, il y a une autre raison. Python fourni avec le système fait partie de ce système et lorsque vous souhaitez gérer le système, vous utilisez des outils destinés à la maintenance du système comme le gestionnaire de packages en cas d'installation / mise à niveau / désinstallation de logiciels. Lorsque vous commencez à modifier le logiciel du système avec des outils tiers (pip dans ce cas), vous n'avez aucune garantie sur l'état de votre système. Une autre raison est que sudo peut vous apporter des problèmes que vous n'auriez aucune chance ou que vous n'auriez qu'une très petite chance d'avoir autrement. Voir par exemple Inadéquation entre sys.executable et sys.version en Python

Les distributeurs sont conscients de ce problème et essaient de l'atténuer. Par exemple Fedora - Rendre sudo pip sûr et Debian - paquets dist au lieu de paquets site .

Piotr Dobrogost
la source
6

Utiliser pip de cette façon signifie que vous lui faites confiance au niveau que vous lui permettez de faire quoi que ce soit à votre système. Non seulement pip, mais aussi tout code qu'il téléchargera et exécutera à partir de sources auxquelles vous ne pouvez pas faire confiance et qui peuvent être malveillants.

Et pip n'a pas besoin de tous ces privilèges, seulement de l'accès en écriture à des fichiers et répertoires spécifiques. Si vous ne pouvez pas utiliser le gestionnaire de packages de votre système et que vous ne souhaitez pas utiliser l'environnement virtuel, vous pouvez créer un utilisateur spécifique disposant du privilège d'écriture dans le répertoire d'installation de python et l'utiliser pour pip. De cette façon, vous contrôlez mieux ce que pip peut faire et ne pas faire. Et vous pouvez utiliser sudo -upour cela!

Cilyan
la source
Donc, tout ce que j'ai à faire est, par exemple, de me permettre d'écrire sur site-packages?
orome
1
@raxacoricofallapatorius n'est pas seulement là, car certains paquets installent également des scripts d'aide (comme piplui-même, IPython, django, pygments, ...), vous aurez donc également besoin d'accéder au répertoire dans
lequel
Oui et non. Je ne suis pas un expert en sécurité, mais je pense qu'il vaut mieux que l'utilisateur exécutant les scripts ne dispose pas des droits d'écriture. Par conséquent, je suggère plutôt un utilisateur distinct.
Cilyan
@MattDMo: Oui, cela a du sens; mais ces cas sont probablement facilement découverts car les choses échouent sans les autorisations appropriées. Si cela est fait, n'est-ce pas la façon la plus sûre de procéder, le pire qui puisse arriver à mon système dans son ensemble est ce qui peut arriver quand je lance quoi que ce soit, non? La seule différence est que je pourrais potentiellement ruiner mon installation Python en tant que moi (plutôt que d'avoir à être su pour le faire), non?
Oromë
Comment créer un tel utilisateur, dans le seul but de l'utiliser pip(aucune autre modification du système, comme un nouveau répertoire personnel, etc. n'est nécessaire)? Après cela, je suppose que je change le propriétaire de site-packagesà cet utilisateur, n'est- ce pas?
orome
1

La seule chose qui "ne va pas" sudoest que cela fonctionne en tant que super utilisateur, c'est-à-dire que vous pouvez potentiellement détruire une installation avec la mauvaise commande. Comme PIP est une maintenance de package pour un programme particulier, vous auriez besoin d'un tel accès de toute façon pour apporter des modifications ...

EkriirkE
la source