Linux··9 min de lectura

Permisos en Linux: chmod, chown y cuándo usar cada nivel

Guía práctica del sistema de permisos POSIX: los tres tríos, notación octal, setuid/setgid/sticky, y buenas prácticas para no acabar con un chmod 777.

El modelo POSIX en 30 segundos

Cada archivo tiene un propietario (user), un grupo y todos los demás (other). Cada uno de estos tres actores tiene tres permisos: read (r), write (w) y execute (x). En total nueve bits. Para directorios el significado cambia ligeramente:

  • r — listar contenido
  • w — crear/borrar archivos dentro
  • x — entrar (acceder a metadatos y a archivos por nombre)

Notación octal: los dígitos

Cada trío se traduce a un número:

  • rwx = 7 (4+2+1)
  • rw- = 6 (4+2)
  • r-x = 5 (4+1)
  • r-- = 4
  • -w- = 2
  • --x = 1
  • --- = 0

Así 755 es rwxr-xr-x: el owner puede todo, el resto solo lee y ejecuta. Nuestra calculadora chmod hace la conversión en cualquier dirección.

Los permisos por defecto (umask)

Cuando creas un archivo nuevo, el sistema aplica 0666 & ~umask. Con umask 022 (default en la mayoría de distros) los archivos nuevos nacen con 644 (rw-r--r--) y los directorios con 755.

En entornos multi-usuario endurecidos usa umask 027 (o 077 para máximo aislamiento): los nuevos archivos serán 640 y los directorios 750, invisibles a "other".

Bits especiales: setuid, setgid, sticky

Los cuatro números que a veces ves (4755) son 12 bits, no 9:

  • setuid (4000) — un ejecutable con setuid corre con los permisos del propietario del archivo, no de quien lo ejecuta. Así passwd puede modificar /etc/shadow aunque tú seas un usuario normal. Peligrosísimo si el propietario es root: un fallo en el binario escala privilegios.
  • setgid (2000) — igual pero para grupo. Aplicado a un directorio, hace que los archivos nuevos hereden el grupo del directorio (útil en carpetas compartidas).
  • sticky bit (1000) — solo el propietario puede borrar sus archivos. Es el permiso mágico de /tmp: cualquiera escribe, pero solo tú borras lo tuyo.

Ver bits especiales:


find / -perm -4000 -type f 2>/dev/null  # setuid — auditar mensualmente
find / -perm -2000 -type f 2>/dev/null  # setgid

chown: dueño y grupo


chown alice archivo         # cambiar dueño
chown alice:devs archivo    # dueño y grupo
chown -R alice:devs /app    # recursivo
chgrp devs archivo          # solo grupo

Regla: el proceso debe ser dueño de los archivos que necesita escribir. Un servicio corriendo como nginx no debe escribir en un directorio propiedad de root:root, y tampoco en uno con 777.

ACLs: cuando POSIX se queda corto

Si tres actores no bastan (varios grupos con distintos permisos sobre el mismo archivo), usa ACLs POSIX:


setfacl -m u:bob:rw archivo               # dar rw a bob
setfacl -m g:auditores:r /var/log         # el grupo auditores lee logs
setfacl -m d:u:app:rw /var/lib/app        # default: nuevos archivos heredan
getfacl archivo                            # ver ACL completa

Un signo + al final del ls -l indica que hay ACLs extendidas.

Casos reales y comandos correctos

Claves SSH:


chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519       # privada
chmod 644 ~/.ssh/id_ed25519.pub   # pública
chmod 644 ~/.ssh/authorized_keys

Directorio compartido de un equipo:


chown root:equipo /srv/compartido
chmod 2770 /srv/compartido        # setgid + rwx grupo, cero others

Todos los archivos nuevos heredarán el grupo equipo y serán editables por todo el grupo.

Web app tras deploy:


chown -R www-data:www-data /var/www/app
find /var/www/app -type d -exec chmod 750 {} \;
find /var/www/app -type f -exec chmod 640 {} \;
chmod 660 /var/www/app/storage/*.log   # los que la app deba escribir

Errores clásicos

  • chmod 777 — abrir escritura a todo el mundo. Si un tutorial te dice que hagas 777, el tutorial está mal. El problema es de ownership o de grupo.
  • chown -R root:root en un webroot — el servicio no podrá escribir uploads ni sesiones.
  • Perder los bits especialeschmod 755 /usr/bin/sudo elimina el setuid. Restauras con chmod 4755.
  • Cambiar recursivamente sin cuidadochmod -R 777 / como root te destruye el sistema. chown -R sobre / es igual de peligroso.

Checklist de auditoría

1. find / -perm -o=w -type f — archivos escribibles por others (deberían ser muy pocos) 2. find / -perm -4000 — ejecutables setuid (revisa que solo estén los del sistema) 3. find / -nouser -o -nogroup — archivos huérfanos tras borrar usuarios 4. ls -la /var/log/ — logs deben ser 640 root:adm o similar, no world-readable si contienen datos sensibles

Los permisos POSIX son un modelo sencillo con esquinas peligrosas. Aprenderlos una vez ahorra años de chmod 777 desperados.

Herramientas relacionadas

Sigue leyendo