O problema com isso é que, independentemente de como você o divide, se um usuário sem privilégios puder escrever no arquivo de script, você está deixando uma porta aberta para permitir que o usuário faça qualquer coisa, pois nesse caso / ele pode modificar o script. No entanto, não há necessidade de fazer isso, pois ele pode ter raiz e definir 0700, se quiser.
rather than setting suid and sudo privilege to Apache
Você não precisa configurar o suid em nada, e você pode usar o sudo para que o apache só possa executar esse script. Se o apache for executado como usuário httpd
, adicione a /etc/sudoers
:
httpd ALL = NOPASSWD: /foo/bar/scripts/foobar.sh
Substitua o caminho real do script ali. A chamada terá então que usar sudo /foo/bar/scripts/foobar.sh
. Mas essa é a única coisa que o usuário httpd
poderá fazer dessa maneira.
Veja man 5 sudoers
para mais detalhes.