Quais são os riscos de executar 'sudo pip'?


94

Ocasionalmente, recebo comentários ou respostas que afirmam enfaticamente que executar pipunder sudoé "errado" ou "ruim", mas há casos (incluindo a forma como tenho um monte de ferramentas configuradas) em que é muito mais simples ou mesmo necessário execute dessa forma.

Quais são os riscos associados ao running pipunder sudo?


Observe que esta não é a mesma pergunta que esta , que, apesar do título, não fornece informações sobre riscos. Esta também não é uma questão sobre como evitar o uso sudo, mas sobre por que especificamente se deseja.

Respostas:


103

Quando você corre pipcom sudo, você corre setup.pycom sudo. Em outras palavras, você executa o código Python arbitrário da Internet como root. Se alguém colocar um projeto malicioso no PyPI e você o instalar, você dará a um invasor acesso root à sua máquina. Antes de algumas correções recentes para pipe PyPI, um invasor também pode executar um ataque man in the middle para injetar seu código quando você baixa um projeto confiável.


2
A ameaça se aplica apenas durante pipou para qualquer execução subsequente do que foi instalado?
orome

2
Mas isso vai ser verdade eu sudoou não quando eu pip, certo? Depois de instalado, todos corremos risco, não importa como ele foi parar lá.
orome

2
@raxacoricofallapatorius Isso está entrando em um território que me incomoda responder, não porque eu não tenha nenhuma ideia (tenho um palpite e posso dar razões para isso), mas porque é notoriamente difícil de prever como mudanças aparentemente pequenas como essas afetam em geral segurança. Além disso, normalmente é extremamente simples evitar não apenas, sudomas também esses problemas de permissão, instalando os pacotes em outro lugar (por exemplo, em um virtualenv). Fazer isso pode ser ainda melhor e mais confiável, mesmo ignorando todas as questões de segurança.

2
@raxacoricofallapatorius Dependendo das permissões de gravação exatas e do layout do diretório, temo que um malware mais sofisticado substitua outro código mais confiável, como o código usado por utilitários do sistema executados rotineiramente como root.

2
Essa resposta é bizarra. Claro, quando você executa algo com sudovocê concede privilégios de root; esse é o ponto principal sudo, e certamente não é específico pip.

19

Além de riscos de segurança óbvios (que eu acho que são baixos quando você instala software, você sabe) trazidos em outras respostas, há outro motivo. O Python que vem com o sistema faz parte deste sistema e quando você deseja gerenciar o sistema, você usa ferramentas designadas para manutenção do sistema como o gerenciador de pacotes no caso de instalação / atualização / desinstalação de software. Quando você começa a modificar o software do sistema com ferramentas de terceiros (pip neste caso), você não tem garantia sobre o estado do seu sistema. Outra razão é que o sudo pode trazer problemas que você não teria chance ou teria uma chance muito pequena de ter de outra forma. Veja, por exemplo, incompatibilidade entre sys.executable e sys.version em Python

As distros estão cientes desse problema e tentam mitigá-lo. Por exemplo, Fedora - Tornando sudo pip seguro e Debian - dist-packages em vez de sites-packages .


6

Usar o pip dessa forma significa que você confia nele até o nível que permite que ele faça qualquer coisa em seu sistema. Não apenas o pip, mas também qualquer código que ele baixe e execute de fontes que você pode não confiar e que podem ser maliciosas.

E o pip não precisa de todos esses privilégios, apenas o acesso de gravação a arquivos e diretórios específicos. Se você não pode usar o gerenciador de pacotes do seu sistema e não quer seguir o caminho do ambiente virtual, você pode criar um usuário específico que tenha privilégio de gravação no diretório de instalação do python e usá-lo para pip. Dessa forma, você controla melhor o que o pip pode fazer e não fazer. E você pode usar sudo -upara isso!


Portanto, tudo o que preciso fazer é, por exemplo, permitir a mim mesmo permissões de gravação para site-packages?
orome

1
@raxacoricofallapatorius não apenas lá, já que alguns pacotes também instalam scripts auxiliares (como pipele mesmo, IPython, django, pygments, ...), portanto, você também precisará acessar qualquer diretório em que eles se instalem.
MattDMo

Sim e não. Não sou especialista em segurança, mas acho melhor se o usuário que está executando os scripts não tiver permissão de gravação. Portanto, sugiro um usuário separado.
Cilyan

@MattDMo: Sim, isso faz sentido; mas esses casos são provavelmente descobertos facilmente, pois as coisas falham sem as permissões apropriadas. Porém, se isso for feito, não é a maneira mais segura de ir, então o pior que pode acontecer ao meu sistema como um todo é o que pode acontecer quando eu executo qualquer coisa, certo? A única diferença é que eu poderia arruinar minha instalação do Python como eu (em vez de ter que ser su para fazer isso), certo?
orome

Como faço para criar esse usuário, com o único propósito de usar pip(nenhuma outra alteração no sistema, como um novo diretório pessoal, etc. é necessária)? Depois disso, presumo que apenas alterei o proprietário de site-packagespara esse usuário, correto?
orome

1

A única coisa "errada" sudoé que ele, bem, funciona como superusuário ala root, o que significa que você pode destruir uma instalação com o comando errado. Como PIP é uma manutenção de pacote para um programa específico, você precisaria desse acesso de qualquer maneira para fazer alterações ...

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.