Back

Permisos de Archivos en Linux Explicados

Permisos de Archivos en Linux Explicados

Todo sistema Linux utiliza permisos de archivos para controlar quién puede leer, escribir o ejecutar un archivo. Si los configuras incorrectamente, bloquearás a usuarios legítimos o dejarás archivos sensibles expuestos. Esta guía explica cómo funcionan la propiedad y los permisos de archivos en Linux, cómo leer la cadena de permisos y cómo cambiar permisos usando chmod y chown.

Puntos Clave

  • Cada archivo tiene un propietario, un grupo y un conjunto de permisos para tres clases: propietario, grupo y otros.
  • Los tripletes de permisos usan r (lectura), w (escritura) y x (ejecución) — y se comportan de manera diferente en archivos versus directorios.
  • Usa chmod para cambiar permisos (simbólico u octal) y chown para cambiar la propiedad.
  • El valor umask controla los permisos predeterminados para archivos y directorios recién creados.
  • Los bits especiales (setuid, setgid, sticky) y las ACL POSIX manejan casos que el modelo estándar no puede.

Cómo se Estructuran la Propiedad y los Permisos de Archivos en Linux

A cada archivo y directorio en Linux se le asigna:

  • Un propietario (una cuenta de usuario)
  • Un grupo (un conjunto de usuarios)
  • Un conjunto de permisos para tres clases: propietario, grupo y otros

Cuando un proceso intenta acceder a un archivo, el kernel verifica estas clases en orden — primero el propietario, luego el grupo, después otros — y se detiene en la primera coincidencia. Las clases son mutuamente excluyentes: si eres el propietario, solo se aplican los bits del propietario, incluso si los bits del grupo son más permisivos.

Cómo Leer los Permisos rwx en Linux

Ejecuta ls -l para ver los permisos:

$ ls -l
-rw-r--r--  1 alice  developers  4017  Jun 1 10:00  config.conf
drwxr-x---  2 alice  developers    68  Jun 1 10:00  project/

El primer carácter es el tipo de archivo (- para archivo regular, d para directorio, l para enlace simbólico). Los siguientes nueve caracteres son tres tripletes de permisos:

rw-   r--   r--
 ↑     ↑     ↑
propietario grupo otros

Cada triplete usa tres bits: r (lectura), w (escritura), x (ejecución). Un - significa que ese permiso no está establecido.

Nota: Si ves un + al final de la cadena de permisos (por ejemplo, -rw-r--r--+), el archivo tiene una ACL POSIX aplicada. El comando estándar ls -l no mostrará esas reglas adicionales — usa getfacl para inspeccionarlas.

Qué Hace Realmente Cada Bit de Permiso

En archivos:

BitEfecto
rLeer contenido del archivo (cat, cp)
wModificar o sobrescribir el archivo
xEjecutar el archivo como programa o script

En directorios:

BitEfecto
rListar entradas del directorio (nombres de archivos)
wCrear, renombrar o eliminar archivos dentro
xAtravesar el directorio (cd, abrir archivos por ruta)

El bit de ejecución en directorios a menudo se malinterpreta. Sin él, no puedes hacer cd al directorio ni acceder a ningún archivo dentro por ruta — incluso si tienes permiso de lectura.

Cómo Cambiar Permisos de Archivos en Linux con chmod

chmod acepta tanto modos simbólicos como numéricos (octales).

Modo simbólico:

chmod u+x script.sh          # agregar ejecución para propietario
chmod go-w config.conf       # quitar escritura de grupo y otros
chmod u=rwx,g=rx,o= app/     # establecer permisos exactos para todas las clases
chmod -R u=rwX,g=rX,o=rX /var/www/html  # recursivo: X mayúscula establece ejecución en directorios y archivos que ya tienen ejecución

Modo numérico (octal) — cada dígito suma r=4, w=2, x=1:

chmod 644 config.conf   # propietario rw, grupo r, otros r
chmod 750 script.sh     # propietario rwx, grupo rx, otros ninguno
chmod 700 ~/.ssh        # solo propietario — correcto para directorios SSH

Cómo Cambiar la Propiedad de Archivos con chown

chown cambia el propietario, el grupo o ambos:

chown alice config.conf              # cambiar solo propietario
chown alice:developers config.conf   # cambiar propietario y grupo
chown -R www-data:www-data /var/www  # cambio de propiedad recursivo

