Hola Fronters 👋

Si alguna vez has ejecutado ls -l y te has encontrado con una sopa de letras como -rwxr-xr-x y te has preguntado qué significa todo eso, este artículo es para ti. La permisología de archivos y directorios en Linux es uno de los pilares fundamentales de la seguridad y administración del sistema. Dominarla te permitirá controlar quién puede leer, escribir o ejecutar cada recurso en tu servidor.

Hoy vamos a cubrir desde los conceptos básicos hasta temas avanzados como permisos especiales (SUID, SGID, Sticky Bit) y ACLs, todo con ejemplos prácticos que puedes probar en tu terminal.

¿Qué son los permisos en Linux?

En Linux, cada archivo y directorio tiene un conjunto de permisos que determinan qué operaciones puede realizar cada usuario sobre él. El modelo es simple pero poderoso: tres acciones básicas (leer, escribir, ejecutar) para tres categorías de usuarios (propietario, grupo, otros).

Los tres tipos de permisos (rwx)

  • r (read): Permite leer el contenido del archivo. En directorios, permite listar su contenido.
  • w (write): Permite modificar el archivo. En directorios, permite crear, eliminar o renombrar archivos dentro de él.
  • x (execute): Permite ejecutar el archivo como programa. En directorios, permite acceder a su contenido (atravesarlo con cd).

Los tres niveles de usuarios

  • Owner (propietario): El usuario que creó el archivo. Puede cambiarse con chown.
  • Group (grupo): Todos los usuarios que pertenecen al grupo asignado al archivo.
  • Others (otros): Cualquier usuario que no sea ni el propietario ni miembro del grupo.

Cómo leer permisos con ls -l

Ejecuta ls -l y verás algo como esto:

$ ls -l
-rwxr-xr-x  1 root root  12345 May 15 10:00 script.sh
drwxr-x---  2 root admin  4096 May 15 10:00 proyecto

Vamos a desglosar el primer campo, que tiene 10 caracteres:

  • Carácter 1: Tipo de archivo. - = archivo regular, d = directorio, l = enlace simbólico.
  • Caracteres 2-4: Permisos del propietario (owner).
  • Caracteres 5-7: Permisos del grupo (group).
  • Caracteres 8-10: Permisos de otros (others).

En el ejemplo, -rwxr-xr-x significa: archivo regular, el propietario puede leer, escribir y ejecutar; el grupo y otros solo pueden leer y ejecutar.

chmod: Cambiar permisos

El comando chmod (change mode) es tu herramienta principal para modificar permisos. Puedes usar dos notaciones: simbólica y octal.

Notación simbólica

Usa letras para referirse a los usuarios y operadores para asignar permisos:

  • u = user (propietario), g = group, o = others, a = all (todos)
  • + añade permiso, - quita, = asigna exactamente
# Dar permiso de ejecución al propietario
chmod u+x script.sh

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

# Asignar solo lectura a otros
chmod o=r documento.txt

# Dar todos los permisos al propietario, solo lectura al grupo y otros
chmod u=rwx,go=r script.sh

Notación octal (numérica)

Cada permiso tiene un valor numérico: r=4, w=2, x=1. Se suman para cada grupo de usuario:

  • 7 (rwx): 4+2+1 — lectura, escritura y ejecución
  • 6 (rw-): 4+2 — lectura y escritura
  • 5 (r-x): 4+1 — lectura y ejecución
  • 4 (r–): 4 — solo lectura
  • 0 (—): sin permisos
# 755 = rwxr-xr-x (común para scripts y directorios)
chmod 755 script.sh

# 644 = rw-r--r-- (común para archivos de texto)
chmod 644 index.html

# 700 = rwx------ (solo el propietario tiene acceso total)
chmod 700 clave.pem

# 777 = rwxrwxrwx (acceso total para todos — ¡evitar en producción!)
chmod 777 carpeta-compartida

chown: Cambiar propietario y grupo

Con chown (change owner) puedes transferir la propiedad de archivos y directorios:

# Cambiar el propietario
chown juan documento.txt

# Cambiar propietario y grupo simultáneamente
chown juan:desarrolladores proyecto/

# Cambiar solo el grupo (usando los dos puntos)
chown :desarrolladores index.html

# Recursivo (-R): aplica a todo el árbol de directorios
chown -R www-data:www-data /var/www/html

chgrp: Cambiar grupo

Alternativamente, puedes usar chgrp exclusivamente para cambiar el grupo de un archivo:

# Cambiar grupo de un archivo
chgrp desarrolladores app.py

# Cambiar grupo recursivamente
chgrp -R desarrolladores /opt/proyecto/

# Combinación útil con find
find /opt/proyecto -type f -exec chgrp desarrolladores {} \;

umask: Máscara de permisos por defecto

