shell-script

Executando comando com outro usuário dentro de um shell script

Gosto de utilizar estes comando em funções, que são necessárias para serem executadas pelo crontab do root mais por outros usuários assim mantendo as permissões nos arquivos.

Você pode utilizar o su do seguinte modo para fazer isso no shell script:

su -c "comando" -s /bin/sh nomedoUsuario

A opção -c especifica que irá passar um único comando ao shell
A opção -s é utilizado para especificar com qual shell chamaremos o comando sendo atrelado o shell à um usuário específico.

Uma outra forma para fazer isso é através do uso do sudo do seguinte modo:

sudo -h -u nomedoUsuario bash -c "comando"

A opção -h é uma política de segurança que permite definir a variável de ambiente $HOME para o usuário especificado(root é por padrão).

A opção -u especifica o usuário que irá executar o comando.

#!/bin/bash

echo 'rodando com usuário A' 
sudo -H -u nomedoUsuario bash -c "Foo"
sudo -H -u nomedoUsuario bash -c "Bar"
echo 'Rodando com Usuário B' 
sudo -H -u nomedoUsuario bash -c "Baz"

Um outro comando que pode ser utilizado para executar essa função é o  runuser. Sua sintaxe é bem prática e básica, poderemos executa-lo da seguinte forma:

 runuser -l usuario -c comando

Os comandos abaixo servem de teste, mostrando qual o usuário atual e o PID do bash:

#!/bin/bash

whoami && echo $
sleep 2
runuser -l usuario1 -c "whoami && echo $"
sleep 2
runuser -l usuario2 -c "whoami && echo $"

No meu caso testei com o script:

#!/bin/bash
whoami && echo $
sleep 2
runuser -l lucas -c "whoami && echo $"
sleep 2
runuser -l root -c "whoami && echo $"

Resultado:

root
694
lucas
694
root
694

Para mais informações rode o comando man runuser.

Sistemas Operacionais
GNU/Linux, BSD, Unix-like e Software Livre

By Lucas Rodrigues Monteiro

Bacharel em Sistemas da Informação, Certificado MCTS 70-680 / MOS, Trabalho como Administrador de Redes, Firewall e Servidores Windows e Linux! Minhas atividades favoritas são: Caminhar, Fazer Trilhas, Natureza, Insetos e claro ler sobre Tecnologia.

Deixe uma resposta

Translate »