¿Prácticas recomendadas con respecto a los permisos y propiedad de archivos / directorios de Joomla en sistemas Linux?

26

En el pasado, a menudo he tenido problemas con los permisos y la propiedad de los archivos / directorios de Joomla en los sistemas Linux.

Problemas incluidos

  • No poder transferir archivos al servidor utilizando programas como WinSCP.
  • No poder instalar extensiones, complementos, etc. de Joomla
  • Archivos y carpetas inseguros debido a permisos peligrosos y configuraciones de propiedad.

¿Cuáles son las mejores prácticas recomendadas para configurar permisos y propiedades en Joomla en sistemas Linux?

Esforzarse más
fuente

Respuestas:

22

Existen algunas causas potenciales para los problemas de permisos de archivos y carpetas en el alojamiento de Linux.

1. Permisos de archivo y carpeta

Los permisos de verificación de carpetas están configurados en 0755 y los permisos de archivos están configurados en 0644. Tenga en cuenta que los permisos de archivos y carpetas se pueden restablecer a estas configuraciones seguras estándar en todo el sitio utilizando la versión gratuita o de pago de Akeeba Admin Tools.

2. Parámetros PHP

Compruebe que el parámetro upload_max_filesize en la pestaña Información de PHP en la Información del sistema es suficiente. A menudo puede anular la configuración predeterminada en un entorno de alojamiento compartido a través de la configuración de PHP en cPanel o un php.iniarchivo personalizado .

3. Rutas incorrectas en configuration.php

Es posible que tenga rutas incorrectas especificadas para las carpetas tmp y logs. Estos se especifican en la Configuración del sistema o se pueden actualizar directamente en el archivo configuration.php si se siente cómodo editando directamente los archivos del sistema. Si no está seguro de cuál debería ser la ruta, cree y cargue un archivo whereami.php(o similar) en la carpeta raíz de su sitio web con el siguiente contenido:

<?php
  print 'Current folder is ' . dirname(__FILE__);
?>

Examine para [mywebsite].com/whereami.phpver la ruta a la carpeta raíz.

Una vez que tenga la ruta correcta, recuerde eliminar el whereami.phparchivo.

4. Controlador de archivos PHP inadecuado

Su alojamiento web puede configurarse con el controlador de archivos PHP predeterminado, pero idealmente debería usar suPHP o FastCGI o similar para que Joomla pueda cargar y ejecutar archivos usando permisos de archivo seguros.

Puede ver en qué controlador PHP se está utilizando System -> System Information -> WebServer to PHP Interface.

Hay un buen artículo sobre los méritos relativos de los controladores de archivos PHP en: http://boomshadow.net/tech/php-handlers

En un entorno de alojamiento compartido, generalmente no tiene acceso para cambiar qué controlador de archivos PHP está habilitado, pero su empresa de alojamiento web puede cambiarlo por usted.

A veces, como solución alternativa, los permisos de archivos y carpetas se cambian a 0777, pero esto coloca a su sitio web en un estado vulnerable y, por lo general, se deben evitar los permisos de archivos 0777.

Si su empresa de alojamiento web no puede habilitar suPHP o FastCGI, la única otra opción podría ser encontrar una nueva empresa de alojamiento web.

5. Espacio en disco

Verifique que no haya excedido su cuota de espacio en disco.

LISTA DE VERIFICACIÓN DE SOLUCIÓN DE PROBLEMAS

¿Cuáles son las mejores prácticas recomendadas para configurar permisos y propiedades en Joomla en sistemas Linux?

Ver 1 y 4.

No poder transferir archivos al servidor utilizando programas como WinSCP.

Ver 1, 2, posiblemente 4 y 5.

No poder instalar extensiones, complementos, etc. de Joomla

Ver 1, 2, 3, 4 y 5.

Archivos y carpetas inseguros debido a permisos peligrosos y configuraciones de propiedad.

Ver 1 y 4.

Neil Robertson
fuente
1
En mi caso, creo que los controladores PHP fueron una gran parte del problema.
TryHarder
1
+1 Su respuesta en realidad no solucionó mi problema, pero me inspiré para verificar la configuración de PHP de mis servidores: Modo seguro y resultó que estaba activado. Por lo tanto, apagarlo fue la solución. Entonces, para futuros lectores si ninguno de los anteriores lo solucionó, verifique también su Modo seguro :)
Mohammed Joraid
12

Verifique los niveles de permiso, debe ser 644 y 755 para archivos y carpetas respectivamente.

Muchas veces los niveles de permisos están bien, incluso cuando se enfrentan algunos problemas. Significa que tendrá que verificar la propiedad y el grupo de los archivos y carpetas específicos . Normalmente, el grupo y la propiedad se pueden cambiar a www-data para apache (utilizado en servidores web basados ​​en ubuntu).

