O que você está pedindo é muito perigoso porque qualquer nova vulnerabilidade encontrada no Apache pode ser explorada como root. Uma das primeiras coisas que os web masters fazem ao proteger seu servidor da Web é não executar o aplicativo do servidor como root. Dito isso, ofereço a seguinte alternativa que deve atender à necessidade como você declarou.
-
Crie um script de shell que faça o que você deseja. Este não é um script PHP como o PHP é executado dentro do servidor web, você precisa de um script que é executado pelo Ubuntu. Aqui está uma amostra:
#!/bin/sh # script that runs as root whoami
Eu chamei este arquivo
/localstore/root.sh
e você deve colocá-lo em algum lugar que faça sentido em seus sistemas (por exemplo,/home/www_data/bin
). -
Em uma janela de terminal, execute o comando
sudo vi /etc/sudoers
e insira a seguinte linha no final do arquivo (importante estar no final para que os outros comandos não sejam anulados):ALL ALL=NOPASSWD: /localstore/root.sh
Isso permitirá que qualquer pessoa execute o script como root, assim que você testar e confirmar o trabalho, eu recomendo que recomende (novamente por motivos de segurança) que você altere a linha para
nobody ALL=NOPASSWD: /localstore/root.sh
mas, como Bodhi observou, o Apache deve ser executado como
www-data
. Nesse caso, você deve alterarnobody
parawww-data
. NOTA: Eu nunca tenteisudo
comnobody
como o usuário e não tenho certeza se isso funcionará. -
Em seu script de servidor da Web, execute o script de shell no PHP da seguinte forma:
< ?php exec ("sudo /localstore/root.sh"); ?>
Você pode adicionar parâmetros ao script dentro das aspas.
Isso deve fazer com que o script
root.sh
seja executado como root quando invocado em seu servidor web. Se você tiver outros scripts, eles poderão ser uma lista separada por vírgulas na mesma entrada no arquivosudoers
. Certifique-se de que as permissões no script permitam a execução pelo servidor da Web.