Comando id: comprobar el UID y los grupos, whoami, groups y grupos suplementarios

Entorno de pruebaFamilia RHELAlmaLinux 9.8coreutils 8.32Cuenta rootDebian 12 · coreutils 9.1 cuenta normal
Comandos de usuarios y gruposid, whoami, groupsUbicación/usr/bin/id

Para comprobar el UID y los grupos de la cuenta actual en un servidor Linux se usa el comando id; si solo hace falta el nombre de la cuenta se usa whoami, y si solo hacen falta los nombres de los grupos, groups. Al ejecutar los tres comandos uno tras otro en servidores AlmaLinux 9 y Debian 12 y comparar la salida, id -un y whoami mostraron el mismo nombre de cuenta, y groups mostró la lista de grupos de id dejando solo los nombres.

La salida de abajo se obtuvo en un servidor AlmaLinux 9.8 con la cuenta root y en un servidor Debian 12 con una cuenta normal. El nombre y los números de la cuenta de inicio de sesión y sus grupos suplementarios se cambiaron por valores de ejemplo (user1, 1000, adm, systemd-journal).

1️⃣ Uso básico del comando id

  • ↪️ Cómo leer los tres campos uid, gid y groups

Al ejecutar id sin opciones, la información de la cuenta que ejecutó el shell actual aparece en una línea. Al ejecutarlo con la cuenta root, los tres campos eran 0(root).

id
uid=0(root) gid=0(root) groups=0(root)

El campo uid es el número y el nombre de la cuenta, y el campo gid es el número y el nombre del grupo primario (primary group). El campo groups son todos los grupos a los que pertenece la cuenta, con el grupo primario en primer lugar.

Si se escribe un nombre de cuenta después de id, se muestra la información de esa cuenta. Al comprobar la cuenta normal user1, que tiene grupos suplementarios, en el campo groups aparecieron adm y systemd-journal detrás del grupo primario user1. Estos grupos a los que pertenece además del grupo primario son los grupos suplementarios (supplementary group).

id user1
uid=1000(user1) gid=1000(user1) groups=1000(user1),4(adm),190(systemd-journal)

Muchas cuentas tienen el mismo número de UID y de gid, por lo que es fácil tomar los dos números por el mismo valor, pero la cuenta adm que viene de serie en el servidor tenía el UID 3 y el número de grupo primario 4. La cuenta operator tenía root como grupo primario.

id adm
uid=3(adm) gid=4(adm) groups=4(adm)
id operator
uid=11(operator) gid=0(root) groups=0(root)

Si se escriben varias cuentas, se muestra una por línea.

id root bin
uid=0(root) gid=0(root) groups=0(root)
uid=1(bin) gid=1(bin) groups=1(bin)

Si se escribe una cuenta que no existe, aparece el error [no such user], y el código de salida fue 1.

id no-such-user9
id: 'no-such-user9': no such user
echo $?
1

El código de salida cuando se escribe una cuenta que existe es 0, así que en un script se puede usar como condición para comprobar si una cuenta existe.

2️⃣ Opciones del comando id

  • ↪️ -u, -g, -G para números y -n para nombres

Para pasar a un script un solo número de toda la salida, se elige un único campo con una opción. -u muestra el UID, -g el número del grupo primario y -G todos los números de los grupos a los que pertenece la cuenta.

id -u
0
id -u daemon
2
id -G user1
1000 4 190

Si se añade -n, aparecen nombres en lugar de números. Al comprobar los grupos de user1 con [id -Gn], los tres números se convirtieron en tres nombres.

id -Gn user1
user1 adm systemd-journal
id -gn user1
user1

-n y -r se usan junto con una de las opciones -u, -g y -G. Al escribir solo -n apareció el error de abajo.

id -n
id: cannot print only names or real IDs in default format

-r muestra el ID real en lugar del ID efectivo (effective). Al ejecutar [id -ur] en un shell de la cuenta root apareció 0. Si se escriben juntas dos o más opciones que eligen un número, como -u y -g, aparece el error [cannot print "only" of more than one choice]. Las opciones se resumen a continuación.

OpciónCopiarDescripción
-u--userMuestra el número de UID
-g--groupMuestra el número del grupo primario
-G--groupsMuestra todos los números de los grupos a los que pertenece
-n--nameCon -u, -g o -G, muestra el nombre en lugar del número
-r--realCon -u, -g o -G, muestra el ID real en lugar del ID efectivo
OpciónCopiarDescripción
-Z--contextMuestra solo el contexto de seguridad del proceso
-z--zeroSepara los elementos de la salida con caracteres NUL en lugar de espacios; no se puede usar en el formato predeterminado
-aSolo se acepta por compatibilidad con otras versiones de id y se ignora
--helpMuestra la ayuda
--versionMostrar la versión

🔲 Simulador del comando id

