Un logotipo con el texto blog.marcnuri.com
English
Inicio»Operaciones»Permisos de Archivos en Linux: Una Guía Completa

Entradas Recientes

  • ¡Fabric8 Kubernetes Client 8.0 está disponible!
  • ¡Fabric8 Kubernetes Client 7.9 está disponible!
  • ¡Eclipse JKube 1.20 está disponible!
  • Project, Agent, Person: El Eje que Falta en Herramientas de Programación con IA
  • ¡Fabric8 Kubernetes Client 7.8 está disponible!

Categorías

  • Antiguo
  • Cloud Native
  • Desarrollo Backend
  • Desarrollo Frontend
  • Herramientas
  • Ingeniería de calidad
  • Inteligencia Artificial
  • JavaScript
  • Operaciones
  • Personal
  • Proyectos personales
  • Reflexiones sobre Ingeniería

Archivos

  • septiembre 2026
  • julio 2026
  • junio 2026
  • mayo 2026
  • abril 2026
  • marzo 2026
  • febrero 2026
  • enero 2026
  • diciembre 2025
  • octubre 2025
  • septiembre 2025
  • julio 2025
  • mayo 2025
  • abril 2025
  • marzo 2025
  • febrero 2025
  • enero 2025
  • diciembre 2024
  • noviembre 2024
  • agosto 2024
  • junio 2024
  • mayo 2024
  • abril 2024
  • marzo 2024
  • febrero 2024
  • enero 2024
  • diciembre 2023
  • noviembre 2023
  • octubre 2023
  • septiembre 2023
  • agosto 2023
  • julio 2023
  • junio 2023
  • mayo 2023
  • abril 2023
  • marzo 2023
  • febrero 2023
  • enero 2023
  • diciembre 2022
  • noviembre 2022
  • octubre 2022
  • septiembre 2022
  • agosto 2022
  • julio 2022
  • junio 2022
  • mayo 2022
  • marzo 2022
  • febrero 2022
  • enero 2022
  • diciembre 2021
  • noviembre 2021
  • octubre 2021
  • septiembre 2021
  • agosto 2021
  • julio 2021
  • enero 2021
  • diciembre 2020
  • octubre 2020
  • septiembre 2020
  • agosto 2020
  • junio 2020
  • mayo 2020
  • marzo 2020
  • febrero 2020
  • enero 2020
  • noviembre 2019
  • septiembre 2019
  • julio 2019
  • diciembre 2018
  • agosto 2018
  • julio 2018
  • junio 2018
  • mayo 2018
  • marzo 2018
  • febrero 2018
  • noviembre 2017
  • octubre 2017
  • agosto 2017
  • julio 2017
  • enero 2017
  • julio 2016
  • mayo 2016
  • enero 2016
  • diciembre 2015
  • noviembre 2015
  • diciembre 2014
  • noviembre 2014
  • octubre 2014
  • marzo 2014
  • agosto 2012
  • febrero 2011
  • junio 2008
  • mayo 2008
  • abril 2008
  • enero 2008
  • junio 2007
  • mayo 2007
  • abril 2007
  • marzo 2007

Permisos de Archivos en Linux: Una Guía Completa

2014-10-17 en Operaciones etiquetado Linux / BASH por Marc Nuri | Última actualización: 2025-10-17
English version

Los permisos de archivos son una de las características de seguridad fundamentales en Linux y sistemas operativos tipo Unix. Controlan quién puede leer, escribir o ejecutar archivos y directorios, sentando la base del modelo de seguridad multiusuario que hace que los sistemas Linux sean seguros y fiables.

En este artículo, te mostraré cómo ver, entender y modificar los permisos de archivos, trabajar con notación octal, manejar permisos especiales y solucionar problemas comunes relacionados con permisos.

Cómo ver los permisos de archivos en Linux

⁠

La forma más común de ver los permisos de ficheros es usando el comando ls -l:

bash
ls -l blog.marcnuri.com.txt

Esto produce la siguiente salida:

