Insights de dominios

Permisos de archivos en Linux: chmod, chown, 644, 755 y por qué evitar 777

Interpreta los permisos de Linux, comprende 644 y 755, usa chmod y chown y diagnostica errores de acceso antes de cambiar permisos o propietarios.

Linux y VPS
Permisos de archivos en Linux: chmod, chown, 644, 755 y por qué evitar 777

Tu sitio devuelve 403 Forbidden. Encuentras una recomendación en un foro, cambias toda la carpeta a 777 y el error desaparece. Puede que ahora tengas un problema de seguridad además del problema original.

chmod -R 777 /var/www/example.com

Este es un ejemplo de una práctica que conviene evitar. Que la página abra no demuestra que la configuración sea adecuada. Primero identifica qué usuario debe leer o escribir y en qué ubicación.

Las cadenas -rw-r--r-- y drwxr-xr-x parecen complicadas, pero el sistema básico combina tres permisos y tres categorías de usuarios. Esta guía explica cómo interpretarlos en una web alojada en un VPS.

Empieza con ls -l

Conéctate y consulta los archivos:

ls -l

Puedes encontrar una salida como esta:

-rw-r--r-- 1 marco www-data 1842 Oct 2 10:15 index.php
drwxr-xr-x 4 marco www-data 4096 Oct 2 10:16 public

La primera columna indica tipo y permisos. Los nombres marco y www-data identifican al propietario y al grupo. También aparecen el tamaño, la fecha y el nombre del objeto.

Divide la cadena en tres partes

En -rw-r--r--, el primer carácter indica un archivo normal. Una carpeta empieza habitualmente por d. Los nueve caracteres siguientes se dividen así:

rw- r-- r--

Corresponden a propietario, grupo y otros usuarios. r significa lectura, w escritura y x ejecución. Un guion indica que ese permiso está ausente.

Por tanto, el propietario puede leer y escribir; el grupo y los demás usuarios solo pueden leer. Esa es la idea central de los permisos básicos.

Propietario, grupo y otros usuarios

Cada archivo tiene propietario y grupo. En el ejemplo, marco es el propietario y www-data el grupo. La categoría de otros usuarios se aplica a quienes no encajan en las categorías anteriores.

En Ubuntu y Debian, www-data suele estar asociado con servicios web. Tu servidor puede usar otra cuenta, un grupo distinto o identidades específicas por aplicación. Comprueba el usuario real del proceso antes de copiar una configuración.

Las carpetas usan las mismas letras de otra manera

En una carpeta, lectura permite consultar sus entradas. Escritura permite crear o eliminar entradas, sujeta a otras condiciones. Ejecución permite atravesarla y acceder a elementos dentro cuando los demás permisos lo permiten.

Una carpeta puede necesitar x aunque no sea un programa. El proceso debe poder atravesar las carpetas superiores de la ruta para llegar al archivo.

drwxr-xr-x

Aquí el propietario tiene rwx y el grupo y los demás usuarios tienen r-x. Es el modo numérico 755.

De dónde sale 644

Los valores básicos son lectura 4, escritura 2 y ejecución 1. Suma los permisos que quieres conceder:

4 + 2 = 6
4 + 1 = 5
4 = lectura

El modo 644 significa:

propietario: 6 = lectura y escritura
grupo:       4 = lectura
otros:       4 = lectura

En letras es rw-r--r--. Es habitual en archivos normales de una web, pero no es una regla universal ni una recomendación para todos los archivos sensibles.

De dónde sale 755

Lectura, escritura y ejecución suman 7. Lectura y ejecución suman 5:

propietario: 7 = lectura, escritura y ejecución
grupo:       5 = lectura y ejecución
otros:       5 = lectura y ejecución

El equivalente es rwxr-xr-x. Es frecuente en carpetas que necesitan ser atravesadas y programas ejecutables. La elección depende del acceso que necesitas conceder.

Qué concede 777

El modo 777 equivale a:

rwxrwxrwx

Las tres categorías tienen lectura, escritura y ejecución. Eso concede modificación a identidades que normalmente no necesitan alterar la web.

Si la aplicación solo escribe en una carpeta de imágenes, concede acceso a esa identidad y ubicación. Abrir toda la web a escritura puede ocultar el síntoma sin corregir la propiedad o el diseño de acceso.

Cambia permisos con chmod

La forma numérica fija el conjunto de permisos:

chmod 644 index.php
chmod 755 public

La forma simbólica permite ajustar una parte concreta:

chmod u+x script.sh
chmod o-w file.txt
chmod g+r file.txt

Estos ejemplos añaden ejecución al propietario, quitan escritura a otros y añaden lectura al grupo. Las categorías se identifican con u para propietario, g para grupo, o para otros y a para todos.

Cambia la propiedad con chown

Un archivo puede tener permisos razonables y pertenecer a la cuenta equivocada. Por ejemplo, al subirlo como root:

-rw-r--r-- 1 root root 1842 Oct 2 10:15 index.php

Si tu modelo de despliegue requiere otro propietario, estos ejemplos cambian primero el usuario y después usuario y grupo:

sudo chown marco index.php
sudo chown marco:www-data index.php

Para un árbol completo:

sudo chown -R marco:www-data /var/www/example.com

-R significa recursivo. Verifica el usuario, el grupo y la ruta antes de ejecutar el comando. No apliques este modelo a una cuenta administrada por un panel sin comprobar sus reglas.

Por qué una web puede devolver 403

Entre las causas posibles están:

  • Una carpeta superior que el proceso no puede atravesar.
  • Un archivo que el servidor web no puede leer.
  • Una propiedad incorrecta.
  • Reglas de acceso de Nginx o Apache.
  • Un índice inexistente cuando se prohíbe listar la carpeta.
  • Reglas de la aplicación.
  • Otra capa de seguridad.

Consulta la ruta y después el registro de errores:

ls -ld /var
ls -ld /var/www
ls -ld /var/www/example.com
ls -l /var/www/example.com

Para Nginx y Apache en Ubuntu, respectivamente, estas son rutas habituales; tu sitio puede usar otras:

sudo tail -n 50 /var/log/nginx/error.log
sudo tail -n 50 /var/log/apache2/error.log

El registro puede identificar la ruta que produjo Permission denied. Corrige esa causa y vuelve a probar.

Un modelo razonable para una web

No hay una receta única. Como punto de partida:

  • HTML, CSS, imágenes y PHP servido por el intérprete normalmente no necesitan ejecución Unix.
  • Las carpetas requieren recorrido para las identidades que acceden a ellas.
  • Solo las ubicaciones modificadas por la aplicación necesitan escritura para su proceso.
  • La configuración sensible puede requerir lectura restringida.
  • Propietario y grupo deben corresponder al modelo de despliegue.

Es frecuente encontrar archivos 644 y carpetas 755 en sitios sencillos. Las cargas de WordPress, cachés, almacenamiento de aplicaciones y grupos compartidos pueden requerir otros ajustes. Identifica quién necesita escribir.

Inspecciona antes de cambiar

Consulta archivos y carpetas sin modificar sus permisos:

find /var/www/example.com -type f -ls | head
find /var/www/example.com -type d -ls | head

Busca objetos con escritura para otros usuarios:

find /var/www/example.com -type f -perm -0002 -print
find /var/www/example.com -type d -perm -0002 -print

Revisa la salida antes de diseñar una reparación. Los comandos anteriores solo consultan información.

Por qué chmod -R 755 también puede estar mal

Este comando añade ejecución a los archivos normales:

chmod -R 755 /var/www/example.com

Una imagen o una hoja CSS no necesita ejecución. El código PHP servido por el intérprete web normalmente tampoco. Si has confirmado los requisitos de un árbol sencillo, puedes distinguir archivos y carpetas:

find /var/www/example.com -type d -exec chmod 755 {} \;
find /var/www/example.com -type f -exec chmod 644 {} \;

Estos comandos modifican todos los objetos coincidentes. Antes de usarlos, revisa scripts ejecutables, configuración sensible y carpetas de escritura con requisitos especiales.

Algunos scripts sí necesitan ejecución

Un script invocado directamente puede necesitar ejecución para su propietario:

ls -l backup.sh
chmod u+x backup.sh
./backup.sh

Es un uso concreto del permiso, distinto de hacer ejecutables todos los archivos de una web. Si invocas bash backup.sh, el intérprete necesita poder leer el script, aunque el archivo no tenga ejecución directa.

Protege la configuración sensible

La configuración puede contener contraseñas de bases de datos, claves API, credenciales SMTP y tokens. No debe permitir escritura a todo el mundo.

chmod 600 secret.conf

