Como posso usar 'sudo' com um comando, mas ainda assim serei eu mesmo?

3

Meu SysAdmin está exigindo que eu use sudo para executar um determinado script. Esse script (dependendo de qual subcomando você passar como argumento) se conecta a outra máquina usando chaves ssh, mas isso está falhando, presumivelmente porque é executado como root e não como eu.

Como eu ainda posso usar sudo (que meu sysadmin requer e que eu não tenho o poder de alterar) para obter privilégios para executar o script e, ainda assim, executar o comando com acesso às minhas chaves ssh?

    
por iconoclast 05.10.2012 / 19:38

3 respostas

4

Dependendo de como o sudo foi configurado, ele pode sobrescrever a maioria das variáveis de ambiente. Em particular, é provável que substitua SSH_AUTH_SOCK e pode sobrescrever HOME . Isso não é algo que você pode consertar sem alterar a configuração do sudo.

Você pode ver a configuração do sudo (e em particular quais variáveis de ambiente são preservadas) executando sudo -V como root. É um recurso que você não pode ver a configuração como um usuário sem privilégios.

É possível que o administrador do sistema tenha bloqueado suas permissões sudo para que o script não possa usar as chaves ssh. Esta poderia ser uma política de segurança, e se ela for implementada corretamente, então, por definição, você não pode consertá-la sozinho, você precisará do seu administrador de sistema para alterar a configuração.

É difícil saber o que é necessário sem saber o que o script faz e qual é a configuração do sudo. Talvez uma linha sudoers como a seguinte possa ajudar (ela diz ao sudo para preservar a variável de ambiente SSH_AUTH_SOCK se o comando a executar for /path/to/script ):

Defaults!/path/to/script env_keep+=SSH_AUTH_SOCK

Se o script for executado como um usuário que não é você nem root, você terá que conceder a esse usuário permissão para ler suas chaves ou acessar seu agente.

    
por 05.10.2012 / 20:39
3

Duas coisas vêm à mente. Primeiro, edite o script para que apenas os comandos que precisam de privilégios elevados sejam executados com sudo . Isso deve permitir que sua conexão ssh funcione. Isso tem a vantagem de executar com privilégios elevados somente os comandos que precisam dele. Execute o comando sem sudo na linha de comando, confiando no fato de que as chamadas sudo no script farão a coisa certa.

Em segundo lugar, edite o script para que ele defina explicitamente o nome do usuário ao qual se conectar. Você pode usar a variável $SUDO_USER , que contém o nome de usuário do usuário que iniciou a sessão sudo atual. Isso deve fazer o truque:

ssh "${SUDO_USER}@remotehost.example.com"
    
por 05.10.2012 / 20:34
1

O ID do usuário sempre mudará com o sudo, mas você pode preservar seu ambiente com o parâmetro -E.

    
por 05.10.2012 / 20:48

Tags