-rw-r--r-- 1 marc users 1024 Oct 17 10:00 blog.marcnuri.com.txt

Vamos a desglosar lo que significa cada parte:

  • -rw-r--r-- - La cadena de permisos (lo analizaremos en profundidad a continuación)
  • 1 - Número de enlaces duros (hard links)
  • marc - Propietario del archivo
  • users - Grupo que posee el archivo
  • 1024 - Tamaño del archivo en bytes
  • Oct 17 10:00 - Fecha y hora de última modificación
  • blog.marcnuri.com.txt - Nombre del archivo

Para obtener información más detallada, puedes usar el comando stat:

bash
stat blog.marcnuri.com.txt

Esto muestra metadatos adicionales incluyendo tiempos de acceso y modificación, número de inode y representaciones de permisos tanto simbólicas como octales.

Entendiendo la cadena de permisos

⁠

La cadena de permisos -rw-r--r-- contiene 10 caracteres. Vamos a decodificarlos posición por posición:

Posición 1 - Tipo de archivo:

  • - Archivo estándar
  • d Directorio
  • l Enlace simbólico
  • c Dispositivo de caracteres
  • b Dispositivo de bloques

Posiciones 2-4 - Permisos del propietario/usuario:

  • r Permiso de lectura
  • w Permiso de escritura
  • x Permiso de ejecución
  • - Permiso no concedido

Posiciones 5-7 - Permisos del grupo (mismo formato que el propietario)

Posiciones 8-10 - Permisos de otros/todos (mismo formato que el propietario)

Así que -rw-r--r-- significa:

  • Es un archivo regular (-)
  • El propietario puede leer y escribir (rw-)
  • El grupo solo puede leer (r--)
  • Otros solo pueden leer (r--)

Tipos de permisos explicados

⁠

Los tres tipos básicos de permisos se comportan de manera diferente para archivos y directorios:

Permiso de lectura (r)

⁠

Para archivos: Permite ver el contenido del archivo.

bash
cat blog.marcnuri.com.txt

Para directorios: Permite listar el contenido del directorio.

bash
ls /algun/directorio

Sin permiso de lectura en un directorio, no puedes ver qué archivos contiene, incluso si conoces sus nombres.

Permiso de escritura (w)

⁠

Para archivos: Permite modificar el contenido del archivo.

bash
echo "nuevo contenido" > blog.marcnuri.com.txt

Para directorios: Permite crear, eliminar o renombrar archivos dentro del directorio.

Ten en cuenta que para eliminar un archivo, necesitas permiso de escritura en el directorio, no en el archivo en sí.

Permiso de ejecución (x)

⁠

Para archivos: Permite ejecutar el archivo como un programa o script.

bash
./script.sh

Para directorios: Permite acceder al directorio (entrar en él con cd) y acceder a archivos dentro de él.

Esto es crucial: incluso si un directorio tiene permiso de lectura, necesitas permiso de ejecución para hacer cd en él o acceder a archivos dentro.

Grupos de permisos

⁠

Linux divide los permisos en tres grupos:

Propietario (Usuario): El usuario que posee el archivo. Normalmente, la persona que lo creó, aunque la propiedad se puede cambiar.

Grupo: Un conjunto de usuarios que comparten acceso. Útil para la colaboración en equipo donde múltiples usuarios necesitan el mismo nivel de acceso.

Otros (Todos): Todos los demás en el sistema que no son el propietario ni están en el grupo.

Este sistema de tres niveles proporciona un control flexible sobre quién puede acceder a tus archivos mientras mantiene la simplicidad.

Notación octal (permisos numéricos)

⁠

Los permisos se pueden representar como números octales de tres dígitos, donde cada dígito representa un grupo de permisos (propietario, grupo, otros).

Cada tipo de permiso tiene un valor numérico:

  • Lectura (r) = 4
  • Escritura (w) = 2
  • Ejecución (x) = 1
  • Sin permiso = 0

Sumas estos valores para cada grupo:

