¿Cuáles son los riesgos de ejecutar 'sudo pip'?

97

De vez en cuando me encuentro con comentarios o respuestas que afirman enfáticamente que correr por pipdebajo sudoes "incorrecto" o "malo", pero hay casos (incluida la forma en que tengo un montón de herramientas configuradas) en los que es mucho más simple o incluso necesario ejecutarlo de esa manera.

¿Cuáles son los riesgos asociados con correr por pipdebajo sudo?


Tenga en cuenta que esta no es la misma pregunta que esta , que, a pesar del título, no proporciona información sobre riesgos. Esto tampoco es una pregunta sobre cómo evitar el uso sudo, sino específicamente por qué uno querría hacerlo.

orome
fuente

Respuestas:

103

Cuando corres pipcon sudo, corres setup.pycon sudo. En otras palabras, ejecuta código Python arbitrario desde Internet como root. Si alguien coloca un proyecto malicioso en PyPI y usted lo instala, le otorga al atacante acceso de root a su máquina. Antes de algunas correcciones recientes de pipPyPI, un atacante también podía ejecutar un ataque de hombre en el medio para inyectar su código cuando descarga un proyecto confiable.


fuente
2
¿La amenaza se aplica solo durante pipo para cualquier ejecución posterior de lo que instaló?
orome
2
Pero eso será cierto si yo sudoo no cuando yo pip, ¿verdad? Una vez que está instalado, todos corremos riesgo, sin importar cómo llegó allí.
Orome
2
@raxacoricofallapatorius Esto es entrar en un territorio que me incomoda responder, no porque no tenga ninguna idea (tengo una corazonada y puedo dar razones para ello) sino porque es notoriamente difícil predecir cómo los cambios aparentemente pequeños como estos afectan en general seguridad. Además, normalmente es extremadamente sencillo evitar no solo sudoestos problemas de permisos instalando los paquetes en otro lugar (por ejemplo, en un virtualenv). Hacerlo puede incluso ser mejor y más confiable incluso si se ignoran todas las preocupaciones de seguridad.
2
@raxacoricofallapatorius Dependiendo de los permisos de escritura exactos y el diseño del directorio, me temo que un malware más sofisticado sobrescribirá otro código más confiable, como el código utilizado por las utilidades del sistema que se ejecutan habitualmente como root.
2
Esta respuesta es extraña. Por supuesto, cuando ejecuta algo con sudole otorga privilegios de root; ese es el objetivo de sudo, y ciertamente no es específico de pip.
19

Además de los riesgos de seguridad obvios (que creo que de hecho son bajos cuando instalas un software que conoces) traído otras respuestas, hay otra razón. Python que viene con el sistema es parte de este sistema y cuando desea administrar el sistema, utiliza herramientas designadas para el mantenimiento del sistema, como el administrador de paquetes en caso de instalar / actualizar / desinstalar software. Cuando comienza a modificar el software del sistema con herramientas de terceros (pip en este caso), no tiene garantía sobre el estado de su sistema. Otra razón más es que sudo puede traerle problemas que de otra manera no tendría o no tendría. Consulte, por ejemplo, Discrepancia entre sys.executable y sys.version en Python

Las distribuciones son conscientes de este problema e intentan mitigarlo. Por ejemplo, Fedora - Haciendo que sudo pip sea seguro y Debian - dist-packages en lugar de site-packages .

Piotr Dobrogost
fuente
6

Usar pip de esa manera significa que confía en él hasta el nivel que le permite hacer algo en su sistema. No solo pip, sino también cualquier código que descargue y ejecute de fuentes en las que no confíe y que pueda ser malicioso.

Y pip no necesita todos esos privilegios, solo el acceso de escritura a archivos y directorios específicos. Si no puede usar el administrador de paquetes de su sistema y no desea seguir el camino del entorno virtual, puede crear un usuario específico que tenga privilegios de escritura en el directorio de instalación de Python y usarlo para pip. De esa manera, controlas mejor lo que pip puede hacer y lo que no. ¡Y puedes usarlo sudo -upara eso!

Cilyan
fuente
Entonces, todo lo que necesito hacer es, por ejemplo, permitirme escribir permisos para site-packages?
orome
1
@raxacoricofallapatorius no solo está ahí, ya que algunos paquetes también instalan scripts auxiliares (como él pipmismo, IPython, django, pygments, ...) por lo que también necesitará acceso a cualquier directorio en el que se instalen.
MattDMo
Si y no. No soy un experto en seguridad, pero creo que es mejor si el usuario que ejecuta los scripts no tiene permiso de escritura. Por lo tanto, sugiero un usuario más bien separado.
Cilyan
@MattDMo: Sí, tiene sentido; pero esos casos probablemente se descubran fácilmente ya que las cosas fallan sin los permisos adecuados. Sin embargo, si se hace, ¿no es esa la forma más segura de hacerlo, entonces lo peor que le puede pasar a mi sistema en general es lo que puede suceder cuando ejecuto algo de todos modos, verdad? La única diferencia es que podría arruinar mi instalación de Python como yo (en lugar de tener que ser su para hacerlo), ¿verdad?
Orome
¿Cómo creo un usuario de este tipo, con el único propósito de usar pip(no se necesitan otros cambios en el sistema, como un nuevo directorio de inicio, etc.)? Después de eso, supongo que solo cambio el propietario de site-packagesese usuario, ¿correcto?
orome
1

Lo único "malo" sudoes que, bueno, SÍ como superusuario como root, lo que significa que potencialmente puede destruir una instalación con el comando incorrecto. Como PIP es un paquete de mantenimiento para un programa en particular, necesitaría dicho acceso de todos modos para realizar cambios ...

EkriirkE
fuente