El simulador de abajo empieza con la cuenta user1, que tiene grupos suplementarios. Después de añadir el grupo wheel con el chip [🖊 Otra ventana], se pueden comparar [id] e [id user1] y comprobar los grupos de un shell nuevo con el chip [🔁 Iniciar sesión de nuevo].

Simulador del comando idcoreutils 8.32
[root@server work]#
Funciona solo dentro del navegador. Después de cambiar los grupos con el chip [🖊 Otra ventana], se comparan [id] e [id user1] y se comprueban los grupos de un shell nuevo con el chip [🔁 Iniciar sesión de nuevo].

3️⃣ El comando whoami e id -un

  • ↪️ Comprobar el nombre de la cuenta actual y comprobar otras cuentas

Si solo hace falta el nombre de la cuenta del shell actual, se ejecuta whoami. La página de man describe whoami como el mismo comando que [id -un]. Al ejecutar los dos comandos con la cuenta root, ambos mostraron root.

whoami
root
id -un
root

Con una cuenta normal del servidor Debian 12, los dos comandos también mostraron el mismo nombre de cuenta.

whoami
user1
id -un
user1

whoami muestra el nombre de la cuenta que corresponde al UID efectivo (effective) actual. Es un comando que solo comprueba la cuenta actual, así que si se añade un nombre de cuenta detrás aparece un error.

whoami user1
whoami: extra operand 'user1'
Try 'whoami --help' for more information.

El nombre o el número de otra cuenta se comprueba escribiendo esa cuenta después de id.

id -un user1
user1

Si se escribe -u en lugar de -un, en el mismo lugar aparece el número de UID en vez del nombre de la cuenta.

4️⃣ El comando groups y los grupos suplementarios

  • ↪️ Grupo primario y grupos suplementarios, y el shell después de cambiar los grupos

groups muestra solo los nombres de los grupos en una línea. Si no se escribe un nombre de cuenta aparecen los grupos del shell actual, y con la cuenta root era solo root.

groups
root

Si se escribe un nombre de cuenta, aparecen el nombre de la cuenta y, tras los dos puntos, los grupos. Al escribir varias cuentas se mostró una por línea.

groups user1 daemon
user1 : user1 adm systemd-journal
daemon : daemon

El grupo primario y los grupos suplementarios se registran en lugares distintos. Los grupos suplementarios se anotan como miembros en el cuarto campo de la base de datos de grupos (/etc/group), y el grupo primario se anota como número en el cuarto campo de la información de la cuenta (/etc/passwd).

getent group adm
adm:x:4:user1
getent group user1
user1:x:1000:
getent passwd daemon
daemon:x:2:2:daemon:/sbin:/sbin/nologin

El grupo user1, que es el grupo primario de user1, tenía vacío el cuarto campo, y en el grupo suplementario adm figuraba user1 como miembro. El 2 del cuarto campo de la línea de la cuenta daemon es el número del grupo primario.

Para añadir una cuenta a un grupo suplementario se usa el comando usermod con [usermod -aG grupo cuenta]. Si se usa solo -G sin -a, la cuenta sale de los grupos suplementarios existentes que no se escriban en la lista, así que -a se escribe junto con ella.

groups ejecutado sin nombre de cuenta muestra los grupos del proceso del shell actual. La página de man explica que, si la base de datos de grupos cambia, este valor puede ser distinto del de la base de datos.

Por eso, justo después de cambiar los grupos se comprueban los grupos de la base de datos con [groups cuenta] o [id cuenta], y para aplicarlos al shell se vuelve a iniciar sesión. Para cambiar el ID de grupo actual sin cerrar la sesión existe el comando newgrp.

🔢 FAQ & contenido recomendado

Sí, se puede. Al ejecutar [id 0] en el servidor AlmaLinux 9.8 apareció uid=0(root) gid=0(root) groups=0(root), igual que con [id root].

A partir del número indicado en UID_MIN de /etc/login.defs. En el servidor AlmaLinux 9.8 era 1000, y SYS_UID_MIN y SYS_UID_MAX del mismo archivo eran 201 y 999, el rango de las cuentas del sistema.

who am i es who seguido de dos palabras; funciona igual que la opción -m y muestra una línea con la información de inicio de sesión del terminal en el que se está escribiendo. whoami muestra solo una línea con el nombre de la cuenta del UID efectivo actual.

ℹ️ Aviso de afiliados
El contenido de este sitio incluye enlaces de afiliado. Cuando un visitante compra un producto o servicio a través de uno de ellos, el sitio recibe una comisión del vendedor. El importe que paga el comprador(baja durante las promociones ↓)no aumenta. Los precios, descuentos y existencias publicados corresponden al momento de redacción y pueden variar, así que confírmalos con el vendedor antes de comprar. Los productos se eligen y evalúan con criterios propios, y las comisiones no influyen en el orden ni en el contenido de las reseñas.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Demuestra que eres humano: 0   +   7   =