SimbólicoBinarioOctalSignificado
---0000Sin permisos
--x0011Solo ejecución
-w-0102Solo escritura
-wx0113Escritura y ejecución
r--1004Solo lectura
r-x1015Lectura y ejecución
rw-1106Lectura y escritura
rwx1117Lectura, escritura y ejecución

Combinaciones de permisos comunes

⁠

755 (rwxr-xr-x) - Archivos ejecutables y directorios

  • El propietario puede hacer cualquier cosa
  • Grupo y otros pueden leer y ejecutar
  • Común para scripts y programas

644 (rw-r--r--) - Archivos regulares

  • El propietario puede leer y escribir
  • Grupo y otros solo pueden leer
  • Común para documentos y archivos de configuración

600 (rw-------) - Archivos privados

  • Solo el propietario puede leer y escribir
  • Nadie más tiene acceso
  • Común para claves SSH y datos sensibles

777 (rwxrwxrwx) - Acceso completo para todos

  • Todos pueden hacer cualquier cosa
  • Generalmente considerado inseguro
  • Evitar a menos que sea absolutamente necesario

Cómo cambiar permisos de archivos (chmod)

⁠

El comando chmod cambia los permisos de archivos. Soporta dos modos: simbólico y numérico.

Modo simbólico

⁠

El modo simbólico usa letras y operadores para modificar permisos:

bash
# Añadir permiso de ejecución para el propietario
chmod u+x script.sh

# Quitar permiso de escritura para el grupo
chmod g-w documento.txt

# Establecer permisos exactos para otros (solo lectura)
chmod o=r archivo.txt

# Añadir lectura y escritura para el propietario, quitar ejecución para otros
chmod u+rw,o-x archivo.txt

El formato es: [quién][operador][permisos]

Quién:

  • u - Usuario/propietario
  • g - Grupo
  • o - Otros
  • a - Todos (usuario, grupo y otros)

Operadores:

  • + - Añadir permiso
  • - - Quitar permiso
  • = - Establecer permiso exacto

Modo numérico

⁠

El modo numérico usa valores octales para establecer permisos:

bash
# Establecer permisos a rwxr-xr-x
chmod 755 script.sh

# Establecer permisos a rw-r--r--
chmod 644 documento.txt

# Establecer permisos a rw-------
chmod 600 clave-privada.pem

Permisos recursivos

⁠

Para cambiar permisos de un directorio y todo su contenido, usa la opción -R:

bash
chmod -R 755 /ruta/al/directorio

Ten cuidado con las operaciones recursivas, ya que afectan a todos los archivos y subdirectorios.

Permisos de directorios vs. archivos

⁠

Los directorios necesitan combinaciones de permisos diferentes a los archivos para funcionar correctamente.

Para que un directorio sea utilizable, típicamente necesita permiso de ejecución. Sin él, no puedes hacer cd al directorio o acceder a archivos dentro de él, incluso si tienes permiso de lectura.

Escenarios comunes:

bash
# Directorio con r-- (legible pero no accesible)
ls /algun/dir        # Funciona - muestra nombres de archivos
cd /algun/dir        # Falla - no se puede entrar
cat /algun/dir/archivo  # Falla - no se puede acceder a archivos

# Directorio con --x (accesible pero no legible)
ls /algun/dir        # Falla - no se puede listar contenido
cd /algun/dir        # Funciona - se puede entrar
cat /algun/dir/archivo  # Funciona si conoces el nombre del archivo

Para operación normal de directorios, típicamente quieres tanto permisos de lectura como de ejecución (por ejemplo, 755 o 750).

Permisos especiales

⁠

Más allá de los permisos básicos, Linux soporta tres tipos de permisos especiales:

SetUID (SUID)

⁠

Cuando se establece en un archivo ejecutable, el programa se ejecuta con los permisos del propietario del archivo, no del usuario que lo ejecutó.

bash
# Establecer SUID
chmod u+s /usr/bin/passwd
# O usando octal
chmod 4755 /usr/bin/passwd

