Permisos en Linux: usuarios, grupos y bits especiales (SUID, SGID y Sticky Bit)

Los permisos en Linux son el núcleo de su modelo de seguridad. Determinan quién puede leer, modificar o ejecutar un archivo. Pero detrás de esos tres caracteres “rwx” hay una estructura precisa, lógica y extremadamente potente. En esta guía definitiva te explico cómo funciona el sistema de permisos, qué papel juegan los usuarios y grupos, y cómo los bits especiales añaden capas extra de control.

En Linux, todo —absolutamente todo— es un archivo: desde un documento de texto hasta un dispositivo o proceso. Por eso, el sistema de permisos es el mecanismo que define qué usuarios pueden interactuar con esos archivos y de qué manera.

Comprender cómo funcionan los permisos no solo es esencial para administrar un sistema, sino también para entender por qué Linux es tan seguro frente a modificaciones accidentales o accesos indebidos.

Cada archivo en Linux tiene un propietario y un grupo asignado. A grandes rasgos:

  • Usuario (owner): normalmente quien creó el archivo.
  • Grupo: conjunto de usuarios que comparten ciertos permisos.
  • Otros (others): todos los demás usuarios del sistema.

Estos tres niveles —usuario, grupo y otros— componen la base de la matriz de permisos.

$ ls -l archivo.txt
-rw-r--r-- 1 mauro staff 4096 nov 13 10:00 archivo.txt

En este ejemplo:

  • -rw-r--r-- son los permisos.
  • mauro es el propietario (usuario).
  • staff es el grupo.

Los permisos básicos son tres:

  • r (read): permiso de lectura (ver el contenido del archivo o listar el directorio).
  • w (write): permiso de escritura (modificar o eliminar el contenido).
  • x (execute): permiso de ejecución (ejecutar un binario o script, o acceder a un directorio).

La primera posición en la salida de ls -l indica el tipo de archivo:

- archivo regular  
d directorio  
l enlace simbólico  
b dispositivo de bloque  
c dispositivo de carácter

Linux permite definir permisos de dos maneras: simbólica y numérica.

Modo simbólico

$ chmod u+x script.sh   # agrega ejecución al propietario
$ chmod g-w archivo.txt # quita escritura al grupo

Modo numérico (octal)

Cada permiso tiene un valor:

  • r = 4
  • w = 2
  • x = 1

La suma define el valor del permiso:

$ chmod 755 script.sh

Desglose:

  • 7 → propietario (4+2+1 = rwx)
  • 5 → grupo (4+0+1 = r-x)
  • 5 → otros (4+0+1 = r-x)

Además de los permisos básicos, existen tres bits especiales que modifican el comportamiento de los archivos y directorios:

SUID (Set User ID)

Cuando un archivo ejecutable tiene el bit SUID, cualquier usuario que lo ejecute lo hace con los privilegios del propietario del archivo, normalmente root.

$ chmod 4755 /usr/bin/passwd

Esto permite que usuarios normales cambien su contraseña (archivo /etc/shadow) sin ser root.

SGID (Set Group ID)

Similar al SUID, pero aplica al grupo. En archivos ejecutables, el proceso adopta el grupo del archivo. En directorios, los nuevos archivos heredan el grupo del directorio padre.

$ chmod 2755 /var/www/html

Ideal para proyectos donde varios usuarios trabajan en el mismo directorio compartido.

Sticky Bit

Se usa principalmente en directorios compartidos (como /tmp). Impide que los usuarios borren archivos que no les pertenecen dentro de ese directorio.

$ chmod 1777 /tmp

De esa forma, cada usuario puede crear archivos en /tmp, pero solo borrar los suyos.

Resumen rápido:
SUID → ejecuta como propietario
SGID → ejecuta o crea con el grupo del archivo/directorio
Sticky → protege archivos en directorios compartidos

Comandos útiles para analizar permisos y propiedad:

# Ver permisos detallados
$ ls -l

# Ver permisos en formato octal
$ stat -c "%A %a %n" *

# Cambiar propietario y grupo
$ chown usuario:grupo archivo

# Cambiar permisos recursivamente
$ chmod -R 755 /var/www

También es posible definir los permisos por defecto con umask, que controla qué permisos se restan al crear nuevos archivos.

$ umask
0022

Esto significa que los archivos nuevos no tendrán permisos de escritura para el grupo ni otros.

  • No otorgues permisos de escritura a “otros” salvo en directorios controlados (/tmp).
  • Evita abusar de SUID/SGID; solo deben aplicarse cuando es estrictamente necesario.
  • Usá grupos para delegar permisos en lugar de dar acceso directo a todos los usuarios.
  • Revisá periódicamente los permisos con find / -perm -4000 (para SUID) o -2000 (SGID).

Advertencia: los binarios con SUID root son una fuente común de vulnerabilidades si no están bien controlados.

Los permisos son la primera barrera de seguridad en Linux. Conocerlos en profundidad te permite no solo proteger tu sistema, sino también administrar correctamente el acceso a datos y procesos. Los bits especiales amplían esa lógica, ofreciendo herramientas poderosas para entornos multiusuario.

Si dominás los permisos, entendés el corazón del control de acceso en Linux. En próximos artículos de esta serie exploraremos cómo ACLs y SELinux llevan este modelo aún más lejos.

Publicaciones Similares

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *