ACTUALIZADO PARA MAYOR CLARIDAD:
De acuerdo con http://expressionengine.com/user_guide/installation/installation.html , dice:
Para la mayoría de los hosts Unix, lo siguiente es típico, pero puede consultar con su host para ver si se pueden usar permisos más restrictivos para permitir que PHP escriba en archivos (666) y carpetas (777) . En los servidores de Windows, lo siguiente no se aplicará, pero deberá asegurarse de que ExpressionEngine pueda escribir en los archivos y carpetas. Es posible que deba contactar a su anfitrión para esto.
No estoy seguro que significa esto. ¿Puedo cambiar los archivos y carpetas específicos a 666 y 777 respectivamente donde soy el chown'er, pero lo anterior parece que necesito permitir que PHP también haga esto?
PREGUNTA ORIGINAL:
Necesito asegurarme de que PHP pueda escribir en archivos específicos (666) y carpetas (777).
¿Cómo hago esto?
fuente
Respuestas:
Completaré las respuestas de rahmu y MV con una solución técnica. Todo lo que sigue es válido solo para sistemas similares a UNIX.
Desplácese por la sección chmod / chown para ver un ejemplo con ACL, una herramienta más poderosa que los modos de archivo UNIX.
Encontrar el nombre de usuario de su servidor web
Primero, necesitará saber el nombre de usuario con el que se ejecuta su servidor web. Si está usando Apache, que puede ser
apache
ohttpd
,www-data
, etc. En la mayoría de Debian-como sistemas, Apache eswww-data
. Para nginx, en general, también lo eswww-data
.Para comprobarlo, intente:
Asegúrese de que el nombre de usuario que devuelve este comando sea coherente (por ejemplo, uso nginx el 99% del tiempo, pero este comando devuelve
tomcat7
, un servidor web Java que instalé una vez) .Otorgar permisos al servidor web: usar
chmod
ychown
Haciendo un
chmod
666 o 777 (la solución ideal para ese tipo de problemas en malas documentaciones / tutoriales) puede hacer que las cosas funcionen mágicamente, pero es inseguro. Otorgar 666 o 777 permisos dará acceso a "otros". Entonces, no solo Apache, sino tambiéngrandmother
ynsa
(siempre que esas cuentas de usuario existan en su máquina, pero en realidad no, evite hacerlo a menos que sea solo para pruebas / solución de problemas).Es mejor ser más específico y otorgar permisos solo a usted y Apache. Cambie el grupo de sus archivos para dar el control total de sus archivos al servidor web. Para hacer esto, cambie el propietario de forma recursiva:
Pero lo más probable es que desee mantener el acceso completo a sus archivos cambiando solo el grupo:
Luego, haga lo apropiado
chmod
para otorgarle al grupowww-data
los mismos permisos que usted. Por ejemplo, si el modo actual es 640 (6 para usted, 4 para www-data, 0 para otros, traduciendo a -rw-r -----) , configúrelo en 660 (6 para usted, 6 para www- datos, 0 para otros, traduciendo a -rw-rw ----) . Vea la respuesta de rahmu para obtener más información sobre los modos de archivo, es un mecanismo antiguo pero elegante.Para evitar manipular números arcanos con
chmod
, también puede usar esta sintaxis:Significa "para el grupo (
g
), agregar (+
) leer y escribir (rw
) permisos en la carpetayour/folder/
, recursivamente (-R
)".En el 90% de los casos, esto debería ser suficiente.
Mi método preferido: usar ACL (Lista de control de acceso)
A veces la primera solución no es suficiente. Tomaré el ejemplo de Symfony Framework que registra y almacena en caché una gran cantidad de datos. Por lo tanto, necesita acceso de escritura a la carpeta correspondiente.
Y el
chmod
/chown
método puede no ser suficiente, cuando está utilizando en paralelo la Consola Symfony en la CLI (bajo mi cuenta de usuario) y la Web (usuario del servidor web). Esto causa muchos problemas porque Symfony modifica constantemente los permisos.En este caso, utilizaremos la ACL (Lista de control de acceso), que es una forma más avanzada de administrar permisos en muchos sistemas UNIX.
Aquí los comandos dados por la documentación oficial de Symfony ( por favor cambie
app/cache
yapp/logs
según sus necesidades ):En un sistema que admita
chmod +a
(es decir, no Debian / Ubuntu)En un sistema que no admite
chmod +a
(el más común)Necesitarás la
setfacl
herramienta; tal vez esté instalado en su sistema de manera predeterminada, así que intentesetfacl -v
ver si el comando está disponible.Si el comando no está disponible y está usando Ubuntu 14.04+, solo tendrá que instalar la herramienta:
De lo contrario, siga la documentación de su sistema operativo, ya que es posible que deba cambiar la forma en que se monta su partición ( documentación de Ubuntu aquí ).
Y ahí estamos:
Nunca tuve ningún problema con este método, satisfecho o le devolvemos su dinero.
fuente
No importa quién sea el propietario de los archivos, 666 permisos y 777 serían suficientes: el último dígito asegura que todos los usuarios del sistema tengan acceso. Si bien esta es la forma más fácil de hacerlo, definitivamente no es la más segura por esa razón exacta.
Una mejor manera de hacerlo
Lo primero que debe comprender es cómo funcionan los permisos de Unix . En aras de comprender la respuesta que di en este enlace, tenga en cuenta que los permisos se pueden traducir a números:
---
--x
-w-
-wx
r--
r-x
rw-
rwx
UNA
chmod 666
es entonces equivalente a cambiar los permisos arw-rw-rw
.A continuación, debe averiguar cuál es el usuario que está ejecutando el script PHP. Normalmente ese sería el usuario que ejecuta su servidor web. Aquí hay un ejemplo de cómo hacer esto (puede reemplazar Apache con el nombre de su servidor web).
Una vez que sepa cuál es el usuario que ejecuta los scripts y cuál es el propietario de los archivos que menciona, depende de usted establecer los permisos apropiados. Tenga en cuenta que otorgar acceso de escritura (incluso lectura) a todos los usuarios de su sistema puede ser potencialmente desastroso.
fuente
Expression Engine es como muchas otras aplicaciones web PHP que necesitan acceso de lectura + escritura a algunos archivos y directorios. Por ejemplo, EE requiere acceso de escritura a sus archivos config.php y database.php, y acceso de escritura a sus directorios de carga de archivos.
Lo que dice la documentación es que, como la mayoría de los servidores ejecutan PHP como mod_php (y se ejecutan con los permisos del servidor web), y como probablemente cargará sus archivos con FTP (o similar) utilizando su propio usuario, esos archivos y los directorios deberán tener permisos 666 (todos pueden leer y escribir) y 777 (todos pueden leer, escribir y navegar).
Esa no es la forma más segura, pero ciertamente es la más fácil, especialmente si está utilizando un servicio de alojamiento.
Sin embargo, como indican las instrucciones de EE, pregunte a su proveedor de alojamiento, porque algunos no usan mod_php sino un fastcgi, suphp o una versión diferente. Esos servidores ejecutan PHP como su propio usuario, por lo que todos los archivos que carga ya son legibles y escribibles por PHP y por cualquier archivo creado por los scripts EE. En ese caso, los archivos y directorios a los que accede PHP necesitarían tener acceso 600 y 700. Otros archivos a los que debe acceder directamente el servidor web (no el tiempo de ejecución de PHP) aún necesitarían acceso 666 y 777).
fuente