¿Cómo configurar PHP CLI en Linux ubuntu para que se ejecute como www-data?

12

Tengo una aplicación symfony2 en mi ubuntu. Symfony tiene muchos comandos útiles de consola (como php app/console cache:clearo php app/console assets:install web).

El problema es que si los ejecuto como rootusuario, los archivos recién generados tendrán root:rootusuario / grupo, y si accedo a mi sitio web obtengo errores (porque apache no puede leer / modificar estos archivos -> deberían tener www-data:www-data).

Ejecutar chown www-data:www-dataresuelve el problema, pero ejecutarlo cada vez que borro mi caché no es una solución.

¿Cómo puedo configurar PHP CLI para que siempre se ejecute como usuario / grupo www-data?

o

¿Cómo puedo ejecutar un comando como un usuario diferente (siendo root, ejecutarlo como www-data)?

loostro
fuente

Respuestas:

23

Ejecute un comando como otro usuario una vez:

sudo -u www-data php script.php

Esto debería funcionar si es así root.

En cuanto a ejecutar siempre php como www-data, hay varias posibilidades. Podría crear un simple shellscript de envoltura. Si /usr/bin/phpes solo un enlace suave /usr/bin/php5o similar, eso lo hace más simple. Simplemente reemplace el enlace suave (NO el archivo php5) con un script como este:

#!/bin/sh

sudo -u www-data php5 $*

return $?

Sin embargo, eso no ha sido probado. También tenga en cuenta que SIEMPRE intentará ejecutarse php5como usuario www-data, incluso si el usuario puede no serlo rooty puede que no tenga permiso para hacerlo. Y puede que tampoco sea lo que realmente quieres. Algunos servicios instalados pueden tener problemas al intentar ejecutar php.

Una solución (posiblemente mejor) para aplicar solo eso a la raíz puede ser dejar /usr/bin/phpsolo el enlace suave y colocar el script en su /root/binlugar. Luego agregue esa carpeta a PATH vía .bashrc, .profileo similar. Si es así /etc/skel/.profile, eso puede indicar cómo se hace:

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

Una vez que esté en su .bashrc, .profileo similar, cada nuevo shell que abra le permitirá ejecutar directamente cualquier ejecutable (+ x) en $HOME/bin( /root/binpara root).

Sugerencia: es posible que desee nombrar la secuencia de comandos de envoltura de phpwwwforma similar para especificar explícitamente php script.phpo phpwww script.phpdecidir si desea php regular o sudo'ed.

Otra solución es un alias simple. Coloque esto en su .bashrc, .profileo similar:

alias phpwww='sudo -u www-data php'
riha
fuente
Es curioso, ha pasado media audiencia y me topé con mi propia pregunta otra vez =) Parece que olvidé aceptar tu respuesta la última vez. ¡Lo solucioné, gracias!
loostro
El método de alias tiene mucho sentido sangriento, y resolvió mi problema exacto
RedactedProfile
1

Respondido por mwargh en ## linux (IRC Freenode.net)


Para ejecutar comandos como un usuario diferente -> cambie a ese usuario usando:

su www-data

Todavía estaría interesado (si es posible) en configurar PHP para que se ejecute:

root@mycomp php (php script creating a file)

como usuario root

resultará en la creación de un archivo con www-data: usuario / grupo www-data

(de esta manera no tendría que cambiar de root a www-data para ejecutar mis comandos)

loostro
fuente
1

Intentaría hacer / usr / bin / php propiedad de www-data y establecer el permiso suid, lo que obliga al propietario del archivo a ejecutar el comando. Harías esto con:

chmod u+s /usr/bin/php

de ustedes les gusta la notación octal:

chmod 4755 /usr/bin/php

Aunque debo decir que debería incomodarlo cada vez que haga que www-data sea el propietario de cualquier cosa, ya que el objetivo de la cuenta de www-data es poseer lo menos posible.

estofado
fuente
Es por eso que iré con la respuesta de
Riha
1

si obtuvo el php-fpm (FastCGI Process Manager)
puede configurarlo en el archivo de configuración ubicado en (al menos para centos): /etc/php-fpm.d/www.conf
en la línea 39 puede configurar el usuario y 49 configurar el grupo

VeXii
fuente
Eso no se aplica php-cli, ¿verdad?
riha
1

crear archivo de script:

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

agregar contenido:

#!/bin/bash

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

ejecuta tus scripts desde la raíz:

phpuid /path/to/script.php

o use intérprete en sus guiones

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

nota: probado en Debian 7, puede que necesite instalar sudo

apt-get install sudo

todos los archivos creados por script.php tendrán el mismo uid de ese script

palmero
fuente