Como configurar o PHP CLI no linux ubuntu para rodar como www-data?

8

Eu tenho uma aplicação symfony2 no meu Ubuntu. O symfony tem vários comandos úteis para o console (como php app/console cache:clear ou php app/console assets:install web ).

O problema é que se eu executá-los como root user os arquivos recém-gerados terão root:root user / group, e se eu acessar meu website eu recebo erros (porque o apache não pode ler / modificar esses arquivos - > deve ter www-data:www-data ).

A execução de chown www-data:www-data soluciona o problema, mas executá-lo toda vez que eu limpo meu cache não é uma solução.

Como posso configurar o PHP CLI para sempre executar como www-data user / group?

ou

Como posso executar um comando como um usuário diferente (sendo root, execute-o como www-data)?

    
por loostro 30.11.2012 / 12:30

5 respostas

16

Execute um comando como outro usuário uma vez:

sudo -u www-data php script.php

Isso deve funcionar se você for root .

Como sempre rodando o php como www-data , existem várias possibilidades. Você poderia criar um shellscript de wrapper simples. Se /usr/bin/php for apenas um link para /usr/bin/php5 ou similar, isso torna mais simples. Basta substituir o link (NÃO o arquivo php5 ) por um script como este:

#!/bin/sh

sudo -u www-data php5 $*

return $?

Isso não foi testado. Também esteja ciente de que isso SEMPRE tentará executar php5 como usuário www-data , mesmo que o usuário não seja root e talvez não tenha permissão para fazê-lo. E também pode não ser o que você realmente quer. Alguns serviços instalados podem ter problemas ao tentar executar o php.

Uma solução (possivelmente melhor) para aplicar somente isso ao root pode ser deixar o link de software /usr/bin/php sozinho e colocar o script em /root/bin . Em seguida, adicione essa pasta ao PATH por meio de .bashrc , .profile ou similar. Se você tiver /etc/skel/.profile , isso pode indicar como isso é feito:

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

Uma vez que isso esteja no seu .bashrc , .profile ou similar, todo novo shell que você abrir permitirá que você execute diretamente quaisquer executáveis (+ x) em $HOME/bin ( /root/bin para root).

Dica: você pode querer nomear o script do wrapper como phpwww , então você especifica explicitamente php script.php ou phpwww script.php para decidir se quer um php normal ou sudo'ed.

Outra solução é um alias simples. Coloque isso no seu .bashrc , .profile ou similar:

alias phpwww='sudo -u www-data php'
    
por 30.11.2012 / 13:07
0

Respondido pelo mwargh no ## linux (IRC Freenode.net)

Para executar um comando como um usuário diferente - > mudar para esse usuário usando:

su www-data

Eu ainda estaria interessado (se possível) em configurar o PHP para que ele seja executado:

root@mycomp php (php script creating a file)

como usuário raiz

resultará na criação de um arquivo com www-data: www-data usuário / grupo

(desta forma eu não teria que mudar de raiz para www-data para executar meus comandos)

    
por 30.11.2012 / 12:44
0

Eu tentaria fazer / usr / bin / php pertencer a www-data e definir a permissão suid, que força o comando a ser executado pelo proprietário do arquivo. Você faria isso com:

chmod u+s /usr/bin/php

de você gosta da notação octal:

chmod 4755 /usr/bin/php

Embora eu deva dizer que você deve ficar um pouco desconfortável sempre que você estiver fazendo o www-data o proprietário de qualquer coisa, já que o objetivo da conta www-data é possuir o mínimo possível.

    
por 30.11.2012 / 13:04
0

se você tiver o php-fpm (FastCGI Process Manager)
 você pode configurá-lo no arquivo de configuração localizado em (atleast for centos): /etc/php-fpm.d/www.conf
 na linha 39 você pode definir o usuário e 49 você define o grupo

    
por 30.11.2012 / 13:12
0

crie um arquivo de script:

touch /usr/bin/phpuid
chmod +x /usr/bin/phpuid

adicione conteúdo:

#!/bin/bash

UIDX="#"'stat -c '%u' $1'
sudo -u $UIDX php5 $*

execute seus scripts a partir do root:

phpuid /path/to/script.php

ou use intérprete nos seus scripts

#!/usr/bin/phpuid
<?php
phpinfo();

nota: testado no debian 7 você pode precisar instalar o sudo

apt-get install sudo

todos os arquivos criados pelo script.php terão o mesmo uid desse script

    
por 28.06.2016 / 15:04