Durante los dos últimos días hemos dedicado unos minutos a hablar de los permisos de los archivos y carpetas con la idea de explicar su utilidad y la notación que habitualmente se utiliza (y que a veces suele generar algún que otro dolor de cabeza con los bits y los números en octal). Como comentamos al inicio de esta serie, los permisos son un sistema de control de acceso para garantizar que el acceso a archivos y carpetas se permita únicamente a los usuarios y grupos que hemos definido, creándose así reglas para el propietario del archivo, el grupo al que pertenece y el resto de usuarios de un sistema Unix, Mac OS X o Linux (ya que estos dos últimos son compatibles POSIX).
Ahora que ya manejamos el concepto y la notación, el siguiente paso es utilizar adecuadamente este recurso para mejorar la seguridad de nuestro sistema y como aplicación práctica vamos a centrarnos en WordPress y lo que podríamos considerar una configuración óptima de permisos.
Pautas generales
En el caso particular de WordPress, una mala gestión de los permisos de carpetas y archivos puede ser fuente de más de un dolor de cabeza puesto que este tipo de errores pueden ser aprovechados por gente con no muy buenas intenciones y, por ejemplo, explotar estas vulnerabilidades para insertar código malicioso en nuestra web (algo que Google puede penalizar y bloquear el acceso desde Chrome).
En la gran mayoría de servicios de hosting con Linux, los usuarios cuentan con algún tipo de panel de control para gestionar, vía web, los archivos y los permisos de éstos (además de contar también con acceso vía SSH o por FTP) por lo que, en cualquier momento, tendremos la oportunidad de gestionar cualquier tipo de cambio sin demasiada complicación. Por norma general, es recomendable seguir las siguientes pautas:
- Los archivos tendrán permisos 644, es decir,
rw-r--r--
- Los directorios tendrán permisos 755, es decir,
rwx-r-xr-x
Salvo excepciones temporales, y por tanto nunca permanentes, no deberíamos cambiar este esquema para hacerlo más laxo y permeable. En contadas excepciones puede que sea necesario que usuarios distintos al propietario de un directorio tengan que escribir en éste y, quizás, tengamos que otorgar más permisos hasta llegar al "número de la bestia": el 777.
777, el permiso maldito
Los permisos 777 equivalen a rwxrwxrwx
, es decir, permisos totales para todos los usuarios y, en el caso de un sitio web, es un considerable agujero de seguridad que expone totalmente nuestro WordPress. Hay que evitar encarecidamente usar este tipo de permisos porque alguien podría subir a dicha carpeta un script ejecutable y podría causar un enorme destrozo porque estamos dando control total a cualquier tipo de usuario.
Por regla general, si un plugin de WordPress requiriese este tipo de permisos, lo primero que debemos plantearnos es si estamos o no ante una trampa porque este requerimiento es muy excesivo y potencialmente peligroso. De hecho, es posible que nos encontremos con aplicaciones (o desarrollos) que nos indiquen que requieren este tipo de permisos para permitir que los usuarios suban archivos a una carpeta concreta de nuestro servidor y si llegado el caso no existiesen alternativas, será importante recurrir a un archivo .htaccess que evite que alguien, por ejemplo, pueda subir código ejecutable:
<files *.php>
order Deny,Allow
deny from all
</files>
Pero, en la medida de posible, evitemos usar los permisos 777.
Mejorando la seguridad de nuestro hosting
Si bien la norma general es asignar permisos 644 a los archivos y el 755 a los directorios, WordPress nos recomienda que revisemos los permisos de algunos archivos críticos para aplicar reglas especiales que mejoren la seguridad de nuestro blog:
- El archivo
wp-config.php
, que se encuentra en el raíz de WordPress y contiene los parámetros de conexión a nuestra base de datos, debe tener permisos 600, es decir,rw-------
permisos de lectura y escritura solamente para el propietario. - El archivo
.htaccess
que estemos utilizando (y que también nos sirve como medida de seguridad) debe tener permisos 604, es decir,rw----r--
permisos de lectura y escritura para el propietario (existen plugins que nos pueden ayudar a modificarlo) y lectura para el resto de usuarios. - El archivo php.ini, con el que podemos aplicar configuraciones específicas de PHP en las carpetas de nuestro hosting que estén al mismo nivel y por debajo de dicho archivo, también tendrá permisos 600, es decir,
rw-------
permisos de lectura y escritura solamente para el propietario.
Algunas herramientas de ayuda
Si bien podemos verificar los permisos de nuestro WordPress accediendo a las herramientas de gestión que nos proporcione nuestro proveedor de hosting, también podemos realizar este tipo de comprobaciones desde la administración de nuestra blog gracias a algunas extensiones enfocadas en la seguridad que, entre sus funcionalidades, comprueban los permisos de directorios y archivos:
Entre la gran cantidad de extensiones disponibles vale la pena echarle un vistazo a WP Security Scan, WebsiteDefender WordPress Security y File Permissions & Size Check y dado que hay veces que los proveedores de hosting realizan intervenciones que afectan a los permisos, no está de más revisar los permisos de nuestra instalación cada cierto tiempo.
Imagen: Uninform