58 votes

Est-ce que `sudo pip install` est toujours une mauvaise pratique ?

Je suis nouveau sur Ubuntu, alors soyez indulgent avec moi. J'ai installé pip en utilisant cette commande : sudo apt-get -y install python-pip . Puis j'ai installé NLTK en utilisant la commande sur leur site web, qui était : sudo pip install -U nltk . Mais ensuite je suis tombé sur cette question qui dit que tout ce que j'ai fait était une "pratique brisée". La ligne qui m'a le plus frappé était que l'utilisation sudo pip est intrinsèquement mauvais et que donner pip Une force trop importante pourrait endommager les fichiers du système d'exploitation. Quelqu'un peut-il valider cette affirmation ?

Note - J'ai seulement utilisé sudo parce que lorsque j'ai essayé la commande apt-get -y install python-pip il m'a donné 2 erreurs :

E: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)
E: Unable to lock the administration directory (/var/lib/dpkg/), are you root?

80voto

edwinksl Points 22609

Les deux sites sudo pip install et son autre variante courante sudo -H pip install devrait no être encouragée car l'utilisation des privilèges de l'utilisateur root pour utiliser pip pour installer les paquets Python de PyPI (Python Package Index).

De https://stackoverflow.com/a/21056000/486919 (c'est moi qui souligne) :

Lorsque vous exécutez pip con sudo vous exécutez setup.py con sudo . En En d'autres termes, vous exécutez un code Python arbitraire depuis l'Internet en tant que root. Si quelqu'un met en place un projet malveillant sur PyPI et que vous l'installez, vous donner à un attaquant un accès root à votre machine. Avant que de récents corrections apportées à pip et PyPI, un attaquant pourrait également exécuter un homme dans le fichier pour injecter son code lorsque vous téléchargez un projet digne de confiance. de confiance.

Comme mentionné à https://security.stackexchange.com/a/79327/8761 il est important de noter que quelqu'un peut télécharger des paquets Python, y compris des paquets malveillants, sur PyPI.

En bref, conformément à la le principe du moindre privilège n'utilisez pas sudo con pip d'installer des paquets Python à partir de PyPI, sauf si vous en avez absolument besoin. Au lieu de cela, envisagez d'utiliser pip install --user (notez que pip install sans sudo pip install --user sur Ubuntu actuellement) ou des environnements virtuels (tels que virtualenv ). Si vous voyez des gens recommander sudo pip o sudo -H pip s'il vous plaît, dites-leur de ne pas le faire.

24voto

pizzapants184 Points 707

Vous devez utiliser sudo pour installer pip avec apt ( sudo apt install python-pip ), mais comme indiqué dans La réponse de edwinksl vous ne devez pas utiliser sudo pour installer des paquets avec pip vous devez utiliser pip install --user <package> pour installer uniquement pour votre utilisateur, ou utiliser un virtualenv pour restreindre encore davantage la portée du paquet.

Apt installe des paquets à partir des dépôts d'Ubuntu, tandis que pip installe des paquets téléchargés par l'utilisateur à partir de PyPi, qui peuvent être malveillants.

7voto

user17060 Points 296

Et pour une réponse plus tempérée :

  1. En effet, vous devez toujours sudo apt-get install ... c'est ainsi que l'outil a été conçu pour fonctionner.
  2. Utilisation de sudo [-H] con pip install est à la fois possible et facultative, en fonction de ce que vous voulez faire exactement (et donc, "controverser").

