A logo showing the text blog.marcnuri.com
English
Inicio»Operaciones»Permisos de Archivos en Linux: Una Guía Completa

Entradas Recientes

  • Black Box vs White Box Testing: Cuándo Usar Cada Enfoque
  • Fabric8 Kubernetes Client 7.4.0 está disponible!
  • Kubernetes MCP Server se une a la organización Containers
  • MCP Tool Annotations: Añadiendo Metadatos y Contexto a Tus Herramientas de IA
  • Fabric8 Kubernetes Client 7.2.0 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

  • 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
  • enero 2016
  • diciembre 2015
  • noviembre 2015
  • diciembre 2014
  • noviembre 2014
  • octubre 2014
  • marzo 2014
  • 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
Twitter iconFacebook iconLinkedIn iconPinterest iconEmail icon

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