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.
| Permiso | Letra | Valor | En un fichero | En un directorio |
|---|---|---|---|---|
| Lectura | r | 4 | Leer su contenido | Listar los nombres que contiene |
| Escritura | w | 2 | Modificarlo | Crear y borrar entradas dentro |
| Ejecución | x | 1 | Ejecutarlo como programa | Entrar 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úmero | Se lee | Uso habitual |
|---|---|---|
| 755 | rwxr-xr-x | Un programa o un directorio: el dueño lo cambia, los demás lo usan |
| 644 | rw-r--r-- | Un fichero de datos o de configuración normal |
| 600 | rw------- | Un fichero privado, como una clave |
| 777 | rwxrwxrwx | Todo 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.
| Parte | Valores | Significado |
|---|---|---|
| A quién | u, g, o, a | Usuario propietario, grupo, otros, todos |
| Qué se hace | más, menos, igual | Añadir, quitar o fijar exactamente |
| Qué permiso | r, w, x | Lectura, escritura, ejecución |
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 árbolchown 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.
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 # recursivoLa 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.
| Bit | Valor | Dónde se ve | Minúscula | Mayúscula |
|---|---|---|---|---|
| SetUID | 4 | En la x del propietario | s: la x está activa | S: la x no está activa |
| SetGID | 2 | En la x del grupo | s: la x está activa | S: la x no está activa |
| Sticky | 1 | En la x de otros | t: la x está activa | T: la x no está activa |
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/comunOjo 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