Cómo se Establecen los Permisos Predeterminados con umask

Los archivos nuevos no comienzan con permisos abiertos. El valor umask enmascara bits del valor predeterminado del sistema (típicamente 666 para archivos, 777 para directorios). Un umask de 022 produce archivos 644 y directorios 755 — el predeterminado más común en servidores Linux.

Si el directorio padre tiene una ACL predeterminada configurada, esas reglas ACL se heredan en lugar de depender únicamente del umask.

umask        # ver umask actual
umask 027    # establecer predeterminado más estricto: archivos 640, directorios 750

Bits de Permisos Especiales: setuid, setgid y Sticky Bit

Estos extienden el modelo estándar para casos de uso específicos:

  • setuid (4xxx): Un ejecutable se ejecuta con los privilegios del propietario del archivo. Usado por binarios del sistema como /usr/bin/passwd. Peligroso en scripts personalizados — evítalo.
  • setgid (2xxx) en un directorio: Los archivos nuevos heredan el grupo del directorio en lugar del grupo primario del creador. Útil para directorios de proyectos compartidos.
  • Sticky bit (1xxx) en un directorio: Solo el propietario del archivo, el propietario del directorio o root pueden eliminar archivos dentro. Estándar en /tmp.
chmod 2775 /shared/project   # setgid en directorio compartido
chmod 1777 /tmp              # sticky bit — ya establecido por defecto

Más Allá de los Permisos Clásicos: ACLs y Módulos de Seguridad

Los permisos estándar rwx cubren la mayoría de los casos de uso, pero tienen limitaciones. Si necesitas otorgar acceso a un usuario específico sin cambiar la membresía del grupo, usa ACLs POSIX mediante setfacl y getfacl. En sistemas que ejecutan SELinux o AppArmor, las políticas del módulo de seguridad se aplican además de los permisos estándar — un archivo puede ser legible por todos en la capa UNIX pero aún así bloqueado por una política SELinux.

Referencia Rápida: Patrones de Permisos Comunes

ModoSimbólicoUso Típico
644rw-r--r--Archivos de configuración de servidor web, contenido público
755rwxr-xr-xDirectorios, scripts ejecutables
700rwx------Directorios home, directorio de claves SSH
600rw-------Archivos de clave privada (~/.ssh/id_rsa)
2775rwxrwsr-xDirectorios compartidos de grupo
1777rwxrwxrwtDirectorios escribibles por todos como /tmp

Conclusión

Los permisos de archivos en Linux siguen un modelo consistente y predecible. Una vez que comprendes la estructura propietario/grupo/otros, los bits rwx y cómo chmod y chown los aplican, tienes la base para asegurar correctamente cualquier archivo o directorio. Para casos donde el modelo de tres clases no es lo suficientemente granular, recurre a las ACLs — y siempre ten en mente el principio de mínimo privilegio.

Preguntas Frecuentes

Establecer 777 otorga permisos de lectura, escritura y ejecución a cada usuario en el sistema. Si bien elimina todas las barreras de acceso, también significa que cualquier usuario o proceso comprometido puede modificar o eliminar el archivo. Siempre asigna los permisos mínimos necesarios para que un archivo funcione correctamente.

chmod cambia qué acciones (lectura, escritura, ejecución) están permitidas en un archivo. chown cambia quién es el propietario del archivo y a qué grupo pertenece. Típicamente usas chown para asignar el propietario y grupo correctos primero, luego chmod para establecer los bits de permiso apropiados para cada clase.

Listar requiere el bit de lectura (r), pero entrar a un directorio requiere el bit de ejecución (x). Si un directorio tiene r pero no x, puedes ver los nombres de archivos con ls pero no puedes hacer cd a él ni abrir ningún archivo dentro por ruta. Agrega el bit de ejecución con chmod para solucionar esto.

Usa chmod con una X mayúscula en lugar de x minúscula. La bandera X mayúscula establece ejecución solo en directorios y archivos que ya tienen al menos un bit de ejecución establecido. Por ejemplo, chmod -R u=rwX,g=rX,o=rX /path aplica ejecución a directorios mientras deja los archivos regulares no ejecutables.

Gain control over your UX

See how users are using your site as if you were sitting next to them, learn and iterate faster with OpenReplay. — the open-source session replay tool for developers. Self-host it in minutes, and have complete control over your customer data. Check our GitHub repo and join the thousands of developers in our community.

OpenReplay