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
.