Intentaré explicarlo paso a paso con algunos ejemplos.
Fondo corto
Cada proceso tiene sus propias credenciales de proceso '' que incluye atributos como PID, los PPID, PGID, session IDy también los ID de usuario y de grupo real y efectivo:
RUID, EUID, RGID, EGID.
Nos centraremos en esos.
Parte 1: Comprender UID y GID
Ahora iniciaré sesión en un shell con mis credenciales y ejecutaré:
$ grep $LOGNAME /etc/passwd
rotem:x:1000:1000:rotem,,,:/home/rotem:/bin/bash
Puede ver mi nombre de registro (rotem), el UID y GID que son 1000, y otros detalles como el shell en el que estoy conectado.
Parte 2: Comprender RUID y RGID
Todo proceso tiene un propietario y pertenece a un grupo .
En nuestro shell, cada proceso que ejecutaremos heredará los privilegios de mi cuenta de usuario y se ejecutará con el mismo UID y GID.
Ejecutemos un comando simple para verificarlo:
$ sleep 10 & ps aux | grep 'sleep'
Y verifique el proceso UID y GID:
$ stat -c "%u %g" /proc/$pid/
1000 1000
Esos son el ID de usuario real ( ) y el ID de grupo real ( ) del proceso .RUIDRGID
(*) Marque otras opciones para ver el UID y GID y las formas de obtener esto en una sola línea .
Por ahora, acepte el hecho de que los atributos EUIDy EGIDson 'redundantes' y simplemente equivalen a RUIDy RGIDdetrás de escena.
Parte 3: Comprender EUID y EGID
Tomemos el pingcomando como ejemplo.
Busque la ubicación binaria con el whichcomando y luego ejecute ls -la:
-rwsr-xr-x 1 root root 64424 Mar 10 2017 ping
Puede ver que el propietario y el grupo del archivo son root. Esto se debe a que el pingcomando necesita abrir un socket y el kernel de Linux exige rootprivilegios para ello.
Pero, ¿cómo puedo usar pingsi no tengo rootprivilegios?
Observe la letra 's' en lugar de la 'x' en la parte del propietario del permiso del archivo.
Este es un bit de permiso especial para archivos ejecutables binarios específicos (como pingy sudo) que se conoce como setuid .
Aquí es donde EUIDy EGIDentra en juego.
Lo que sucederá es que cuando se ejecuta un binario setuid como ping, el proceso cambia su ID de usuario efectivo ( EUID) del valor predeterminado RUIDal propietario de este archivo ejecutable binario especial que en este caso es -root .
Todo esto se hace por el simple hecho de que este archivo tiene el setuidbit.
El kernel toma la decisión de si este proceso tiene el privilegio al observar EUIDel proceso. Porque ahora EUIDapunta a root, la operación no será rechazada por el kernel.
Aviso : En las últimas versiones de Linux, la salida del pingcomando se verá diferente debido al hecho de que adoptaron el enfoque de Capacidades de Linux en lugar de este enfoque setuid , para aquellos que no están familiarizados, lea aquí .
Parte 4: ¿Qué pasa con SUID y SGID?
La ID de usuario guardada ( SUID) se utiliza cuando se está ejecutando un proceso privilegiado (como rootpor ejemplo) y necesita realizar algunas tareas sin privilegios.
En ese caso, el UID ( EUID) efectivo de antes se guardará en el interior SUIDy luego se cambiará a una tarea sin privilegios. Cuando se completa la tarea sin privilegios EUID, se tomará del valor de SUIDy volverá a la cuenta privilegiada.