¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Mínimo privilegio: permisos y control de root

Después de esta lección: Puedo explicar cómo un error pequeño de permisos da el control de una máquina.

Lección de 50 min5 comandosLaboratorio de escalada de privilegios en Linux: un binario setuid, una regla sudo, cron

¿Qué es el principio de mínimo privilegio?

El principio de mínimo privilegio dice que cada persona, programa y cuenta debe tener solo los permisos que necesita y ninguno más. Así, si algo falla, el daño es pequeño.

Piensa en las llaves de tu instituto: un alumno no tiene la del despacho. En esta lección verás cómo un permiso de más puede dar el control de toda una máquina.

Al terminar esta lección

Nota

Puedo explicar cómo un error pequeño de permisos da el control de una máquina.

Palabras clave

PalabraQué significaEjemplo
Permisolo que una cuenta puede hacer con un archivorw-r--r--
Rootla cuenta de Linux que puede hacerlo todo
Mínimo privilegiodar a cada cuenta solo lo que necesita
Escalada de privilegiospasar de una cuenta normal a tener más poder
Setuidun permiso que ejecuta un programa con los derechos de su dueño
Sudouna orden que deja ejecutar algo como otra cuenta

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

La regla de este laboratorio

Advertencia

Practica solo en tu máquina privada, con su cuenta de práctica. Nunca intentes subir de privilegios en un equipo que no sea tuyo, tampoco en el del instituto: es un delito. Aprendemos qué errores revisar para corregirlos.

Un permiso se lee en tres grupos

En Linux, cada archivo tiene un dueño y un permiso para tres grupos: el dueño, su grupo y todos los demás. Cada grupo puede leer (r), escribir (w) o ejecutar (x).

Cada letra vale un número: r vale 4, w vale 2 y x vale 1. Se suman por grupo, y así tres cifras resumen el permiso.

Ejemplo resuelto: de letras a número

PermisoDueñoGrupoTodosNúmero
-rw-r--r--rw- es 6r-- es 4r-- es 4644
-rwxr-xr-xrwx es 7r-x es 5r-x es 5755
-rw-------rw- es 6--- es 0--- es 0600

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Antes de empezar

Nota

Pulsa Iniciar el laboratorio en la barra superior y espera a que la máquina diga que está en marcha. Cada botón Ejecutar escribe su comando en el terminal de la máquina.

stat enseña el permiso y el dueño

La orden stat con -c dice lo que quieras de un archivo. Con %A escribe el permiso en letras y con %U escribe el nombre del dueño.

Mira un archivo que todos pueden leer y una carpeta que solo es de root.

Mira el permiso del archivo de cuentas

Comando
stat -c '%A %U' /etc/passwd

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Mira el permiso de la carpeta de root

Comando
stat -c '%A %U' /root

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Mira el permiso del archivo de sudo

Comando
stat -c '%A %U' /etc/sudoers

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Root puede todo y se reparte poco

La cuenta root puede leer, cambiar y borrar cualquier cosa. Quien llega a ser root controla la máquina.

Por eso manda el mínimo privilegio. Las cuentas normales no tocan lo de root. Los programas corren con una cuenta que solo ve lo suyo, y si algo se rompe, se rompe poco.

Algunos permisos especiales dan los derechos de otro

Un programa con setuid se ejecuta con los derechos de su dueño y no con los de quien lo lanza. Se ve como una s en lugar de la x del dueño.

A veces hace falta. El programa que cambia tu clave lo tiene, porque debe escribir en un archivo que solo puede tocar root. Mira su permiso y el de la carpeta temporal.

Mira el permiso del programa passwd

Comando
stat -c '%A %U' /usr/bin/passwd

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Mira el permiso de la carpeta temporal

Comando
stat -c '%A' /tmp

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Tres errores pequeños que dan el control

Casi todos los casos de escalada vienen de tres tipos de error. Un programa con un setuid que no debería tener. Una regla de sudo que permite demasiado. Un archivo que ejecuta root a cada rato y que cualquiera puede cambiar.

Revisar los tres es lo que hace un administrador cuidadoso. En el laboratorio, esa revisión es tu trabajo.

Ejemplo resuelto: error, efecto y arreglo

ErrorQué permiteArreglo
Setuid de más en un programaUsar los derechos de rootQuitar el setuid
Regla de sudo muy anchaEjecutar cosas como rootPermitir solo la orden justa
Archivo de root editable por todosCambiar lo que ejecuta rootDejarlo solo de root

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Un error frecuente

Advertencia

Mucha gente cree que dar sudo para un solo programa es seguro. Algunos programas pueden abrir una consola o lanzar otros programas. Por eso, una regla de sudo se limita a una orden y a sus argumentos exactos.

Para ir más lejos: el arreglo

Cuando termines el trabajo del laboratorio, escribe cómo arreglarías cada error que encuentres. Una buena respuesta dice qué se quita y qué se deja.

Antes, piensa en tu móvil: ¿qué app tiene más permisos de los que necesita? ¿Cuál le quitarías?

Sobre este laboratorio y su código: Laboratorio de escalada de privilegios en Linux: un binario setuid, una regla sudo, cron

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.