Saltar al contenido

Linux: permisos

Cómo se leen los diez caracteres de ls -l, cómo se compone un 755 o un 644, cómo se cambian los permisos y el propietario, y qué hacen los tres bits especiales.

Los permisos en octal: de dónde sale un 755

Cada fichero tiene tres permisos y tres destinatarios. Los permisos son leer, escribir y ejecutar; los destinatarios son el propietario del fichero, el grupo al que pertenece y todos los demás. Nueve casillas en total, que es lo que se ve en la salida de ls -l.

PermisoLetraValorEn un ficheroEn un directorio
Lecturar4Leer su contenidoListar los nombres que contiene
Escrituraw2ModificarloCrear y borrar entradas dentro
Ejecuciónx1Ejecutarlo como programaEntrar en él y atravesarlo

Cada terna se convierte en un dígito sumando los valores de los permisos que tenga. Como 4, 2 y 1 son potencias de dos, cada combinación da un número distinto y no hay ambigüedad: 7 es rwx, 6 es rw, 5 es rx, 4 es solo r y 0 es nada. El número final son tres dígitos, uno por destinatario, en el orden propietario, grupo y otros.

NúmeroSe leeUso habitual
755rwxr-xr-xUn programa o un directorio: el dueño lo cambia, los demás lo usan
644rw-r--r--Un fichero de datos o de configuración normal
600rw-------Un fichero privado, como una clave
777rwxrwxrwxTodo abierto a todo el mundo: casi siempre un error de seguridad

Cuatro es leer, dos escribir y uno ejecutar. Con eso se compone y se descompone cualquier número de permisos sin memorizar tablas.

Para el examen

  • Valores: r=4, w=2, x=1

  • Orden: propietario, grupo y otros

  • 755 y 644: rwxr-xr-x y rw-r--r--

  • En un directorio: x es entrar, r es listar y w es crear o borrar dentro

chmod simbólico, chown y chgrp

chmod acepta dos notaciones. La octal fija los nueve permisos de golpe, y por tanto borra lo que hubiera antes. La simbólica solo toca lo que se le indica, que es lo que interesa cuando no se quiere alterar el resto.

ParteValoresSignificado
A quiénu, g, o, aUsuario propietario, grupo, otros, todos
Qué se hacemás, menos, igualAñadir, quitar o fijar exactamente
Qué permisor, w, xLectura, escritura, ejecución
bash
chmod 644 informe.txt      # fija los nueve permisos de una vez
chmod u+x despliegue.sh    # añade ejecución solo al propietario
chmod go-w informe.txt     # quita escritura a grupo y a otros
chmod a=r publico.txt      # deja a todos exactamente con lectura
chmod -R 750 /datos/equipo # recursivo, por todo el árbol

chown cambia el propietario y chgrp el grupo. Solo root puede regalar un fichero a otro usuario, porque si no cualquiera podría esquivar una cuota de disco cediendo sus ficheros. chown admite indicar los dos a la vez separándolos por dos puntos.

bash
chown ana informe.txt
chown ana:contabilidad informe.txt   # propietario y grupo a la vez
chgrp contabilidad informe.txt
chown -R www-data:www-data /var/www  # recursivo

La notación octal reemplaza todos los permisos; la simbólica solo modifica lo que se nombra. Es la diferencia que hace fallar la pregunta.

Para el examen

  • chmod octal: fija los nueve permisos de golpe

  • chmod simbólico: u+x, go-w: solo toca lo nombrado

  • chown: cambia propietario, y el grupo tras dos puntos

  • Quién puede regalar un fichero: solo root

Los bits especiales: SetUID, SetGID y sticky bit

Por encima de los nueve permisos normales hay tres bits más, que se escriben como un cuarto dígito delante. SetUID vale 4, SetGID vale 2 y el sticky bit vale 1, exactamente igual que r, w y x.

SetUID y SetGID hacen que un ejecutable se ejecute con la identidad de su propietario o de su grupo, y no con la de quien lo lanza. Es el mecanismo que permite que un usuario normal ejecute una utilidad que necesita privilegios que él no tiene.

El sticky bit se pone en directorios compartidos y evita que un usuario borre ficheros de otro dentro de ese directorio, aunque el directorio tenga permiso de escritura para todos. Sin él, un directorio con escritura abierta permitiría a cualquiera borrar el trabajo ajeno.

BitValorDónde se veMinúsculaMayúscula
SetUID4En la x del propietarios: la x está activaS: la x no está activa
SetGID2En la x del grupos: la x está activaS: la x no está activa
Sticky1En la x de otrost: la x está activaT: la x no está activa
bash
chmod 4755 /usr/local/bin/utilidad   # SetUID + rwxr-xr-x
chmod 2775 /datos/equipo             # SetGID en un directorio compartido
chmod 1777 /datos/comun              # sticky bit
chmod u+s utilidad                   # lo mismo en notación simbólica
chmod g+s /datos/equipo
chmod o+t /datos/comun

Ojo con un detalle que se pregunta: si el usuario o el grupo no tienen permiso de ejecución, el bit aparece en mayúscula y el fichero no se ejecutará. La minúscula es la señal de que además hay x.

4 SetUID, 2 SetGID, 1 sticky, y van delante de los tres dígitos normales. Un chmod 7777 activa los tres.

Para el examen

  • SetUID (4): ejecuta con la identidad del propietario

  • SetGID (2): ejecuta con la identidad del grupo

  • Sticky bit (1): impide borrar ficheros ajenos en directorios compartidos

  • Lectura en ls -l: minúscula (s, t) si además hay x; mayúscula (S, T) si falta