Você pode fazer isso com o sudo, sem dar permissões "root" ao apache.
apache <hostname> = (root) NOPASSWD: /bin/date
Que em inglês traduz aproximadamente para:
Let the apache user run the
/bin/date
command as the root user without requiring a password on server<hostname>
.
Usar sudo (ou fazer o equivalente em qualquer modelo RBAC) permite que você exponha apenas os privilégios necessários a usuários específicos para atingir suas metas.
Então, em PHP, apenas passe o sudo junto com o comando:
exec("sudo -su /bin/date <newdate>");
Além disso, se isso não funcionar para você, verifique seu arquivo /etc/sudoers
para requiretty
:
Defaults requiretty
Você precisará comentar isso, para o sudo trabalhar com o apache.