Por uma questão de integralidade, você pode conseguir um efeito similar definindo setuid bit nas permissões do arquivo.
Uma parte um pouco complicada é que por razões de segurança setuid bit em scripts é ignorado pelo kernel, então você precisará compilar um pequeno programa wrapper em C e usá-lo para invocar seu script. Salve isso como runscript.c :
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
setuid( 0 );
system( "/path/to/script.sh" );
return 0;
}
depois compile com
gcc runscript.c -o runscript
e defina setuid bit no executável:
sudo chown root:root runscript
sudo chmod 4755 runscript
Também é importante certificar-se de que seu script é apenas gravável pelo usuário root, já que todos que podem modificar o script poderão executar programas arbitrários:
sudo chown root:root /path/to/script.sh
sudo chmod 0711 /path/to/script.sh
Aqui está um artigo que eu tenho o código do programa wrapper de: setuid em scripts de shell .
Em termos de segurança, ambas as abordagens - a que tem sudo e a que tem setuid - são muito ruins, mas provavelmente ficarão boas em uma máquina doméstica. A diferença é que todos os usuários do sistema poderão executar um comando setuid , mesmo sem estar no arquivo sudoers . Além disso, obviamente, você não precisará prefixar o comando com sudo .