¿Qué es UID en Linux?
UID significa identificador de usuario. Un UID es un número asignado a cada usuario de Linux. Es la representación del usuario en el kernel de Linux. El UID se utiliza para identificar al usuario dentro del sistema y para determinar a qué recursos del sistema puede acceder el usuario. Es por eso que la ID de usuario debe ser única.
Puede encontrar el UID almacenado en el archivo /etc/passwd. Este es el mismo archivo que se puede usar para enumerar todos los usuarios en un sistema Linux.
Use un comando de Linux para ver el archivo de texto y verá diversa información sobre los usuarios presentes en su sistema.
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
johndoe:x:1000:1000:John Doe,,,:/home/helder:/bin/bash
davmail:x:127:65534::/var/lib/davmail:/usr/sbin/nologin
statd:x:128:65534::/var/lib/nfs:/usr/sbin/nologin
El tercer campo aquí representa el ID de usuario o UID.
Tenga en cuenta que en la mayoría de las distribuciones de Linux, los UID 1-500 generalmente están reservados para los usuarios del sistema. En Ubuntu y Fedora, el UID para nuevos usuarios comienza desde 1000.
Por ejemplo, si usa el comando adduser o useradd para crear un nuevo usuario, obtendrá el siguiente número disponible después de 1000 como su UID.
En Linux, UID 0 y GID 0 están reservados para el usuario root.
¿Cómo encontrar el UID de un usuario en Linux?
Siempre puede confiar en el archivo /etc/passwd para obtener el UID de un usuario. Esa no es la única forma de obtener la información de UID en Linux.
El comando id en Linux mostrará el UID, el GID y los grupos a los que pertenece su usuario actual:
id
uid=1000(abhishek) gid=1000(abhishek) groups=1000(abhishek),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),116(lpadmin),126(sambashare),127(kvm)
También puede especificar los nombres de usuario con el comando id para obtener el UID de cualquier usuario de Linux:
id standard
uid=1001(standard) gid=1001(standard) groups=1001(standard)
¿Cómo cambiar el UID de un usuario en Linux?
Suponga que tiene varios usuarios en su sistema Linux. Tuvo que eliminar un usuario porque abandonó la organización. Ahora quiere que su UID sea tomado por otro usuario que ya está en el sistema.
Puede cambiar el UID modificando el usuario usando el comando usermod como este:
usermod -u 1004 user_2
Debe tener privilegios de superusuario para ejecutar el comando anterior.
¿Recuerdas el concepto de permiso y propiedad de archivos en Linux? La propiedad de un archivo está determinada por el UID del usuario propietario.
Cuando actualiza el UID de un usuario, ¿qué sucede con los archivos que pertenecen a este usuario? Si bien todos los archivos en el directorio de inicio del usuario_2 cambiarán su UID asociado, deberá actualizar manualmente el UID asociado de otros archivos fuera el directorio de inicio.
Lo que puede hacer es actualizar manualmente la propiedad de los archivos asociados con el UID anterior del usuario_2.
find / -user old_uid_of_user_2 -exec chown -h user_2 {} \;
¿Cómo se asocia el UID con diferentes recursos del sistema? [para usuarios avanzados]
Los UID son únicos entre sí y, por lo tanto, también se pueden usar para identificar la propiedad de diferentes recursos del sistema, como archivos y procesos.
UID y archivos
Espero que esté familiarizado con el concepto de permisos de archivos en Linux. Cuando está creando un archivo, usted es el propietario de este archivo. Ahora puede decidir quién puede hacer qué con este archivo. Esto es parte del mecanismo DAC de Linux donde cada archivo se deja a discreción de su propietario.
Puede leer la propiedad de un archivo usando el comando ls o stat. Hagámoslo con el popular comando ls y verifiquemos la propiedad del binario sleep
o passwd
.
Como puede ver, el archivo /usr/bin/sleep pertenece a la raíz:
ls -l $(which sleep)
-rwxr-xr-x 1 root root 39048 Mar 6 2020 /usr/bin/sleep
Forcémoslo a mapear la propiedad con UID en lugar de nombre de usuario:
ls -lhn $(which sleep)
-rwxr-xr-x 1 0 0 39K Mar 6 2020 /usr/bin/sleep
Aquí hay información divertida. Su sistema operativo no entiende "nombres de usuario". Cada vez que un programa necesita trabajar con nombres de usuario o necesita imprimirlos, se refiere al /etc/passwd
archivo para extraer la información.
No tienes que creer en mis palabras. Véalo usted mismo con el programa strace que imprime todas las llamadas al sistema realizadas por un programa.
strace ls -lhn $(which sleep) 2>&1 | grep passwd
Lo que intenta ver es si ls
el comando está intentando leer el /etc/passwd
archivo o no.
strace ls -lh $(which sleep) 2>&1 | grep passwd
openat(AT_FDCWD, "/etc/passwd", O_RDONLY|O_CLOEXEC) = 6
Hasta ahora todo bien.
UID y procesos
Los procesos también tienen propietarios, al igual que los archivos. Solo el propietario (o el usuario raíz) de un proceso puede enviarle señales de proceso. Aquí es donde entra en juego el UID.
Si un usuario normal intenta matar un proceso propiedad de otro usuario, dará como resultado un error:
kill 3708
bash: kill: (3708) - Operation not permitted
Solo el propietario del proceso o la raíz puede hacer esto.
Un proceso debe ser regulado. Regulado, ya que necesita tener una forma de limitar o saber cuánto se le permite hacer a un proceso. Esto está determinado por su(s) UID(s).
Hay tres tipos de UID asociados con un proceso.
- IDU real :Real UID es el UID que un proceso adopta de su padre. En términos más sencillos, quien inicia un proceso, el UID de ese usuario es el UID real del proceso. Esto es útil para identificar a quién pertenece realmente un proceso. Esto es esencial, especialmente cuando el UID efectivo no es el mismo que el UID real del que hablaré a continuación.
- UID efectivo :Esto es lo que principalmente determina qué permisos tiene realmente un determinado proceso. Si bien un usuario puede iniciar el proceso, puede ejecutarse con los permisos disponibles de otro usuario. El comando
passwd
es un ejemplo de esto. Este programa edita el archivo/etc/shadow
, que esroot
propiedad Por lo tanto, un usuario normal no debería poder ejecutar este comando o cambiar su contraseña. Afortunadamente, el binario se ejecuta con un UID efectivo de 0 (es decir, raíz), lo que le permite tener suficientes privilegios para editar el/etc/shadow
expediente. Los UID reales y efectivos son en su mayoría los mismos, excepto en el caso de los binarios habilitados para bits SUID. - UID guardado :UID que está disponible a disposición de un proceso. Este no se usa normalmente, pero aún está allí en caso de que el proceso sepa que no va a realizar ningún trabajo privilegiado, por lo que puede cambiar su UID efectivo a algo que no tenga privilegios. Esto reduce la superficie de un mal comportamiento no intencional.
Eso es todo. Espero que ahora tengas una mejor idea sobre UID en Linux. No dude en hacer sus preguntas, si las hubiere.
Como usuario profesional de Linux, si cree que me perdí algún concepto importante sobre UID, hágamelo saber en la sección de comentarios.