Você não pode. O Apache é executado sob uma conta de baixo privilégio - geralmente chamada apache
ou httpd
- de propósito. A única maneira de o Apache ser configurado como você propõe é se ele for executado como root
, o que tornaria o Apache um enorme risco de segurança.
Você precisará usar o recurso de bit suid bit do sistema operacional para obter o efeito desejado.
Você não diz qual SO está usando; isso importa.
Alguns SOs sabem como executar scripts (significando qualquer coisa com uma linha shebang no topo neste contexto ) com o bit suid definido, com segurança. Isso inclui BSDs modernos e algumas variantes do SVR4.
Nesse caso, a solução é simples. Primeiro, mova os comandos que precisam ser executados como outro usuário para um script separado com uma linha PHP shebang no topo:
#!/usr/bin/php
your commands here
Em seguida, defina-o para ser executado como o outro usuário:
$ sudo chown otheruser myscript.php
$ sudo chmod u+s otheruser myscript.php
Se você estiver executando o Linux, há uma excelente chance de que o sistema operacional bloqueie os scripts. Você pode encontrar referências a soluções alternativas como perl -wT
, mas alguns sistemas operacionais ou modos de configuração nesses sistemas operacionais também o bloqueiam. Esse não é o lugar para catalogar todas as soluções alternativas e todas as maneiras pelas quais essas soluções alternativas podem ser bloqueadas. Basta dizer que, se o seu sistema operacional não tiver especificamente um recurso principal que permita a execução segura de scripts suid, você não poderá fazê-lo.
A solução padrão é criar um wrapper suid em C, assim:
int main(int argc, char* argv[])
{
execv("/full/path/to/my-script.php", argv);
}
Em seguida, execute esses comandos nesta ordem para criar o wrapper e defina suas permissões para permitir que ele seja executado como o outro usuário:
$ make my-script-wrapper
$ sudo chown otheruser my-script-wrapper
$ sudo chmod u+s my-script-wrapper
(O pedido é importante porque, toda vez que um arquivo com o bit suid é alterado, a maioria dos SOs limpa o bit suid. Não há ordenação alternativa dos três comandos que farão o que você deseja.)
Agora, quando você executar my-script-wrapper
, ele será executado como otheruser
, de modo que, quando lançar my-script.php
, esse script será executado com os privilégios de otheruser
.
O wrapper é intencionalmente extremamente simples, para evitar a introdução de falhas de segurança. Eu posso pensar em várias maneiras de torná-lo mais complicado e útil, mas cuidado com isso que você compra um pilha inteira de problemas .
Você pode querer usar apenas sudo
. Ele pode ser configurado para executar um script como um usuário diferente de root
e para ignorar a necessidade de uma senha.