Execute um único comando como outro usuário; restrições no sudo

0

Estou trabalhando em uma máquina onde não tenho raiz, mas há uma lista de comandos permitidos sudo . Um desses comandos é /bin/su - foouser . Assim, posso digitar sudo su - foouser e obter uma shell interativa como foouser. Então eu posso executar algumas coisas como foouser .

O problema é que foouser é um usuário / shell compartilhado usado para gerar certos processos de produção importantes. Eu não posso personalizá-lo facilmente ou configurá-lo do jeito que eu quero. E eu não deveria estar trabalhando nele de forma consistente, o que divide meus terminais e o histórico de comandos entre aqueles em que estou logado como eu e com aqueles em que estou foouser .

O que eu realmente gostaria de fazer é ter uma maneira de executar um único comando como foouser , bloqueá-lo, imprimir stdout e stderr em meu shell como um comando usualmente faria, e depois retornar comigo ainda logado como eu (e não foouser ). Isso poderia, por exemplo ser encapsulado em um script para que as_foo bar execute o comando bar , como foouser , imprima stdout e stderr, retorne o código de retorno de bar e, em seguida, coloque-me de volta no meu shell.

Posso pedir aos administradores do sistema para alterar as permissões. Por exemplo, eles poderiam adicionar bar à lista de sudo, e então eu poderia usar (eu acho) su -c para executar a barra da maneira que descrevi. Mas se no dia seguinte eu quiser correr bar2 , eu tenho que falar com eles novamente.

Existe alguma maneira de sair deste dilema? Parece um pouco bobo, porque eu obviamente posso me tornar foouser e executar tantos comandos quanto eu quiser, então não há diferença em termos de segurança que eu possa ver. Simplesmente não consigo encontrar nenhuma maneira óbvia e conveniente de tornar isso possível.

    
por Nir Friedman 23.11.2017 / 01:22

2 respostas

1

sudo su - foouser <command> exige que você tenha pelo menos um acesso root limitado para executar su - foouser <command> como root.

sudo -u foouser <command> pode fazer o que quiser em um passo. Mas isso requer que o administrador do sistema conceda a você sudo acesso à conta foouser desta maneira:

ignacio ALL=(foouser) ALL

em vez desta forma:

ignacio ALL=(root) su - foouser

Configurar sudo desta forma permitirá definir, por ex. um pseudônimo como você imaginou:

as_foo='sudo -u foouser'

E, evitando o su - , talvez você possa continuar usando suas próprias personalizações: usar sudo altera apenas a identidade do usuário, mas mantém HOME em seu valor anterior, lendo quaisquer scripts de inicialização do shell e outras personalizações do seu diretório inicial em vez de foouser 's.

(É claro que esses scripts devem ser legíveis para esse outro usuário também, e qualquer script compartilhado que você possa executar deve se referir ao diretório inicial de foouser explicitamente como /home/foouser em vez de apenas $HOME .)

No entanto, existem algumas configurações de sudo que podem impedir que a solução funcione: se a opção always_set_home sudo estiver definida no arquivo sudoers ou se a opção env_reset estiver definida sem adicionar HOME à env_keep list, HOME será redefinido de qualquer maneira. Em tal situação, tente adicionar a opção -E ao comando sudo para solicitar explicitamente a manutenção de seu ambiente.

E quando você realmente quiser executar algo como foouser com o ambiente definido exatamente como está logado como foouser (ou seja, o equivalente a sudo su - foouser ), adicione a opção -i para solicitar especificamente que . Então, sudo -i -u foouser é uma substituição 100% precisa de sudo su - foouser .

Se você encontrar algum sistema com uma versão antiga do sudo que não tenha a opção -i , use a opção -H com o sudo: não é um substituto perfeito, mas pode ser o suficiente. Uma versão tão antiga do sudo provavelmente terá alguns bugs conhecidos sensíveis à segurança também, então valeria a pena atualizá-lo de qualquer maneira.

Você pode usar sudo -l como você mesmo para ver exatamente como o seu acesso ao sudo está definido e quais opções do sudo (entradas de Padrões) estão em vigor para você.

    
por 23.11.2017 / 08:19
0

Envie argumentos adicionais para su .

sudo su - foouser sh -c 'echo $USER'
    
por 23.11.2017 / 01:34

Tags