2010-04-01 30 views
5

¿Hay alguna forma de configurar php bajo apache para crear carpetas con la carpeta que pertenece al propietario del programa que la crea en lugar de ser propiedad de apache?Propiedad PHP mkdir y apache

Al usar Word Press, crea nuevas carpetas para cargar pero estas son propiedad de apache.apache y no del sitio en el que se están ejecutando. Esto también ocurre con ostickets. Por ahora tenemos que SSH en el servidor y modificar la carpeta, pero parece que habría una configuración en algún lugar para anular la propiedad fuera de cualquier programa que lo haga.

Respuesta

2

Safe_mode se enciende en su servidor. La función mkdir() crea una carpeta con el propietario ("apache", "ninguno", ..) diferente del propietario del script actual. Y las secuencias de comandos no podían cargar (mover, copiar) archivos en esa carpeta con otro propietario (que no es como el propietario del script actual).

Desactivar safe_mode y eso sería un trabajo.

Ver http://php.net/manual/en/features.safe-mode.php para más detalles.

P.S. Con enable safe_mode no puede usar la función chmod() en php.

+0

Esto funcionó Sanhe - Gracias –

+0

** Advertencia Esta característica ha sido DEPURADA a partir de PHP 5.3.0 y RETIRADA a partir de PHP 5.4.0. ** – Jim

1

No directamente, no. No puede "regalar" la propiedad de un archivo a otro usuario, a menos que sea root. Puede investigar usando la directiva apache "AssignUserID" para forzar a ese vhost particular a ejecutarse como un usuario/grupo particular. Con eso Apache/PHP crearía ningún archivo con la propiedad adecuada

+0

En caso de que alguien más piense que este podría ser el camino a seguir (usando el mpm_perchild_module), lo cual pensé: desde el enlace: ** Este módulo no funciona. El desarrollo de este módulo no está completo y no está actualmente activo. No use perchild a menos que sea un programador dispuesto a ayudar a solucionarlo.** – Jim

0

Salida PHP función chown()

+1

Esta función fallará si no la ejecuta el superusuario. – webbiedave

2

Otra forma es poner el usuario apache y los usuarios "clientes" en un nuevo grupo. Además, el directorio debe usar el bit adhesivo SGID para que cada nuevo archivo obtenga la asignación de grupo para este nuevo grupo. De esta manera el servidor web y los "usuarios del cliente" pueden trabajar con los archivos sin ningún problema

[17:57] [email protected] /tmp/test $ ls -al /tmp/test 
total 9 
drwxrwsr-x 2 root users 48 Apr 1 17:55 . 
drwxrwxrwt 36 root root 9264 Apr 1 17:53 .. 

Como se puede ver el directorio consiguió el sticky bit SGID y el propietario es el grupo "usuarios" en la que I (progman) a.m. No se si otro usuario añade un archivo de forma automática el grupo consiga el conjunto de este grupo

[17:55] proglap ~ # touch /tmp/test/x 

Esto se ejecuta desde la raíz. Ahora tenemos:

[17:57] [email protected] /tmp/test $ ls -la /tmp/test 
total 9 
drwxrwsr-x 2 root users 72 Apr 1 17:59 . 
drwxrwxrwt 36 root root 9264 Apr 1 17:53 .. 
-rw-r--r-- 1 root users 0 Apr 1 17:59 x 

Como se ve el archivo añadido es de raíz, pero el grupo se establece en users y de esta manera I puede quitar

[18:00] [email protected] /tmp/test $ rm x 
rm: remove write-protected regular empty file `x'? y 
[18:01] [email protected] /tmp/test $ ls -la /tmp/test 
total 9 
drwxrwsr-x 2 root users 48 Apr 1 18:01 . 
drwxrwxrwt 36 root root 9264 Apr 1 17:53 .. 

Tenga en cuenta que todavía necesita cambiar el chmod si desea editar el archivo como rw-r--r-- es solo grupo de acceso de lectura. Pero cambiar el chmod, tal vez incluso trabajando con umask, es mejor que lidiar con el acceso de root y usar chown.