El modo 600, equivalente a rw-------, permite leer y escribir solo al propietario. Comprueba que el proceso que necesita el archivo pueda leerlo antes de aplicar ese ajuste.

Alojamiento compartido y cPanel

Puedes gestionar permisos desde File Manager. Los conceptos de propietario, grupo, lectura, escritura y ejecución siguen existiendo.

Si la propiedad parece incorrecta, consulta al soporte: el proveedor puede gestionar esas identidades. Si un complemento pide convertir toda la cuenta a 777, identifica la ubicación y el usuario que realmente necesitan acceso.

Carpetas de cargas y caché

Las aplicaciones suelen escribir imágenes cargadas, caché, sesiones, archivos generados y exportaciones temporales. Configura el acceso para esas ubicaciones concretas.

La carpeta de cargas puede necesitar permisos distintos del directorio de código o configuración. Separar datos modificables y código limita qué parte de la web puede alterar un proceso comprometido.

El error de subir como root

Un problema habitual sigue esta secuencia:

  1. Entras como root.
  2. Copias los archivos a la carpeta del sitio.
  3. Los archivos quedan bajo propiedad de root.
  4. Tu usuario de despliegue no puede modificarlos.
  5. Intentas resolverlo dando escritura a todos.

Comprueba la propiedad:

ls -la /var/www/example.com

Ajústala según el modelo real. Propiedad y permisos están relacionados, pero no son intercambiables.

Precaución con los cambios recursivos

Registra el estado actual o prepara una copia o instantánea antes de una modificación amplia. chmod -R y chown -R pueden afectar miles de objetos en segundos.

Verifica la ruta completa y el alcance. No supongas que podrás reconstruir de memoria todos los modos anteriores.

Secuencia práctica de diagnóstico

  1. Identifica la ruta exacta.
  2. Consulta el archivo con ls -l.
  3. Revisa las carpetas superiores con ls -ld.
  4. Identifica el usuario del proceso.
  5. Comprueba propietario y grupo.
  6. Determina si necesita lectura, escritura o recorrido.
  7. Lee los registros de la aplicación y del servidor web.
  8. Cambia únicamente el acceso necesario.
  9. Repite la prueba.
  10. Anota el propietario y modo final.

Si los permisos básicos son correctos y el error continúa, revisa las listas de control de acceso y mecanismos como SELinux o AppArmor según tu sistema.

Decodificador rápido

NúmeroSímbolos
7rwx
6rw-
5r-x
4r--
3-wx
2-w-
1--x
0---
ModoPermisos
600rw-------
640rw-r-----
644rw-r--r--
700rwx------
750rwxr-x---
755rwxr-xr-x
777rwxrwxrwx

Las tablas describen acceso. El modo adecuado depende de las identidades y operaciones de tu aplicación.

Aplica lo aprendido

Continúa con SSH para principiantes, las tareas cron o tu primera hora en cPanel. Si necesitas un servidor para tu proyecto, consulta las opciones VPS.

Más respuestas prácticas

¿Por qué las carpetas necesitan ejecución?

Ese permiso permite atravesarlas y acceder a sus entradas, sujeto a los demás permisos necesarios.

¿Todos los archivos deben usar 644 y las carpetas 755?

Son modos frecuentes en configuraciones sencillas, pero una aplicación puede necesitar almacenamiento modificable, grupos específicos o procesos con otra identidad.

¿Cómo consulto los permisos?

Usa ls -l para listar archivos y ls -ld directory para consultar la carpeta en sí.

¿Qué hago ante Permission denied?

Identifica la ruta, consulta permisos y propietarios, determina el usuario del proceso y lee los registros antes de modificar el acceso.

Preguntas frecuentes

¿Qué significa chmod 644?

El propietario puede leer y escribir. El grupo y los demás usuarios solo pueden leer. Su representación es rw-r--r--.

¿Qué significa chmod 755?

El propietario tiene lectura, escritura y ejecución. El grupo y los demás usuarios tienen lectura y ejecución. Su representación es rwxr-xr-x.

¿Por qué suele ser incorrecto usar 777?

Concede lectura, escritura y ejecución a todas las categorías, mucho más acceso del que necesitan la mayoría de los archivos de una web.

¿En qué se diferencian chmod y chown?

chmod cambia permisos y chown cambia la propiedad. Un propietario incorrecto no debe resolverse automáticamente concediendo escritura a todos.