Eu tenho um script bash de longa e longa execução, em que vários comandos precisam ser executados como root, enquanto a maioria dos comandos precisa ser executada como usuário comum antes do sudo, porque isso atrapalharia a propriedade do arquivo.
Eu vim com alguns métodos, mas cada um deles tem alguns problemas
Método 1: usando o sudo dentro do arquivo
#!/bin/bash
sudo echo "I must be run by root"
touch needsToBeOwnedByUser1
echo "needs to be run by user"
sleep 1000
sudo echo "I, again, must be run by root"
Isso ficaria bom, da maneira como o código é escrito. sudo
é escrito antes das poucas instruções que realmente precisam ser executadas pelo root, mas se o tempo entre cada sudo
chamada for muito longo sudo
novamente solicitará uma senha. Além disso, se a primeira execução de sudo
falha, por exemplo, devido a uma senha inválida, o restante do script ainda é executado.
Método 2: usando o sudo para chamar o arquivo e, em seguida, volte ao usuário original quando necessário
#!/bin/bash
echo "I must be run by root"
su username -c 'touch needsToBeOwnedByUser1'
su username -c 'echo "needs to be run by user"'
su username -c 'sleep 1000'
echo "I, again, must be run by root"
Isso também é péssimo, porque eu preciso adicionar su username -c
na frente de quase todas as linhas. Também sudo
é possível encontrar o nome de usuário original depois , mas complicado.
Existe uma maneira melhor?
Edit: Eu publiquei apenas pequenos scripts sem sentido aqui para mostrar o que estou falando. No script atual, eu tenho algumas linhas que precisam do sudo (iniciando e parando serviços), algumas linhas em que não importa se existe sudo e muitas linhas que realmente precisam ser executadas sem o sudo.
man sudo
? -v, --validate
'Atualize as credenciais em cache do usuário, autenticando o usuário, se necessário. Para o plug-in sudoers, isso prolonga o tempo limite do sudo por mais 15 minutos por padrão, mas não executa um comando. Nem todas as políticas de segurança suportam credenciais em cache. (Se você executá-lo com bastante frequência, a autenticação sudo não deve tempo limite.)
sudo
se ele precisar ter permissões elevadas. Mas não há sentido em mudarsu username -c
para executar umecho
. Em outras palavras, isso soa como um [XY]. Você pode editar e explicar o que seu script realmente fará e por que você sente que precisa trocar de usuário com tanta frequência?