Linux: Permite que o usuário execute comandos específicos em nome de qualquer outro usuário

2

Estou tentando encontrar uma maneira de permitir que o usuário john execute um comando (digamos echo) em nome de outro usuário peter sem que seja solicitada a senha.

Encontrei um tópico que achei que seria a resposta para minha pergunta:

john ALL = (ALL) NOPASSWD: /bin/echo

Infelizmente, isso não é exatamente o que eu quero. Este comando executa o comando echo como peter , mas no contexto de john . Isso significa que o diretório inicial permanece igual ao john .

Como o usuário john , se eu executar: " sudo -u peter echo ~ ", a resposta será: /home/john . Eu quero que seja /home/peter .

O comportamento que eu esperava é fornecido pelo comando su. Como root, se eu fizer isso: su peter -c "echo ~" , recebo /home/peter .

A questão é, como obtenho o comportamento de su , sem ser root e sem ser solicitado por senha?

    
por user336416 08.02.2016 / 16:39

2 respostas

1

Você precisa especificar o -i flag para fazer o sudo ler os scripts de login & tal e defina as variáveis de ambiente como deveriam ser. Sem fazer o sudo carregar o ambiente, a variável do ambiente doméstico não é atualizada para refletir o funcionamento do usuário.

    
por 08.02.2016 / 16:54
0

"sudo -u peter echo ~" interpretará o valor de ~ antes de executar o comando sudo. Experimente

sudo -s -H -u peter echo \$HOME

ou

sudo -i -u peter echo \$HOME

Além disso, para visualizar todas as variáveis de ambiente configuradas pelo sudo try:

sudo -i -u peter export
# actually, use /usr/bin/env instead of export

UPDATE

Ao usar -i ou -s, você insinua que o SUDO_COMMAND a ser executado é o ambiente de shell do usuário especificado. Então, permitir apenas / bin / echo não é suficiente, seria necessário permitir que todos / bin / bash estivessem disponíveis.

Parece que -H é o suficiente para definir a variável de ambiente HOME, mas não é possível fazer o eco com $ HOME porque esse é um recurso de um shell. Outros programas podem ler o valor de HOME via getenv () ou métodos similares.

sudo -H -u peter  /usr/bin/env | grep SUDO_COMMAND
SUDO_COMMAND=/usr/bin/env

sudo -i -u peter /usr/bin/env | grep SUDO_COMMAND
SUDO_COMMAND=/bin/bash -c /usr/bin/env
    
por 08.02.2016 / 18:10