Um aplicativo enorme precisa, em um momento específico, executar um pequeno número de gravações em um arquivo que requer permissões de root. Na verdade, não é um arquivo, mas uma interface de hardware que é exposta ao Linux como um arquivo.
Para evitar conceder privilégios de root a todo o aplicativo, escrevi um script bash que executa as tarefas críticas. Por exemplo, o seguinte script ativará a porta 17 da interface de hardware como saída:
echo "17" > /sys/class/gpio/export
echo "out" > /sys/class/gpio/gpio17/direction
No entanto, como suid
está desativado para scripts bash no meu sistema, pergunto-me qual é a melhor maneira de conseguir isso.
Use algumas soluções alternativas apresentadas aqui
Chame o script com a
sudo
partir do aplicativo principal e edite a lista de sudoers de acordo, para evitar exigir uma senha ao chamar o script. Estou um pouco desconfortável para dar privilégios ao sudoecho
.Basta escrever um programa em C, com
fprintf
e defina-o como suid root. Codifique as strings e os nomes de arquivos e verifique se apenas o root pode editá-los. Ou leia as strings de um arquivo de texto, da mesma forma, garantindo que ninguém possa editar o arquivo.Alguma outra solução que não me ocorreu e é mais segura ou mais simples que as apresentadas acima?