No dude en consultar este interesante documento de Joomla basado en la verificación de los permisos del archivo.

Shyam
fuente
¿Joomla generalmente pertenece al grupo www-data?
TryHarder
1
Junto con la respuesta de Shyam, utilizamos el módulo SuPHP Apache . Descubrimos que cuando se instalaba una extensión, no podíamos modificar esos archivos a través de FTP y viceversa (problema de propiedad del archivo). SuPHP nos arregló esto al garantizar que los scripts PHP se ejecuten con los permisos de sus propietarios.
Zachary Draper
1
El proceso de Apache se ejecuta bajo 'www-data' un grupo unix. No es solo Joomla, todas las aplicaciones basadas en Apache.
Shyam
¿Es posible desarrollar y ejecutar un script de shell para corregir automáticamente todos los permisos de archivo?
NivF007
1
Sí. gist.github.com/ssv445/11204300 Puede ejecutar el script en cron.
Shyam
8

Una solución fácil para mí es a menudo dejar que PHP se ejecute en modo (Rápido) CGI y establecer la propiedad del directorio de Joomla para el usuario FTP. Por lo tanto, podrá cargar y sobrescribir archivos a través de FTP y Joomla también podrá escribir archivos.

Una forma de hacer esto en un entorno de alojamiento compartido (si está permitido) es agregar algo como esto a su archivo .htaccess:

AddHandler php53-cgi .php

Consulte también una descripción general sobre los diferentes modos .

Fruppel
fuente
7

Los permisos deben ser 644 y 755 según lo explica Shyam.

En Joomla puedes evitar todos los problemas que mencionaste, con los siguientes métodos.

No poder transferir archivos al servidor utilizando programas como WinSCP.

  • Esto puede suceder debido al permiso de (444) como Joomla configuration.phptiene este permiso que no permite por defecto (por seguridad).
  • Otra situación para este mismo error es cuando transfiere un sitio o carpetas de un servidor a otro.

No poder instalar extensiones, complementos, etc. de Joomla

  • Esto sucederá debido a un temp/logmal permiso de la carpeta. (Se requirió 755)

  • O otra razón es que el temp/logcamino está mal enconfiguration.php

Archivos y carpetas inseguros debido a permisos peligrosos y configuraciones de propiedad.

  • Esto es lo más importante que Joomla siempre recomienda no usar 777 para archivos y carpetas si no está al tanto de esto .

Espero que sea de ayuda.

Jobin Jose
fuente
7

Los permisos deben ser 644 y 755 según lo explica Shyam.

Los problemas a los que se enfrenta probablemente estén relacionados con la forma en que está configurado su servidor. La mayoría de las veces esto sucede en hosts compartidos donde Apache se ejecuta con un usuario diferente que su cuenta FTP. Como generalmente carga Joomla usando FTP, Apache no es el propietario del archivo y, por lo tanto, no tiene los permisos necesarios para cambiarlo.

Hay un modo FTP dentro de Joomla que le permite evitar este problema. Puede habilitarlo en la configuración global de Joomla. A continuación, accederá a todos los archivos utilizando el usuario FTP en lugar del usuario Apache normal.

Sin embargo, una mejor manera es pedirle a su host que solucione el problema. Pueden configurar PHP (Apache) para que se ejecute bajo un usuario especial, que en tal caso debería ser su usuario FTP. Entonces todo funcionará bien.

Bakual
fuente
El usuario / grupo es la respuesta, ya que usted dijo que tener un usuario especial para PHP resuelve esto especialmente si coincide con el usuario FTP.
jackJoe
5

Sí, los permisos deben ser 644 y 755 según lo explica Shyam , pero los otros carteles se olvidan de mencionar que esto es si el archivo es propiedad de su servidor web, y el grupo es el grupo al que pertenece.

Por ejemplo, en FileZilla verá permisos como este:

Filename      Size   Filetype  Last Modified          Permissions   Owner/Group
somefile.txt  11KB   txt file  2014-04-23 3:43:00 AM      www-data myGroup 

Los permisos drwxr-xr-x son 755 (simplemente ignore el dr principal para que sea wxr-xr-x). Los permisos de lectura valen 4, los permisos de escritura valen 2 y los permisos de ejecución valen 1 ... así que todos suman 7, y eso es lo que tiene el propietario de este archivo. El grupo tiene permisos de lectura y ejecución pero no de escritura, por lo que tienen 5, y todos también tienen 5 .. haciendo los permisos 755.

754 serían propietarios que hayan leído, escrito, ejecutado. Grupo que tiene lectura y ejecución, y todos solo tienen permisos de lectura.

