Muitos serviços no Linux são executados por usuários limitados por questões de segurança e nestes casos o usuário não possuí senha ou home no sistema, não sendo possível logar-se com este usuário, afinal esta é a segurança, se o serviço for comprometido o usuário não poderá executar outras ações como logar na maquina pois não terá permissão.
Porém algumas vezes é preciso que este usuário execute comandos, um exemplo mais concreto seria o serviço HTTP(apache) que normalmente é executado com um usuário sem privilégios. Supondo que uma aplicação web precise executar um comando no sistema como consultar um arquivo texto, gravar alguma informação, executar um comando como ping ou qualquer outro, neste caso como a aplicação é esta sendo executada pelo usuário sem privilégio chamado neste exemplo "apache", este será o usuário que irá executar o comando.
Imagine agora que este comando falhe por qualquer motivo e você precise descobrir o que esta errado, não será possível logar-se com este usuário e testar o comando, e é esta solução que este artigo apresenta.
Este foi um exemplo, a necessidade de executar um comando com um usuário sem permissões pode aparecer de diversas situações diferentes.
Comando
$ Shell
sudo -H -u apache bash -c 'echo "Olá, eu sou o usuário $USER, meu uid é $UID e meu home é $HOME"'
Olá, eu sou o usuário apache, meu uid é 80 e meu home é /srv/httpd
- -H requisita que a política de segurança defina a variável de ambiente HOME sendo o diretório do usuário que irá executar o comando.
- -u user define o usuário que irá executar o comando
- bash -c 'comando' chama o shell bash para executar o comando definido após o parâmetro -c