Guía definitiva de los permisos de archivos en Linux: chmod, chown y más

Los permisos de archivos en Linux definen quién puede leer, modificar, ejecutar o acceder a archivos y directorios. Influyen en el trabajo diario con el servidor, incluidos los despliegues, las claves SSH, los scripts, las subidas de archivos, las copias de seguridad, los registros y las carpetas compartidas.

Esta guía está pensada para desarrolladores, administradores, principiantes en DevOps, propietarios de sitios web y cualquier persona que trabaje con Linux a través del terminal. Solo necesitas acceso a la línea de comandos y herramientas básicas como ls, chmod, chown, chgrp y find.

Si gestionas sitios web, aplicaciones, scripts o bases de datos en un servidor VPS Linux, entender los permisos de archivos te ayuda a encontrar la causa real de los problemas de acceso en lugar de recurrir a soluciones inseguras como chmod 777.

Cómo funciona el modelo de permisos de Linux

Los permisos de Linux se basan en tres niveles de acceso: usuario, grupo y otros. El usuario es el propietario del archivo o directorio. El grupo permite que varias cuentas compartan un acceso controlado. Otros abarca a todos los demás usuarios del sistema.

Este modelo es sencillo, pero práctico para el trabajo real con servidores. Un usuario de despliegue puede gestionar los archivos de la aplicación, un grupo del servidor web puede leer lo que necesita y se puede impedir que usuarios ajenos modifiquen datos sensibles.

Linux también utiliza tres tipos básicos de permisos: lectura, escritura y ejecución. Parecen sencillos, pero se comportan de forma distinta en archivos y en directorios, y ahí es donde empiezan muchos errores con los permisos.

Usuarios, grupos y otros, lectura, escritura y ejecución: qué hace cada permiso

Cada archivo y directorio tiene un propietario y un grupo. Cuando se solicita acceso, Linux comprueba los permisos en este orden: primero el propietario, después el grupo y, por último, otros. Solo utiliza la primera categoría que coincide, por lo que los permisos no se combinan.

Cada categoría puede tener acceso de lectura, escritura y ejecución. En los archivos, lectura significa ver el contenido, escritura significa editarlo y ejecución significa ejecutar el archivo como script o programa. En los directorios, lectura significa listar los elementos, escritura significa crear o eliminar elementos y ejecución significa entrar en el directorio.

Este último punto es muy importante. Sin permiso de ejecución en un directorio, un usuario puede ver su nombre, pero aun así no poder acceder a los archivos que contiene. Por eso, al revisar los permisos debes tener en cuenta la ruta completa, no solo el archivo final.

Cómo comprobar los permisos de archivos en Linux

El comando más habitual para comprobar los permisos de archivos en Linux es:

ls -l

Una línea de salida típica puede tener este aspecto:

-rwxr-xr-- 1 deploy www-data 2048 May 8 app.sh

El primer carácter indica el tipo de archivo. Un archivo normal empieza por -, mientras que un directorio empieza por d. Los nueve caracteres siguientes muestran los permisos del propietario, del grupo y de otros. En este ejemplo, rwx corresponde al propietario, r-x al grupo y r-- a otros.

El propietario es deploy y el grupo es www-data. Esto significa que el usuario deploy recibe los permisos de propietario, mientras que los usuarios del grupo www-data reciben los permisos de grupo. Todos los demás reciben los permisos de otros.

Cómo leer la salida de ls -l, notación octal frente a simbólica

La cadena de permisos siempre sigue la misma estructura. El primer carácter identifica el tipo de objeto. Los tres caracteres siguientes corresponden al propietario. Los tres siguientes, al grupo. Los tres últimos, a otros.

Por ejemplo:

drwxr-xr-x

Se trata de un directorio porque empieza por d. El propietario puede leerlo, escribir en él y entrar en él. El grupo puede leerlo y entrar en él. Otros también pueden leerlo y entrar en él, pero no pueden crear ni eliminar archivos en su interior.

En un archivo normal, puedes ver:

-rw-r--r--

Esto significa que el propietario puede leer y escribir, mientras que el grupo y otros solo pueden leer. Es un patrón de permisos habitual para archivos públicos de sitios web, recursos estáticos y documentos que deben ser visibles, pero no editables por todo el mundo.

Los permisos de Linux pueden escribirse en notación simbólica o en notación octal. La notación simbólica usa letras como r, w y x. La notación octal usa números, donde lectura equivale a 4, escritura a 2 y ejecución a 1.

Los números se suman para cada nivel de identidad. Lectura y escritura dan 6. Lectura y ejecución dan 5. Lectura, escritura y ejecución dan 7. Ningún permiso da 0. Un valor como 755 significa que el propietario recibe 7, el grupo recibe 5 y otros reciben 5. En forma simbólica, esto se convierte en rwxr-xr-x. Un valor como 644 significa que el propietario puede leer y escribir, mientras que el grupo y otros solo pueden leer.

Cómo cambiar los permisos de archivos con chmod

El comando chmod cambia los permisos de archivos y directorios. Admite dos formatos: modo simbólico y modo numérico.

