bitlvl
ES

Chuleta de chmod y permisos

Todo el sistema de permisos cabe en una página. Imprímela, o deja abierta la calculadora chmod para lo interactivo.

Cabe en una página A4 / Letter en vertical; usa «Guardar como PDF» en el diálogo de impresión para conservar una copia.

Leer permisos

-rwxr-xr-xtipo, propietario rwx, grupo r-x, otros r-x
r = 4, w = 2, x = 1sumar por grupo → dígito octal
rwx r-x r-x= 7 5 5 = 755
d l c b p sdirectorio, enlace simbólico, disp. de caracteres, disp. de bloques, tubería, socket

Modos habituales

644archivos: propietario rw, todos r
755directorios, scripts, binarios
600 / 700archivo / directorio privado (claves SSH, .env, ~/.ssh)
664 / 775archivo / directorio escribible por el grupo
2775directorio compartido: los archivos nuevos heredan el grupo (setgid)
1777/tmp: cualquiera escribe, solo los propietarios borran (sticky)
4755binario setuid (passwd, sudo)
777casi siempre incorrecto

chmod simbólico

u g o auser (propietario), group, others, all
+ - =añadir, quitar, fijar exactamente
chmod u+x fel propietario puede ejecutar
chmod go-w fgrupo y otros pierden escritura
chmod a=r ftodos solo lectura
chmod u=rwx,g=rx,o= f= 750
chmod -R u=rwX,go=rX dirrecursivo; X = ejecución solo para directorios y archivos ya ejecutables
chmod g+s dirsetgid en un directorio
chmod +t dirsticky bit
chmod --reference=a bcopiar el modo de a en b

Bits especiales (dígito octal inicial)

4 setuidejecutar como el propietario del archivo; se muestra como s en la x del propietario
2 setgidejecutar como el grupo; en directorios: heredar el grupo; s en la x del grupo
1 stickyen directorios: solo el propietario puede borrar; t en la x de otros
S / Tmayúscula = bit especial activo sin ejecución (normalmente un error)

Propiedad

chown user filecambiar propietario (solo root)
chown user:group filepropietario y grupo
chown -R www-data: /var/wwwrecursivo; grupo vacío = grupo de inicio de sesión del usuario
chgrp group filesolo el grupo (un miembro puede hacerlo)
chown -hcambiar el propio enlace simbólico, no el destino

umask

umask 022archivos 644, directorios 755 (por defecto)
umask 077archivos 600, directorios 700 (privado)
umask 002archivos 664, directorios 775 (trabajo en grupo)
UMask=0077en un [Service] de systemd

Encontrar y arreglar

find . -type f -perm -o+warchivos escribibles por todos
find / -perm -4000 -type fbinarios setuid
find . -type d -exec chmod 755 {} +arreglar solo directorios
find . -type f -exec chmod 644 {} +arreglar solo archivos
stat -c '%a %U %G %n' *modo octal, propietario, grupo, nombre
ls -ld direl directorio en sí, no su contenido

ACL (cuando rwx no basta)

getfacl filemostrar; un + en ls -l significa que existe una
setfacl -m u:alice:rw filedar rw a alice
setfacl -m d:g:dev:rwx dirACL por defecto para archivos nuevos en dir
setfacl -b filequitar todas las ACL

Recuerda

  • En directorios, x = puede entrar; r = puede listar; w = puede crear/borrar entradas.
  • Borrar un archivo requiere w en el directorio, no en el archivo.
  • root ignora rwx (pero no el bit de ejecución para ejecutar).
  • «Permission denied» suele ser de propiedad; mira ls -l antes de chmod 777.

Los resultados y mensajes de esta herramienta se muestran en inglés.

Preguntas

¿Cómo arreglo una raíz web entera de forma segura?

find /var/www -type d -exec chmod 755 {} + y find /var/www -type f -exec chmod 644 {} +, luego chown -R www-data: /var/www. Nunca chmod -R 777.