Tenha muito cuidado: scripts combinados com setuid são perigosos!
Primeiro, dê uma olhada nesta pergunta / respostas , especialmente nesta resposta e aviso de segurança .
Se você ainda deseja executar seu script com setuid
set, pode escrever um programa C curto como wrapper e definir o setuid
bit no binário compilado.
Exemplo de wrapper:
int main(void) {
setuid(0);
clearenv();
system("/absolute/path/to/your/script.sh");
}
Outra solução usando sudo
(mencionada aqui ):
Como root, impeça o acesso de gravação (e talvez outro) ao seu script:
raiz do chown /absolute/path/to/your/script.sh
chmod 700 /absolute/path/to/your/script.sh
Verifique se ninguém, exceto o root, pode substituir o script , por exemplo, modificando os direitos de acesso da pasta pai:
raiz do chown / absoluta / caminho / para / seu /
chmod 755 / absoluto / caminho / para / seu /
Modifique os direitos de acesso do sudo /etc/sudoers
com visudo
:
ALL ALL = (root) NOPASSWD: /absolute/path/to/your/script.sh
Mais detalhes sobre as configurações (por exemplo, restringindo o acesso a usuários ou grupos específicos) podem ser encontrados na página de manual do sudoers.
Depois, todos os usuários podem executar o script como root sem senha:
sudo /absolute/path/to/your/script.sh
Isso é semelhante ao uso da solução wrapper / setuid acima.