En el ejemplo anterior, puede ver que el propietario del archivo es www-data (que es el grupo de servidores web predeterminado para muchos servidores Apache) y el Grupo es el grupo myGroup, que es el Grupo (administradores) al que pertenezco.

El primer número son los permisos de los propietarios, el segundo son los permisos de los grupos y el tercer número son los permisos de todos. Obviamente, debe tener cuidado de otorgarle al servidor web los permisos que necesita ... y asegurarse de que los archivos que deben bloquearse no puedan ser escritos o ejecutados por cualquiera (el tercer número). A continuación se muestra lo que significan los números:

Suponiendo que el servidor web posee los archivos, su administrador está en el grupo y, por supuesto, todos son el tercer número.

644: los archivos con permisos establecidos en 644 son legibles por todos y solo el propietario del archivo / carpeta puede escribirlos.

755: los archivos con permisos establecidos en 755 son legibles y ejecutables por todos, pero solo el propietario del archivo / carpeta puede escribirlos.

777: los archivos con permisos establecidos en 777 son legibles, escribibles y ejecutables por todos. No use este conjunto de permisos, por razones de seguridad, en su servidor web a menos que sea absolutamente necesario, y solo temporalmente. Es un desastre esperando que ocurra, especialmente si un directorio tiene esos permisos ... significa que cualquiera puede cargar archivos y ejecutarlos.

Aquí están los comandos de Linux para configurar Joomla! permisos recomendados desde la línea de comando. Permisos recomendados de archivos Joomla

Set ownership:   sudo chown -R www-data:myName /path/to/your/domain.com
Set Directories: sudo find /path/to/your/domain.com -type d -exec chmod 755 {} \;
Set files :      sudo find /path/to/your/domain.com -type f -exec chmod 644 {} \;

NOTA: muchas personas le mostrarán estos comandos sin la ruta, pero SIEMPRE prefiero usar la ruta completa, porque si olvida cambiar los directorios a la raíz Joomla! directorio de instalación y ejecutarlos sin la ruta, acaba de cambiar los permisos para cada archivo y directorio en ese directorio superior, y creó un gran desastre.

Después de ejecutar estos comandos, deberá corregir los permisos para cualquier directorio que necesite más permisos ... por ejemplo ... usuarios que cargan imágenes, etc.

SI SOLO UTILIZA JOOMLA! interfaz, y no tiene acceso de administrador o FTP al servidor, entonces USE LA PROPIEDAD y PERMISOS ANTERIORES.

DETÉNGASE AQUÍ SI USTED ES UN NOVICE ... lo siguiente es solo para personas que realmente entienden lo que hacen los permisos y la propiedad.

Sin embargo, encuentro que tener la propiedad y los permisos de esa manera es muy desagradable porque me gusta usar FileZilla y una línea de comando de sesión de Terminal la mayor parte del tiempo, y subo muchos archivos manualmente. Pero no puedo sobrescribir ningún archivo porque no los tengo y no tengo permisos para escribir. Podría hacer que FileZilla inicie sesión con la cuenta del servidor web, PERO ... Quiero que FileZilla inicie sesión con mi cuenta, para poder explorar otros directorios también, no solo los archivos a los que tiene acceso el servidor web ... SO ... Cambio la propiedad y los permisos a esto:

Filename      Size   Filetype  Last Modified          Permissions   Owner/Group
somefile.txt  11KB   txt file  2014-04-23 3:43:00 AM  drwxr-xr-x    myName www-data

Me convierto en el propietario y pongo el servidor web en el Grupo ... y cambio los permisos de los directorios a 775, y de los archivos a 664. Me hace la vida mucho más fácil ... pero no lo recomiendo para todo el mundo.

Si lo haces a mi manera, estos son los comandos:

 Set ownership:   sudo chown -R myName:www-data /path/to/your/domain.com
 Set Directories: sudo find /path/to/your/domain.com -type d -exec chmod 775 {} \;
 Set files :      sudo find /path/to/your/domain.com -type f -exec chmod 664 {} \;  
bgies
fuente
"drwxr-xr-x son 755" - esto sería 751 (falta permanente de lectura para público), no 755. (Aunque 755 sería más "normal" para los directorios.)
MrWhite
4

Las otras respuestas proporcionan una buena explicación de lo que se debe hacer, solo quiero agregar un script para corregir los permisos si ya cargó un componente y no puede acceder a los archivos con ftp.

En este caso, subiría este archivo fix.phpal servidor FTP y lo abriría en el navegador:http://example.com/fix.php

<?php
file_fix_directory(dirname(__FILE__));

function file_fix_directory($dir, $nomask = array('.', '..')) {
  if (is_dir($dir)) {
     // Try to make each directory world writable.
     if (@chmod($dir, 0777)) {
       echo "<p>Made writable: " . $dir . "</p>";
     }
  }
  if (is_dir($dir) && $handle = opendir($dir)) {
    while (false !== ($file = readdir($handle))) {
      if (!in_array($file, $nomask) && $file[0] != '.') {
        if (is_dir("$dir/$file")) {
          // Recurse into subdirectories
          file_fix_directory("$dir/$file", $nomask);
        }
        else {
          $filename = "$dir/$file";
            // Try to make each file world writable.
            if (@chmod($filename, 0666)) {
              echo "<p>Made writable: " . $filename . "</p>";
            }
        }
      }
    }

    closedir($handle);
  }

}

Este script establece todos los permisos del archivo en 666 y todos los directorios en 777. World writeable no es el mejor conjunto de permisos para un host compartido, pero podrá acceder a sus archivos nuevamente y luego puede configurarlo con los valores correctos con FTP.

Harald Leithner
fuente
1

Tarde a la fiesta. Vine aquí buscando en otros lugares una guía definitiva sobre qué carpetas deben ser grabables para Joomla.

Lo siento amigos para ser el heraldo de las malas noticias.

El consejo de utilizar los permisos 755 para todos los directorios y 644 para todas las carpetas es, como mínimo, irresponsable .

Hacer que el propietario de todas sus carpetas y archivos se pueda escribir está bien siempre que el propietario no sea el servidor web (apache et al).

Sé que esta es una práctica recomendada común, pero puedo asegurarle que no es una buena práctica. La última pieza de software que desea dar la capacidad de escribir en carpetas es el servidor web en sí. Es el servidor web que utilizan los piratas informáticos para aprovechar ese exploit que aún no ha sido parcheado (o incluso encontrado).

¿Crees que .htaccess salvará a tu Kevin? Olvídalo porque permitiste el acceso de escritura al servidor web, ¡nuestros queridos amigos hackers pueden crear sus propios archivos .htaccess dándoles los permisos que quieran! como Oh, no sé, Umm hace que los archivos .jpg sean ejecutables por el servidor. Y pensaste que proteger contra la ejecución de .php iba a cubrir tu A.

Pero asegúrese de que solo las carpetas que requieren acceso de escritura realmente lo tengan. 755 y 644 para las siguientes carpetas.

public_html/images
public_html/cache
public_html/tmp

Y asegúrese de desactivar los archivos .htaccess con AllowOveride none para todas las carpetas grabables (como las anteriores)

Para aquellos de ustedes en el alojamiento compartido, buena suerte, ya que este es un elemento de configuración que no pueden controlar.

No piense que hacer que el archivo .htaccess sea de solo lectura ayudará. Si nuestros amigos piratas informáticos pueden crear una nueva carpeta (ellos pueden), entonces pueden crear su propio .htaccess.

Para aquellos de ustedes que ejecutan hosting compartido para todo lo que es sagrado, obtengan una pista sobre la seguridad.

Si no comprende la seguridad, salga del negocio de alojamiento que está haciendo difícil para el resto de nosotros.

Ahora, de vuelta a mi búsqueda de la guía definitiva sobre las carpetas que necesitan acceso de escritura ...

DesarrolladorChris
fuente
Gracias Chris, pero probablemente me quedaré con los permisos de archivos estándar 755 y 644, mientras que esto es recomendado por el sitio web oficial de Joomla y expertos en seguridad como Sucuri: docs.joomla.org/Security_and_Performance_FAQs blog.sucuri.net/2015/09/ ...
Neil Robertson
Sí, sé que es el "recomendado", pero una vez que haya sido explotado y averigüe por qué fue explotado, puedo asegurarle que arroje las "recomendaciones" por la ventana y comience desde cero. Las recomendaciones son el camino de menor resistencia. No es el más seguro.
DeveloperChris
Los pasos 1 a 10 de la lista "Mantener un sitio web seguro de Joomla" en joomla.stackexchange.com/a/180/120 junto con los permisos de archivos estándar han funcionado bien para los aproximadamente 50 sitios web que he estado buscando para el los últimos años. Su kilometraje puede variar, por supuesto.
Neil Robertson
@NeilRobertson Estoy de acuerdo con esa lista, pero si hay un exploit que no esté atrapado por eso, su última línea de defensa es no otorgar permisos de escritura al servidor web (apache et al). Por cierto, ese no es un consejo específico de Joomla. Además, la mayoría de las personas no pueden implementar muchas de las recomendaciones de esa lista. Simplemente no tienen los recursos o están utilizando un alojamiento más barato (no el más barato).
DeveloperChris