Tenha muito cuidado: os scripts combinados com o setuid são perigosos!
Primeiro, dê uma olhada em esta pergunta / respostas , especialmente em esta resposta e aviso de segurança .
Se você ainda quiser executar o seu script com setuid
set, então você pode escrever um programa C curto como wrapper e definir o setuid
bit no binário compilado.
Exemplo de invólucro:
int main(void) {
setuid(0);
clearenv();
system("/absolute/path/to/your/script.sh");
}
Outra solução usando sudo
(mencionado aqui ):
-
Como root, impeça o acesso de gravação (e talvez outro) ao seu script:
chown root /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:
chown root /absolute/path/to/your/ chmod 755 /absolute/path/to/your/
-
Modifique os direitos de acesso do sudo em
/etc/sudoers
comvisudo
:ALL ALL = (root) NOPASSWD: /absolute/path/to/your/script.sh
Mais detalhes sobre as configurações (por exemplo, restringir 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.