Linux··12 min de lectura

Permisos en Linux más allá de chmod: setuid, setgid, sticky bit y ACLs

Cuando rwx no basta: cómo funcionan los bits especiales, las ACLs POSIX y los atributos extendidos, con ejemplos reales y errores frecuentes.

rwx no siempre es suficiente

El modelo clásico de permisos de Unix son tres bits (read, write, execute) para tres clases (owner, group, other). Es simple y funciona el 90% del tiempo. El calculador chmod traduce entre notación octal y simbólica al vuelo. Pero hay casos donde necesitas más: ejecutar un binario con los privilegios del dueño, compartir un directorio entre varios usuarios sin colisiones, o dar acceso a un usuario concreto sin cambiar de grupo.

Los tres bits especiales

setuid (4000)

Cuando un binario tiene setuid, se ejecuta con los privilegios del dueño del archivo, no de quien lo lanza. El ejemplo canónico es /usr/bin/passwd: cualquier usuario puede cambiar su contraseña porque el binario corre como root para escribir en /etc/shadow.


ls -l /usr/bin/passwd
# -rwsr-xr-x 1 root root ...
chmod u+s archivo   # activa setuid

Peligroso: un binario setuid con un bug de buffer overflow es una escalada instantánea a root. Nunca apliques setuid a shell scripts (el kernel lo ignora en la mayoría de sistemas modernos por seguridad).

setgid (2000)

En binarios: se ejecuta con el grupo del archivo. En directorios hace algo distinto y muy útil: cualquier archivo creado dentro hereda el grupo del directorio, no el grupo primario del usuario. Es la forma clásica de compartir carpetas entre varios usuarios de un mismo equipo.


chmod g+s /srv/compartida
# ahora todos los archivos nuevos serán del grupo "equipo"

sticky bit (1000)

En /tmp verás drwxrwxrwt. Ese t final es el sticky bit. Significa: en este directorio, solo el dueño del archivo (o root) puede borrarlo o renombrarlo, aunque el directorio tenga permiso de escritura para todos. Sin él, cualquier usuario podría borrar archivos de otros en /tmp.

Notación octal completa

El chmod octal admite cuatro dígitos, no tres. El primero son los bits especiales:

  • 4755: setuid + rwxr-xr-x.
  • 2775: setgid + rwxrwxr-x (el clásico de carpetas compartidas).
  • 1777: sticky + rwxrwxrwx (el clásico de /tmp).

ACLs POSIX: cuando el modelo owner/group/other se queda corto

Imagina un archivo del que el dueño es Alice, el grupo es dev, y necesitas dar lectura solo a Bob (que no está en dev). Con permisos clásicos, o metes a Bob en el grupo (y le das acceso a todo lo demás del grupo) o abres a other (y se lo das al mundo). Ninguna opción es correcta.

Las ACLs POSIX permiten permisos por usuario y por grupo, adicionales al modelo clásico:


setfacl -m u:bob:r-- archivo.log
getfacl archivo.log

El ls -l muestra un + al final de los permisos para indicar que hay ACLs. Las ACLs por defecto en directorios (setfacl -d) se heredan a los hijos.

Atributos extendidos e inmutabilidad

Además de permisos hay atributos a nivel de filesystem (ext4, xfs, btrfs):

  • chattr +i archivo: inmutable. Ni root puede modificarlo sin quitar el flag. Útil para /etc/resolv.conf en servidores.
  • chattr +a archivo: append-only. Ideal para logs auditados.
  • lsattr los lista.

Capabilities: setuid granular

En lugar de dar todo el poder de root, las capabilities dividen los privilegios. Por ejemplo, para que un binario pueda abrir puertos <1024 sin ser root:


setcap 'cap_net_bind_service=+ep' /usr/local/bin/miservicio

Es la forma moderna y segura de sustituir muchos setuid.

Errores frecuentes

  • chmod 777 "para que funcione": casi siempre es un fallo de propietario, no de permisos. Corrige con chown en su lugar.
  • Copiar archivos con cp sin -p: pierdes permisos y ownership. Usa cp -a en scripts de despliegue.
  • setuid en scripts: no funciona y da falsa sensación de seguridad.
  • No usar umask: el umask por defecto (022) da 755 a directorios y 644 a archivos. Para directorios compartidos, considera 002 (grupo con escritura).

Domina estos permisos y podrás resolver el 99% de los "no tengo acceso" sin caer en el clásico chmod 777.

Herramientas relacionadas

Sigue leyendo