linuxpermisosseguridadsysadmin

Permisos Linux avanzados: setuid, sticky bit y umask explicados

Más allá del octal rwx: bits especiales setuid/setgid/sticky bit, cómo funciona umask, permisos por defecto y los casos reales donde cada uno importa.

27 de agosto de 2026·8 min de lectura

Si dominas el octal 755 ya sabes la mitad del sistema de permisos Unix. La otra mitad —los bits especiales y umask— explica comportamientos que parecen mágicos: por qué passwd puede modificar /etc/shadow siendo root-only, por qué no puedes borrar archivos ajenos en /tmp pese a tener permiso de escritura, y por qué tus ficheros nuevos nacen con unos permisos u otros. Todo tiene lógica y se aprende en diez minutos.

Repaso exprés del modelo base

Cada fichero lleva tres tríos rwx (lectura/escritura/ejecución) para propietario, grupo y otros. El octal suma bits: r=4, w=2, x=1.

-rwxr-x---  1 miguel dev 4096 ago 27 file.sh
 └┬┘└┬┘└┬┘
  │  │  └─ otros: --- (0)
  │  └──── grupo: r-x (5)   → 754
  └─────── dueño: rwx (7)

La semántica difiere según tipo: sobre ficheros, x = ejecutable; sobre directorios, r = listar nombres, x = atravesar (acceder a su contenido), w = crear/borrar entradas. Ese matiz genera la confusión clásica: un directorio r-- permite ver nombres pero no entrar; uno --x permite acceder sabiendo la ruta exacta pero no listarla.

Los bits especiales: el cuarto dígito

El octal admite cuatro dígitos: el primero codifica los bits especiales (setuid=4, setgid=2, sticky=1).

Setuid (4000) en un ejecutable: corre con los privilegios del DUEÑO del fichero, no de quien lo lanza. El caso canónico es /usr/bin/passwd:

-rwsr-xr-x root root /usr/bin/passwd
  ↑ s minúscula = setuid activo

Cambiar tu contraseña exige escribir en /etc/shadow, que solo root puede tocar. Gracias al setuid, el binario passwd eleva temporalmente sus privilegios, actualiza el shadow y baja. Es escalada de privilegios diseñada a propósito — y por eso cualquier binario setuid-root inesperado es hallazgo de auditoría inmediato (find / -perm -4000 -user root).

Setgid (2000) tiene dos vidas:

  • En ejecutables: como setuid pero con el grupo.
  • En directorios: todo fichero creado dentro hereda el GRUPO del directorio en vez del grupo primario del creador. Es la pieza clave de los directorios de equipo:
mkdir /srv/proyecto
chgrp devs /srv/proyecto
chmod 2775 /srv/proyecto     # 2=setgid + rwxrwxr-x

Sin setgid, Ana crea ficheros con grupo ana y Bob no puede editarlos pese a compartir devs. Con él, todo nace colaborativo. Combinado con permisos por defecto correctos, resuelve el 90% de los dolores de compartición en servidores.

Sticky bit (1000) en directorios: solo el dueño del fichero (o del directorio, o root) puede BORRARLO, aunque el directorio sea world-writable. Su único caso real es /tmp:

drwxrwxrwt 22 root root /tmp
          ↑ t = sticky

Sin sticky bit, cualquiera podría borrar los temporales ajenos en un directorio 777 — negación de servicio trivial. Con él, escritura universal, borrado solo propio.

Umask: los permisos de nacimiento

Cuando creas un fichero, ¿por qué sale 644 y no 666? La respuesta es umask: la máscara que RESTA permisos en la creación.

Los procesos piden permisos máximos (ficheros 666, directorios 777 — la x no se otorga por defecto a ficheros nuevos por seguridad) y umask los filtra:

permisos finales = petición AND NOT umask

umask 022:  666 & ~022 = 644   (rw-r--r--)
            777 & ~022 = 755   (rwxr-xr-x)
umask 077:  666 & ~077 = 600   (rw-------)  ← paranoico, ideal para claves
            777 & ~077 = 700

Consulta el tuyo con umask (valor octal) o umask -S (simbólico). Se fija por sesión/perfil (~/.bashrc) o globalmente en /etc/profile y PAM. Casos de uso real: servidores multiusuario corporativos van bien con 027 (grupo lee, otros nada); servicios que generan claves privadas deben correr con umask 077 — una clave SSH nacida 644 provoca el aviso conocido de OpenSSH.

ACLs: cuando tres tríos no bastan

El modelo clásico tiene un límite duro: un solo grupo por fichero. Cuando necesitas "devs lectura+escritura, auditores solo lectura, servicio web lectura", llegan las ACL POSIX:

setfacl -m g:auditores:r-x /srv/proyecto
getfacl /srv/proyecto

En ls -l aparecen como un + final (drwxrwxr-x+). Suficiente para la mayoría de servidores de ficheros; para sistemas grandes, NFSv4/Samba llevan el modelo más lejos.

Higiene de permisos: lo que revisa una auditoría

  • Binarios setuid inesperados (especialmente en /home o rutas escribibles).
  • Directorios compartidos sin setgid (dolores de equipo) o sin sticky (riesgo de borrado).
  • Ficheros de configuración world-readable con credenciales (find /etc -perm -004).
  • Claves privadas SSH/CRT con más de 600 — OpenSSH directamente las rechaza.

Para calcular y visualizar combinaciones octal/simbólicas sin hacer cuentas mentales, nuestro calculador chmod traduce entre formatos al instante; la base del sistema está en la guía de permisos octales.

Preguntas frecuentes

¿Por qué veo T mayúscula en lugar de t? Sticky bit activo pero sin permiso de ejecución para otros (drwxrw-rw-T). Igual con S en setuid: bit especial sin x — estado casi siempre erróneo, señal de chmod mal aplicado.

¿cp y mv conservan permisos? mv dentro del mismo filesystem sí (solo renombra la entrada); cp crea nuevo aplicando umask salvo -p. Detalle crítico al copiar claves o configs entre máquinas.

¿chmod 777 arregla "permission denied"? Casi nunca es la solución correcta y abre agujeros reales. Diagnostica QUÉ usuario ejecuta el proceso, QUÉ permiso falta exactamente (¿atravesar el directorio?) y concede lo mínimo.


Calcula permisos octales y simbólicos con nuestro calculador chmod, gratis y directamente en tu navegador.

Pruébalo sin código

Calculadora chmod

Convierte permisos Linux entre octal y simbólico.

Abrir Calculadora chmod

Hecho por

Miguel Ángel Colorado Marin (MACM)

Full-Stack Developer · Guadalajara, España

Desarrollo aplicaciones web, herramientas digitales y proyectos completos — desde el diseño hasta el despliegue.

Contáctame