Cuando creas un archivo o directorio, Linux asigna permisos por defecto aplicando la máscara umask. La umask resta permisos del valor base:

  • Archivos base: 666 (rw-rw-rw-)
  • Directorios base: 777 (rwxrwxrwx)
# Ver la umask actual
umask
# Resultado típico: 0022

# La umask 022 da como resultado:
# Archivos: 666 - 022 = 644 (rw-r--r--)
# Directorios: 777 - 022 = 755 (rwxr-xr-x)

# Cambiar umask temporalmente
umask 077
# Archivos: 600, Directorios: 700 (solo el propietario)

# Hacer el cambio permanente (en ~/.bashrc o ~/.profile)
echo "umask 027" >> ~/.bashrc

Permisos especiales: SUID, SGID y Sticky Bit

Linux ofrece tres permisos especiales que añaden comportamientos avanzados a archivos y directorios.

SUID (Set User ID) — 4xxx

Cuando un archivo ejecutable tiene SUID, se ejecuta con los privilegios del propietario del archivo, no del usuario que lo ejecuta. Se representa con una s en la posición del x del propietario.

# Ejemplo clásico: /bin/passwd tiene SUID
ls -l /bin/passwd
# -rwsr-xr-x 1 root root  ... /bin/passwd

# Activar SUID (simbólico)
chmod u+s script.sh

# Activar SUID (octal — el 4 al inicio)
chmod 4755 script.sh
# Resultado: -rwsr-xr-x

SGID (Set Group ID) — 2xxx

En archivos: se ejecuta con los privilegios del grupo. En directorios: los nuevos archivos creados dentro heredan el grupo del directorio. Se representa con s en la posición del grupo.

# Activar SGID en un directorio compartido
chmod g+s /compartido/proyecto
# Ahora todos los archivos creados aquí pertenecerán al grupo del directorio

# Activar SGID (octal — el 2 al inicio)
chmod 2755 /compartido/proyecto
# Resultado: drwxr-sr-x

Sticky Bit — 1xxx

En directorios, el Sticky Bit evita que los usuarios eliminen o renombren archivos que no les pertenecen, incluso si tienen permisos de escritura en el directorio. Se representa con una t en la posición de x de otros. El ejemplo clásico es /tmp.

# Ver el Sticky Bit en /tmp
ls -ld /tmp
# drwxrwxrwt  ... /tmp/

# Activar Sticky Bit
chmod +t /compartido/temporal

# Activar Sticky Bit (octal — el 1 al inicio)
chmod 1777 /compartido/temporal
# Resultado: drwxrwxrwt

Puedes combinar permisos especiales:

# SUID + SGID = 6 (4+2) al inicio
chmod 6755 script.sh
# Resultado: -rwsr-sr-x

ACLs (Access Control Lists)

Cuando los permisos estándar de owner/grupo/otros no son suficientes, las ACLs permiten asignar permisos a usuarios y grupos específicos de forma granular.

# Ver ACLs de un archivo
getfacl documento.txt
# Salida:
# # file: documento.txt
# # owner: juan
# # group: desarrolladores
# user::rw-
# group::r--
# other::r--

# Asignar permisos específicos a un usuario
setfacl -m u:maria:rwx documento.txt

# Asignar permisos a un grupo
setfacl -m g:ventas:rx proyecto/

# Eliminar una entrada de ACL
setfacl -x u:maria documento.txt

# Hacer los permisos recursivos (-R) y por defecto (-d) en directorios
setfacl -R -m u:maria:rwx /compartido/proyecto
setfacl -R -dm u:maria:rwx /compartido/proyecto

Casos prácticos resumidos

1. Script ejecutable para todos

chmod 755 deploy.sh
# -rwxr-xr-x  propietario: grupo  deploy.sh

2. Archivo de configuración sensible

chmod 600 config.db
# -rw-------  root: root  config.db

3. Directorio compartido de equipo

mkdir proyecto
chown :desarrolladores proyecto
chmod 2775 proyecto
# drwxrwsr-x  usuario: desarrolladores  proyecto/

4. Servidor web

chown -R www-data:www-data /var/www/misitio
find /var/www/misitio -type f -exec chmod 644 {} \;
find /var/www/misitio -type d -exec chmod 755 {} \;

Conclusión

Los permisos en Linux son tu primera línea de defensa. Conocer chmod, chown, chgrp y umask es esencial para cualquier administrador de sistemas. Los permisos especiales (SUID, SGID, Sticky Bit) y las ACLs te dan control granular cuando los permisos básicos se quedan cortos.

Recuerda la regla de oro: otorga siempre el mínimo privilegio necesario. Un chmod 777 es casi siempre señal de que algo no está bien diseñado.

¿Tienes dudas o quieres profundizar en algún aspecto? Déjanos tu comentario. ¡Hasta la próxima, Fronters! 🐧


📊 Infografía: Permisos en Linux

Descarga nuestra infografía resumen:

📥 Puedes descargar la infografía aquí