Como evitar que um usuário sudo veja os dados de outro usuário sudo?

Como evitar que um usuário sudo veja os dados de outro usuário sudo?

Sou novo no Linux (Ubuntu, se isso importa). Minha empresa possui vários usuários sudo em uma máquina. A situação é assim:

  1. Todos desejam privilégio de usuário sudo porque afirmam que precisam instalar pacotes python durante seu trabalho (eles são engenheiros de IA)

  2. Cada usuário mantém chaves rsa privadas em sua pasta pessoal para puxar/enviar rapidamente para o github.

Então, teoricamente, se um usuário sudo se tornar rouge, ele pode simplesmente pegar a chave privada de todos, impô-la e extrair o código-fonte ao qual não tem direito. Como posso evitar que isso aconteça?

Obrigado

Responder1

Não estou dando uma resposta direta à sua pergunta, pois você está descrevendo umProblema XY. Este é o seu subjacente,realproblema:

Todo mundo quer privilégio de usuário sudo porque afirma que precisa instalar pacotes python durante seu trabalho

A questão é esta:ninguém precisa usar sudopara instalar pacotes Python.Na verdade, isso é altamente desencorajado. Particularmente se você tiver várias pessoas usando o mesmo sistema, não poderá impedir que alguém mexa nos pacotes de nível de sistema que outros possam exigir. E se houver conflitos de versão, alterações significativas em alguns pacotes, etc.?

Solução 1 – Instalações em nível de usuário

A solução real é usar instalações de pacotes Python em nível de usuário. Ou seja, em vez de sudo pip install …, faça:

pip install --user pandas

Isso instalará o pacote no diretório inicial do respectivo usuário e deixará a biblioteca de pacotes do sistema em paz.

Não consigo enfatizar isso o suficiente: nada de bom resulta do uso sudode with pip.

Solução 2 – Pipenv ou Poesia

Uma solução ainda melhor envolveusandopipenvoupoetry, que criam um ambiente virtual para os pacotes residirem.

Os pacotes e versões podem até ser diferentes para projetos diferentes — isso é particularmente importante se você precisar que um pacote permaneça em uma determinada versão por um tempo (por exemplo, pandasé famoso por alterar sua API; scipyteve algumas alterações importantes há algum tempo, …) .

Eu teria recomendado o Pipenv, mas a partir de 2020, faltava bastante manutenção e não havia nenhum lançamento há muito tempo.

Para usar o Poetry, basta instalá-lo por usuário:

pip install --user poetry

Em seguida, inicialize um novo ambiente para o projeto atual:

cd /path/to/project
poetry install pandas

Isso criará um novo arquivo de configuração do Poetry que especifica os requisitos para o projeto atual. Corra poetrypara saber mais ou leia a documentação.

Solução 3 -pyenv

A melhor maneira de fazer isso seria fazer com que os usuários instalassem sua própria versão do Python. Você pode usarpyenvpara criar instalações em nível de usuário de distribuições inteiras do Python. Dessa forma, os usuários podem usar qualquer versão do Python com a qual seu projeto Pipenv foi inicializado, por exemplo, permanecer na 3.7 por um tempo até que queiram atualizar para a 3.8.

Isso é particularmente bom se você não quiser quebrar os pacotes de todos executando uma pequena atualização do Python no nível do sistema, caso seja necessário.


Resumindo: não conceda acesso sudo a usuários regulares se não for necessário. Peça-lhes que usem seu próprio espaço de usuário para instalar pacotes Python e/ou Python.

Advertência: alguns pacotes Python podem precisar de bibliotecas específicas para serem construídos com sucesso. Você realmente não pode evitar instalações dessas bibliotecas em nível de sistema, mas em casos raros, um administrador pode estar disposto a usar sudo apt install …qualquer biblioteca necessária.

Responder2

Presumivelmente, os desenvolvedores Python estão se conectando a esta máquina remotamente, sshem vez de fazer login diretamente no console.

Nesse caso, então suas chaves privadasnão deveriaestar na máquina compartilhada, exatamente por esse motivo. Em vez disso, eles devem ser executados ssh-agentem suas máquinas locais e conectar-se à máquina compartilhada usando ssh -A(ou configurado ForwardAgent yespara esse host em ~/.ssh/config) e manter as chaves privadas apenas em suas máquinas locais. O uso ssh-agentdo encaminhamento de agente fará com que a máquina remota (compartilhada) encaminhe com segurança solicitações de autenticação (como do github) de volta para a ssh-agentmáquina local do usuário, onde a autenticação RSA será realizada sem a necessidade de divulgar a chave privada do usuário para qualquer host diferente de sua máquina local.

(Se a máquina local estiver executando o Windows em vez de uma variante Linux/Unix, o cliente ssh do Windows ainda deverá fornecer o encaminhamento do agente ssh de alguma maneira, mas não sei como ele seria acessado. Verifique sua documentação para obter detalhes.)

Responder3

A solução seria dar aos desenvolvedores python permissão para sudo apenas os comandos que eles realmente precisam. Os comandos permitidos são totalmente especificados, incluindo argumentos, e caracteres curinga são possíveis.

A seguir está uma resposta da postagem Unix Stackexchange
Como executar remotamente o comando ssh um comando sudo sem senha.

você pode dizer ao sudo para pular a senha de algum comando.

por exemplo, em/etc/sudoers

archemar  ALL = (www-data) NOPASSWD: /bin/rm -rf /var/www/log/upload.*

isso me permite usar

sudo -u www-data /bin/rm -rf /var/www/log/upload.*

como archemar sem senha.

Observe que

sudo -u www-data rm -rf /var/www/log/upload.*

não funcionará (pedirá uma senha), pois rmé diferente de /bin/rm.

Certifique-se de editar /etc/sudoersusando visudoo comando.

Depois de atingir o nível avançado, você pode querer ter seus próprios sudoarquivos no formato /etc/sudoers.d.

informação relacionada