El modo simbólico es el más adecuado para cambios pequeños, como añadir permiso de ejecución a un script sin modificar nada más. El modo numérico es más rápido cuando ya conoces el valor exacto del permiso, como 755 para directorios o 644 para archivos normales.

Valores de permisos habituales explicados: modo simbólico (chmod u+x, chmod go-w), modo numérico (chmod 755, chmod 644)

El modo simbólico usa letras de identidad, operadores y letras de permiso. Las letras de identidad son u para el usuario, g para el grupo, o para otros y a para todos. Los operadores son + para añadir un permiso, - para quitar un permiso y = para establecer los permisos exactamente.

Por ejemplo:

chmod u+x script.sh

Esto añade permiso de ejecución para el propietario. Se usa a menudo cuando existe un script de shell, pero no se puede ejecutar directamente.

Otro comando útil es:

chmod go-w file.txt

Esto quita el permiso de escritura al grupo y a otros. Resulta útil cuando un archivo debe seguir siendo legible, pero solo debe poder editarlo su propietario.

El modo numérico establece el valor completo del permiso en un solo comando. Por ejemplo:

chmod 755 script.sh

Esto permite al propietario leer, escribir y ejecutar el archivo, mientras que el grupo y otros pueden leerlo y ejecutarlo.

Otro comando habitual es:

chmod 644 index.html

Esto permite al propietario editar el archivo, mientras que el grupo y otros solo pueden leerlo. Es una configuración habitual para los archivos de sitios web.

Valor de permiso 

Uso habitual 

Qué significa 

Nota de seguridad 

755

Directorios y scripts ejecutables 

El propietario puede leer, escribir y ejecutar. El grupo y otros pueden leer y ejecutar 

Adecuado para directorios que deben ser accesibles, pero no modificables por todo el mundo 

644

Archivos normales de sitios web, documentos, archivos de lectura pública 

El propietario puede leer y escribir. El grupo y otros solo pueden leer 

Buen valor predeterminado para muchos archivos web y recursos estáticos 

777

Casi nunca es adecuado en producción 

Todo el mundo puede leer, escribir y ejecutar 

Peligroso, porque cualquier usuario o proceso puede modificar el elemento 

El valor 777 merece una advertencia seria. Da acceso completo a todo el mundo en el sistema. En un servidor público, en un entorno compartido o en un VPS con Rocky Linux, esto puede permitir que scripts vulnerables, usuarios comprometidos o procesos maliciosos modifiquen archivos que deberían estar protegidos. En la mayoría de los casos, chmod 777 no resuelve el problema real. Solo oculta un problema más profundo con la propiedad, la pertenencia a grupos, los usuarios de servicio o la configuración de la aplicación.

Cómo cambiar la propiedad de los archivos con chown y chgrp

Los permisos definen qué pueden hacer el propietario, el grupo y otros. La propiedad define quiénes son realmente el propietario y el grupo. Por eso chmod y chown resuelven problemas distintos.

La sintaxis básica para cambiar el propietario es:

chown user file

Para cambiar a la vez el propietario y el grupo, usa:

chown user:group file

Para cambiar solo el grupo, usa:

chown :group file

También puedes cambiar solo el grupo con:

chgrp group file

Por ejemplo:

chown deploy:www-data /var/www/example.com

Esto convierte a deploy en el propietario y a www-data en el grupo. En un proyecto web, esto permite que el usuario de despliegue gestione los archivos y que el servidor web tenga un acceso de grupo controlado.

Los cambios de propiedad recursivos son posibles con:

chown -R user:group directory

La recursividad debe usarse con cuidado, porque cambia la propiedad de todos los elementos dentro del directorio de destino. Antes de ejecutar cambios de propiedad recursivos, confirma la ruta con pwd, revisa el destino con ls y asegúrate de que no estás aplicando cambios por error a un directorio de sistema de nivel superior.

La diferencia práctica es sencilla. Usa chmod cuando el archivo pertenece al usuario correcto, pero el nivel de acceso es incorrecto. Usa chown o chgrp cuando el archivo pertenece a un usuario o grupo incorrecto.

Cambios de permisos recursivos

Los cambios de permisos recursivos aplican una regla a todo un árbol de directorios. Son útiles durante despliegues, migraciones, copias de seguridad y tareas de limpieza, pero también son una de las formas más rápidas de crear problemas de permisos.

Un comando arriesgado tiene este aspecto:

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

Esto aplica 755 a todos los archivos y directorios. Los directorios suelen necesitar permiso de ejecución porque los usuarios y los servicios deben poder entrar en ellos, pero los archivos normales no suelen necesitarlo. Aplicar el mismo valor a todo puede hacer que archivos normales sean ejecutables sin motivo.

Un enfoque más seguro es usar find y aplicar permisos distintos a directorios y archivos:

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

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

Este patrón es habitual en proyectos web. Los directorios siguen siendo accesibles, los archivos normales siguen siendo legibles y solo el propietario puede modificar el contenido. Cuando las aplicaciones se ejecutan en servidores de BlueVPS, esta estructura predecible también facilita la resolución de problemas, porque archivos y directorios siguen reglas distintas por un motivo claro.

