em vez de tentar dar direitos de sudo de usuário de apache / http, a maneira usual é criar binário de wrapper suid assim:
$ sudo gcc -o suidmotion -xc - <<cEnd
#include "stdlib.h"
#include "string.h"
int main(int argc, char *argv[])
{ if (argc ==2)
{ if (!strcmp(argv[1], "start")) system("/etc/init.d/motion start");
if (!strcmp(argv[1], "stop" )) system("/etc/init.d/motion stop");
}
}
cEnd
$ sudo chmod +s suidmotion
... e do que no php para chamar shell_exec("/path/to/suidmotion start/stop");
sudo gcc
produzirá o binário de saída suidmotion
pertencente a root:root
e chmod +s
garantirá que os direitos binários na execução serão escalados para o proprietário binário (raiz), independentemente de quem o executar.