Como executo comandos em um script como outro usuário?

1

Eu preciso ter um único script executando a maioria dos seus comandos como outro usuário, mas não quero instruir meus usuários a chamá-lo via sudo. Executar os comandos com um documento EOF aqui não é viável, pois há muitas variáveis para passar da entrada para várias funções definidas pelo script. Existe outra maneira de executar as funções como outro usuário, preservando a entrada e as variáveis? Isso pode ser feito sem chamar um monte de arquivos externos ou adicionar sudo a quase 300 comandos?

    
por MrDrMcCoy 28.05.2014 / 17:41

2 respostas

1

Colocar isso antes que as funções principais sejam chamadas fez o truque para mim:

    if [ "'whoami'" != "runasuser" ]; then
        sudo -u runasuser bash "$0" "$@"
        exit
    fi

Isto irá chamar o script atual em um sub shell como o usuário de sua escolha e passar toda sua entrada nele.

    
por 28.05.2014 / 17:41
1

Você pode usar o comando su da seguinte forma para fazer isso no script bash:

su -c "command" -s /bin/sh Username

Em que o parâmetro -c especifica o gasto de um único comando para o shell e o -s é usado para especificar qual shell chamar o comando.

Outra maneira de fazer isso é através do uso do sudo da seguinte forma:

sudo -H -u Username bash -c "command" 

O parâmetro -h é uma política de segurança que permite que você defina a variável de ambiente HOME para o usuário especificado ( root é por padrão ). -u especifica o usuário para executar o comando.

    
por 28.05.2014 / 22:37