Revisa siempre los comandos recursivos antes de ejecutarlos. Un pequeño error tipográfico en una ruta puede cambiar miles de archivos. Cuando trabajes en sistemas de producción, es mejor comprobar el destino con find path -type f | head o find path -type d | head antes de aplicar los cambios.

Permisos especiales: SUID, SGID y sticky bit

Linux también admite bits de permisos especiales que modifican el comportamiento normal del acceso. Son útiles en casos concretos, pero deben aplicarse con cuidado, sobre todo en sistemas de producción.

SUID permite que un ejecutable se ejecute con los permisos del propietario del archivo. Esto puede ser muy potente, porque el programa puede realizar acciones que el usuario actual normalmente no puede, así que SUID solo debe usarse cuando haya un motivo claro.

SGID funciona con archivos y directorios. En los archivos, ejecuta un ejecutable con los permisos del grupo del archivo. En los directorios, hace que los archivos nuevos hereden el grupo del directorio, lo que resulta útil para carpetas de proyectos compartidas.

El sticky bit se usa a menudo en directorios compartidos con permiso de escritura, como /tmp. Permite a los usuarios crear archivos, pero les impide eliminar archivos que pertenecen a otros.

Algunos ejemplos habituales son:

chmod u+s file

chmod g+s directory

chmod +t directory

Los permisos especiales no son ajustes de uso diario para la mayoría de los archivos de sitios web. Conviene usarlos cuando existe un requisito concreto de control de acceso, sobre todo en sistemas de producción.

Resolución de errores de permisos

Los errores de permisos no siempre los causa el archivo final. Pueden estar implicados la propiedad, los directorios superiores, los usuarios de servicio, las reglas de las claves SSH, las opciones de montaje del sistema de archivos y sistemas de seguridad como SELinux o AppArmor.

Un buen proceso de resolución de problemas empieza por el usuario activo, después comprueba el archivo de destino y luego revisa cada directorio superior de la ruta. Esto es importante porque un archivo puede tener los permisos correctos mientras uno de sus directorios superiores sigue bloqueando el acceso.

Error o síntoma 

Causa probable 

Solución práctica 

Permission denied 

El usuario activo no tiene el permiso de lectura, escritura o ejecución necesario 

Comprueba whoami, ejecuta ls -l y ajusta el valor mínimo necesario de permisos o de propiedad

El script no se ejecuta 

El archivo no tiene permiso de ejecución 

Ejecuta chmod u+x script.sh y luego lánzalo con ./script.sh

No se puede entrar en el directorio 

El directorio no tiene permiso de ejecución 

Añade permiso de ejecución para el usuario o grupo correcto 

403 Forbidden en el servidor web 

El usuario del servidor web no puede acceder a los archivos o a los directorios superiores 

Comprueba la propiedad, el acceso de grupo y los permisos de los directorios en toda la ruta 

Se rechaza la clave privada SSH 

Los permisos de la clave privada son demasiado abiertos 

Ejecuta chmod 600 ~/.ssh/id_rsa y confirma la propiedad del directorio .ssh

La aplicación no puede subir archivos 

El usuario de servicio no tiene acceso de escritura al directorio de subidas 

Cambia el propietario o el grupo del directorio de subidas y concede acceso de escritura solo donde sea necesario

Los cambios con chmod no ayudan 

Propietario incorrecto, problema en un directorio superior, SELinux, AppArmor o restricciones de montaje 

Usa namei -l path, comprueba el usuario de servicio y, después, revisa la política de seguridad si está activada


En un VPS en EE. UU., este tipo de resolución de problemas suele hacerse en remoto mediante SSH, así que seguir una secuencia cuidadosa ahorra tiempo. Confirma el usuario, revisa el archivo de destino, comprueba los directorios superiores, verifica la propiedad y, por último, aplica el cambio seguro más limitado posible.

Referencia rápida: chuleta de chmod

Usa esta tabla de referencia rápida cuando necesites recordar un comando al momento para las tareas habituales con permisos en Linux, desde comprobar los derechos de acceso hasta corregir la propiedad y aplicar valores predeterminados seguros a archivos y directorios.

Tarea

Comando

Mostrar los permisos de un archivo 

ls -l file

Mostrar los permisos a lo largo de una ruta completa 

namei -l /path/to/file

Hacer que un script sea ejecutable para el propietario 

chmod u+x script.sh

Quitar el acceso de escritura al grupo y a otros 

chmod go-w file

Establecer los permisos estándar de un archivo 

chmod 644 file

Establecer los permisos estándar de un directorio 

chmod 755 directory

Proteger una clave SSH privada 

chmod 600 ~/.ssh/id_rsa

Cambiar el propietario de un archivo 

chown user file

Cambiar el propietario y el grupo 

chown user:group file

Cambiar solo el grupo 

chgrp group file

Aplicar 755 solo a directorios 

find path -type d -exec chmod 755 {} \;

Aplicar 644 solo a archivos 

find path -type f -exec chmod 644 {} \;

Añadir el sticky bit a un directorio compartido 

chmod +t directory

Añadir SGID a un directorio de proyecto compartido 

chmod g+s directory

 

Blog

FAQ