2011-03-02 15 views
21

Parece que no puedo crear archivos. Cuando establezco los permisos en 777 En la carpeta en la que intento crear una carpeta, el script funciona bien. Si la carpeta está configurada en 755, falla. No sé mucho sobre Linux, pero se supone que debo resolver esto. He pasado un par de horas intentando cosas. ¿Alguien sabe cómo hacerlo para que apache tenga suficientes permisos?Permisos de Apache, crear archivo PHP, MKDir fail



Sé que es un problema de permisos y Apache, i no sé cómo solucionar este problema. He editado el archivo httpd.conf, pero realmente no sé lo que estoy haciendo ... ¿Alguna ayuda? (Guarde la copia de seguridad.)

+0

¿Has probado con 771? ¿Quién es el propietario (usuario y grupo) de esta carpeta? – soju

+0

http://www.computerhope.com/unix/uchmod.htm – Gaurav

Respuesta

84

Por favor, deje de sugerir el uso de 777. Usted está haciendo que su archivo sea grabable por todos, lo que significa que usted pierde toda la seguridad para la que fue diseñado el sistema de permisos. Si sugiere esto, piense en las consecuencias que puede tener en un servidor web mal configurado: sería increíblemente fácil "piratear" el sitio web sobrescribiendo los archivos. Entonces, no lo hagas

Michael: hay una razón perfectamente viable por la cual su script no puede crear el directorio, el usuario que ejecuta PHP (que podría ser diferente de Apache) simplemente no tiene suficientes permisos para hacerlo. En lugar de cambiar los permisos, creo que debería resolver el problema subyacente, lo que significa que sus archivos tienen el propietario incorrecto, o que Apache o PHP se están ejecutando bajo el usuario incorrecto.

Ahora, parece que tiene su propio servidor instalado. Puede determinar qué usuario está ejecutando PHP mediante la ejecución de un script simple que llama al programa 'whoami' instalado en la mayoría de Linuxes:

<?php 
echo `whoami`; 

Si todo es correcto, debería ver el nombre de usuario de PHP se ejecuta bajo. Dependiendo de su sistema operativo, esto podría ser 'www-data', 'nobody', 'http', o cualquier variación. Si su sitio web es el único sitio web en ejecución, esto es fácil de cambiar cambiando el usuario que Apache ejecuta. Si tiene Debian, como me gusta, puede editar el archivo/etc/apache2/envvars (como usuario root) y cambiar el valor de APACHE_RUN_USER. Dependiendo de su sistema operativo, esta variable puede estar configurado en un archivo de configuración diferente, por lo que si no lo encuentra en/etc/apache2/envvars, tratar de buscar la declaración de variables mediante el uso de:

$ grep -R "APACHE_RUN_USER=" . 

De el directorio en el que se encuentran todos los archivos de Apache-config.

Si no es el único en el servidor, puede considerar crear cuentas de usuario para cada sitio web y usar algo como Apache2-MPM-ITK para cambiar el RUN_USER según el sitio web que se llame. Además, asegúrese de que el usuario con el que se ejecuta el proceso PHP es el propietario de los archivos y los directorios. Usted puede lograr que mediante el uso chown:

% chown theuser:theuser -R /var/www/website/ 

Si PHP está funcionando con su propio usuario, y es el propietario de los archivos y directorios que necesita para escribir en, el permiso 700 sería suficiente. Aunque tiendo a usar 750 para la mayoría de los archivos, dado que generalmente tengo múltiples usuarios en ese grupo, y pueden tener permisos de lectura.Por lo tanto, puede cambiar los permisos:

% chmod 0750 -R /var/www/website/ 

Eso debería ser. Si tiene algún problema, infórmenos, y , por favor, no tome el, nunca tome ningún consejo que esencialmente le diga: si la seguridad lo está molestando, elimine la seguridad.

+2

Lo siento, no he vuelto a esta pregunta. Nunca apareció en mi feed como alguien había respondido. Entonces, ahora que finalmente lo ha hecho (a partir de hoy), me di cuenta de que no le había dado la respuesta correcta. Gracias por la respuesta. – Michael

+0

Al ingresar, creo que no es una buena idea que el servidor web escriba los archivos de su servidor web. Solo la carpeta de carga, si la hay, u otras carpetas especiales como caché, registros, etc. ... Tal vez sea más fácil ser pirateado a través de un script php malicioso que descubriendo su contraseña ssh. – arod

+1

También puede marcar al usuario usando Netham

1

El usuario de php (www-data, php, apache, cualquiera que sea) necesita tener permisos de escritura en el directorio 755. Supongo que no es un miembro del grupo del creador de la carpeta o de lo contrario podría escribir en él. Agregue el usuario php al grupo o cambie los permisos en la carpeta al 777. Si ninguno es una opción, puede usar la extensión PECL SSH2 para iniciar sesión con un usuario que esté en el grupo (o el propietario del archivo) y crea los archivos en su lugar.

6

En ubuntu edita/etc/apache2/envvars como Berry sugiere.

Cuando cambie el usuario de Apache, tenga cuidado con las consecuencias involuntarias. Una de ellas es las sesiones de PHP que pueden almacenarse en/var/lib/php5. Es posible que deba cambiar la propiedad de esa carpeta también.

+0

Lo que me ayudó fue la sugerencia de permisos/var/lib/php5. 'chown www-data/var/lib/php5' ayudó después de que todos los otros permisos de archivos y carpetas estuvieran en orden (y en su sano juicio), pero el CMS seguía quejándose. Gracias. – raddaqii

9

Tengo un problema similar pero en mi caso tengo el funcionamiento de SELinux y falló incluso con el permiso 0777. Resulta que tengo que permitir explícitamente que httpd tiene acceso de escritura en el directorio usando:

chcon -R -t httpd_sys_rw_content_t <PARENT_OF_MKDIR_TARGET> 

SELinux solucionador de problemas puede tener más detalles.

Cuestiones relacionadas