Un des Les devises de Python est "Il devrait y avoir un - et de préférence un seul - moyen évident de le faire." Et comme la plupart des devises, elle est brisée avec une jubilation sardonique à chaque fois que l'occasion se présente. (C'est pour cela que les devises existent, je suppose.) Malheureusement, à mon humble avis, l'écosystème Python est composé de nombreux éléments. conflictuel des règles "dures et rapides", à ne jamais enfreindre... sauf quand "yada yada yada" (diable, détails, etc). Dans presque tous les cas, cela est dû à l'évolution historique du langage et des outils (et qui veut/a besoin d'une leçon d'histoire quand il veut juste continuer son travail) -- mais cela peut aussi être dû aux différences entre les plateformes Mac/Win/*Nix (par exemple, Unix/Linux a une mentalité similaire, mais a l'avantage d'avoir des décennies de maturité en plus). Donc s'il vous plaît prenez toutes ces "pratique brisée" & "intrinsèquement mauvais" les adeptes du cargo avec une énorme pincée de sel. Certains veulent vraiment bien faire. (D'autres sont juste, eh bien, méchants.)

Tout d'abord, plutôt que des installations basiques "par utilisateur", vous préférerez presque toujours un virtualenv, car c'est probablement ce dont vous aurez besoin au final. Alors autant commencer par là maintenant. Comment ceci est fait, exactement, "dépend" (voir la devise de Python, ci-dessus). Si vous utilisez Conda (principalement pour Mac et Windows), il sera configuré de la manière suivante en utilisant Conda . Si vous utilisez du Python "pur [sic] cela dépend de la version et des utilitaires Python que vous avez, mais virtualenvwrapper est assez pratique.

Deuxièmement, à titre de contre-exemple à la règle "jamais sudo", vous pouvez préférer sudo -H pip install -U numpy Ce qui est parfaitement acceptable, voire avantageux, dans la mesure où cela peut permettre d'éviter de télécharger/réinstaller/maintenir de grandes bibliothèques, dont vous ne voulez/avez besoin que d'une seule version, dans chaque virtualenv séparément. Les grands frameworks populaires tels que scikit-learn, NumPy, matplotlib, SciPy, pandas, etc. peuvent être installés une fois pour toutes. réutilisé dans tous les environnements . De plus, votre administrateur système local peut être en mesure de les installer pour chaque utilisateur sur un système -- et évidemment ils le feraient via sudo ainsi que, par exemple, pour des installations plus complexes, comme TensorFlow.

Enfin, si vous installez une bibliothèque tierce aléatoire qui fait telle ou telle chose (API Twitter, traitement de texte, formatage de code, etc.), je suis tout à fait d'accord : ne l'installez pas en tant que root via sudo. Bien sûr, installez-la sous votre utilisateur actuel. Mais n'oubliez pas, votre utilisateur contient toutes vos données importantes .

3voto

Randy Zagar Points 41

L'utilisation de "sudo pip install" peut et va écraser le contenu Python fourni par le fournisseur de votre système d'exploitation. Lorsque cela se produit, tous les paquets du fournisseur affectés par ce phénomène ne passeront pas un "rpm --verify" et vos paquets sembleront être corrompus.

Voulez-vous utiliser les outils d'administration du système que votre fournisseur de système d'exploitation a mis en place ? testé ou est-il acceptable d'utiliser des composants non testés que vous avez téléchargés sur Internet ?

Quand, et non pas si, un paquet malveillant est téléchargé sur PyPI... les personnes qui utilisent "sudo pip install" finiront par exécuter cette charge utile malveillante avec tous les privilèges du système. Est-ce que vous voulez cela ? (#principleofleastprivilege)

S'il ne s'agit que de votre ordinateur portable, et que vous ne risquez que quelques photos de chats, alors le risque est probablement faible... mais s'il s'agit d'un système multi-utilisateurs, alors le risque est maintenant multiplié par N. Si vous avez des données sur le système qui ont de la valeur, ou si la disponibilité ou la fiabilité du système ont de la valeur, alors les risques augmentent également.

N'hésitez pas à choisir votre propre aventure, mais obtenez le consentement éclairé des autres utilisateurs qui pourraient être affectés par votre choix. Ils peuvent ne pas être à l'aise avec le même niveau de risque que vous.

0voto

leo Points 71

Pour ajouter à ces réponses : Je ne connais pas Ubuntu, mais sur Fedora, je suis capable d'utiliser sudo dnf install python3-numpy format à installer MANY paquets utiles pour moi. Cela n'a pas l'inconvénient d'être peu sûr (le mainteneur du repo distro a validé les paquets), mais vous permet également d'installer à l'échelle du système. Le seul inconvénient est que les versions du distro repo peuvent être légèrement en retard sur les paquets de PyPI.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X