El comando passwd usa SUID porque necesita modificar /etc/shadow (un archivo propiedad de root) incluso cuando lo ejecutan usuarios regulares.

SUID aparece como s en la posición de ejecución del propietario:

-rwsr-xr-x 1 root root 68208 Oct 17 10:00 /usr/bin/passwd

SetGID (SGID)

⁠

Para archivos: El archivo se ejecuta con los permisos del grupo del archivo.

Para directorios: Los archivos creados dentro del directorio heredan el grupo del directorio, no el grupo primario del creador.

bash
# Establecer SGID
chmod g+s /compartido/proyecto
# O usando octal
chmod 2775 /compartido/proyecto

SGID aparece como s en la posición de ejecución del grupo:

drwxrwsr-x 2 marc desarrolladores 4096 Oct 17 10:00 /compartido/proyecto

Sticky Bit

⁠

Cuando se establece en un directorio, solo el propietario del archivo, el propietario del directorio o root pueden eliminar o renombrar archivos dentro de ese directorio.

bash
# Establecer sticky bit
chmod +t /tmp
# O usando octal
chmod 1777 /tmp

El sticky bit aparece como t en la posición de ejecución de otros:

drwxrwxrwt 2 root root 4096 Oct 17 10:00 /tmp

Esto se usa comúnmente en /tmp para prevenir que los usuarios eliminen los archivos temporales de otros.

Combinando permisos especiales

⁠

Los permisos especiales añaden un cuarto dígito a la notación octal:

bash
chmod 4755 archivo  # SUID + 755
chmod 2755 dir   # SGID + 755
chmod 1777 dir   # Sticky bit + 777
chmod 6755 archivo  # SUID + SGID + 755

Los valores del dígito de permisos especiales:

  • 4 = SUID
  • 2 = SGID
  • 1 = Sticky bit

Cambiar la propiedad (chown y chgrp)

⁠

Para cambiar quién posee un archivo, usa el comando chown:

bash
# Cambiar solo el propietario
sudo chown marc archivo.txt

# Cambiar propietario y grupo
sudo chown marc:desarrolladores archivo.txt

# Cambiar solo el grupo
sudo chown :desarrolladores archivo.txt
# O usar chgrp
sudo chgrp desarrolladores archivo.txt

# Cambio de propiedad recursivo
sudo chown -R marc:desarrolladores /ruta/al/directorio

Cambiar la propiedad típicamente requiere privilegios de root (vía sudo) a menos que poseas el archivo y lo estés cambiando a un grupo al que perteneces.

Permisos predeterminados y umask

⁠

Cuando creas un nuevo archivo o directorio, Linux aplica permisos predeterminados basados en el valor umask.

La umask es una máscara que resta permisos de los valores predeterminados base:

  • Predeterminado base para archivos: 666 (rw-rw-rw-)
  • Predeterminado base para directorios: 777 (rwxrwxrwx)

El valor de umask se resta de estos permisos base.

bash
# Ver umask actual
umask

# Ver en notación simbólica
umask -S

# Establecer umask
umask 0022

Valores de umask comunes:

0022 - Predeterminado en muchos sistemas

  • Archivos creados con 644 (rw-r--r--): 666 - 022 = 644
  • Directorios creados con 755 (rwxr-xr-x): 777 - 022 = 755

0002 - Común para entornos compartidos

  • Archivos creados con 664 (rw-rw-r--): 666 - 002 = 664
  • Directorios creados con 775 (rwxrwxr-x): 777 - 002 = 775

0077 - Restrictivo (archivos privados)

  • Archivos creados con 600 (rw-------): 666 - 077 = 600
  • Directorios creados con 700 (rwx------): 777 - 077 = 700

Para hacer la umask permanente, añádela al archivo de configuración de tu shell (~/.bashrc o ~/.zshrc).

Escenarios de permisos comunes

⁠

Hacer scripts ejecutables

⁠

Después de crear un script de shell, hazlo ejecutable:

bash
chmod +x script.sh
# Ahora puedes ejecutarlo
./script.sh

Asegurar claves SSH

⁠

Las claves privadas SSH deben tener permisos restringidos:

bash
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub
chmod 700 ~/.ssh

SSH se negará a usar claves con permisos demasiado permisivos.

Permisos de servidor web

⁠

Para servidores web como Apache o Nginx:

bash
# Directorios
chmod 755 /var/www/html

# Archivos estáticos (HTML, CSS, JS)
chmod 644 /var/www/html/*.html

# Archivos PHP (si no se ejecutan como propietario)
chmod 644 /var/www/html/*.php

# Directorio de uploads (escribible por el servidor web)
chmod 775 /var/www/html/uploads

Directorios compartidos de equipo

⁠

Para colaboración en equipo:

bash
# Crear directorio compartido con SGID
mkdir /compartido/proyecto
chmod 2775 /compartido/proyecto
chgrp developers /compartido/proyecto

Ahora todos los archivos creados en /compartido/proyecto pertenecerán al grupo developers, y los miembros del grupo podrán modificarlos.

Solución de problemas comunes

⁠

"Permission denied" al ejecutar un script

⁠

Problema: bash: ./script.sh: Permission denied

Solución: Añade permiso de ejecución:

bash
chmod +x script.sh

No puedes eliminar un archivo que posees

⁠

Problema: rm: cannot remove 'archivo.txt': Permission denied

Causa: Necesitas permiso de escritura en el directorio padre, no en el archivo.

Solución:

bash
chmod +w /directorio/padre

O si el directorio tiene el sticky bit establecido, debes ser el propietario del archivo o el propietario del directorio.

No puedes acceder a archivos en un directorio legible

⁠

Problema: ls funciona pero cat archivo falla

Causa: El directorio carece de permiso de ejecución.

Solución:

bash
chmod +x /ruta/al/directorio

SSH se niega a usar tu clave

⁠

Problema: Permissions 0644 for '/home/marc/.ssh/id_rsa' are too open

Causa: Las claves SSH deben ser privadas (legibles solo por el propietario).

Solución:

bash
chmod 600 ~/.ssh/id_rsa
chmod 700 ~/.ssh

Recapitulando

⁠

Los permisos de archivos en Linux proporcionan un sistema de seguridad robusto y flexible:

  • Usa ls -l para ver permisos en formato simbólico
  • Tres tipos de permisos: lectura (r), escritura (w), ejecución (x)
  • Tres grupos de permisos: propietario (u), grupo (g), otros (o)
  • Los permisos se pueden representar simbólicamente (rwxr-xr-x) o numéricamente (755)
  • Usa chmod para cambiar permisos, chown para cambiar propiedad
  • Los permisos especiales (SUID, SGID, sticky bit) proporcionan control avanzado
  • Los directorios necesitan permiso de ejecución para ser accesibles
  • La umask controla los permisos predeterminados para archivos nuevos

Buenas prácticas

⁠
  • Sigue el principio de menor privilegio (otorga solo los permisos necesarios)
  • Usa 600 para claves privadas y archivos sensibles
  • Usa 644 para archivos normales, 755 para ejecutables y directorios
  • Evita 777 a menos que sea absolutamente necesario
  • Usa SGID para directorios de equipo compartidos
  • Audita regularmente los permisos en archivos sensibles

Entender los permisos de archivos es esencial para la administración de sistemas Linux, la seguridad y la colaboración efectiva en entornos multiusuario.

Referencias

⁠
  • Página del manual de chmod
  • Página del manual de chown
  • Permisos de acceso a archivos - Wikipedia
Icono de TwitterIcono de FacebookIcono de LinkedInIcono de PinterestIcono de correo electrónico

Navegador de artículos
¿Qué es un Heap Dump en Java?¿Qué es Test-Driven Development (TDD)? Una Introducción Práctica
© 2007 - 2026 Marc Nuri