desarrollo-web-br-bd.com

¿Cómo puedo buscar un nombre de usuario por id en Linux?

El comando id se puede usar para buscar el usuario uid, por ejemplo:

$ id -u ubuntu
1000

¿Hay un comando para buscar un nombre de usuario de un uid? Me doy cuenta de que esto se puede hacer mirando el /etc/passwd pero estoy preguntando si existe un comando para esto, especialmente si el usuario que lo ejecuta no es root.

No estoy buscando el nombre de usuario del usuario actual, es decir, no estoy buscando whoami o logname.

Esto también me hizo preguntarme si en el alojamiento web compartido es una característica de seguridad, ¿o simplemente no estoy entendiendo algo correctamente?

Para el examen, el /etc/passwd archivo de un servidor web compartido:

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
news:x:9:13:news:/etc/news:
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
Gopher:x:13:30:Gopher:/var/Gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
nscd:x:28:28:NSCD Daemon:/:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
pcap:x:77:77::/var/arpwatch:/sbin/nologin
rpc:x:32:32:Portmapper RPC user:/:/sbin/nologin
mailnull:x:47:47::/var/spool/mqueue:/sbin/nologin
smmsp:x:51:51::/var/spool/mqueue:/sbin/nologin
oprofile:x:16:16:Special user account to be used by OProfile:/home/oprofile:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
avahi:x:70:70:Avahi daemon:/:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
xfs:x:43:43:X Font Server:/etc/X11/fs:/sbin/nologin
avahi-autoipd:x:100:104:avahi-autoipd:/var/lib/avahi-autoipd:/sbin/nologin
named:x:25:25:Named:/var/named:/sbin/nologin
mailman:x:32006:32006::/usr/local/cpanel/3rdparty/mailman/mailman:/usr/local/cpanel/bin/noshell
dovecot:x:97:97:dovecot:/usr/libexec/dovecot:/sbin/nologin
mysql:x:101:105:MySQL server:/var/lib/mysql:/bin/bash
cpaneleximfilter:x:32007:32009::/var/cpanel/userhomes/cpaneleximfilter:/usr/local/cpanel/bin/noshell
nagios:x:102:106:nagios:/var/log/nagios:/bin/sh
ntp:x:38:38::/etc/ntp:/sbin/nologin
myuser:x:1747:1744::/home/myuser:/usr/local/cpanel/bin/jailshell

Y aquí hay un listado de directorio de muestra de /tmp/

drwx------  3 root     root        1024 Apr 16 02:09 spamd-22217-init/
drwxr-xr-x  2      665      664    1024 Apr  4 00:05 update-cache-44068ab4/
drwxr-xr-x  4      665      664    1024 Apr 17 15:17 update-extraction-44068ab4/
-rw-rw-r--  1      665      664   43801 Apr 17 15:17 variable.Zip
-rw-r--r--  1      684      683    4396 Apr 17 07:01 wsdl-13fb96428c0685474db6b425a1d9baec

Podemos ver que root es el propietario de algunos archivos, y root también aparece en /etc/passwd, sin embargo, los demás usuarios/grupos se muestran como números.

70
cwd

ls ya realiza esa búsqueda. Puede realizar una búsqueda de información del usuario desde la línea de comando con getent passwd .

Si ls muestra una ID de usuario en lugar de un nombre de usuario, es porque no hay ningún usuario con ese nombre. Los sistemas de archivos almacenan ID de usuario, no nombres de usuario. Si monta un sistema de archivos desde otro sistema, o si un archivo pertenece a un usuario ahora eliminado, o si pasó una ID de usuario numérica a chown, puede tener un archivo que pertenece a una ID de usuario que no No tengo nombre.

En un host compartido, puede tener acceso a algunos archivos que se comparten entre varias máquinas virtuales, cada una con su base de datos de usuario. Esto es un poco extraño (¿por qué compartir archivos pero no los usuarios que los poseen?), Pero es técnicamente posible.

Tratar

getent passwd "$uid" | cut -d: -f1
69
jw013

Podrías disfrutar de esta pequeña canción.

$ id -nu [number]

3.17.3-1-Arch # 1 SMP PREEMPT Vie 14 de noviembre 22:56:01 CET 2014 i686 GNU/Linux

Puedo confirmar que devuelve un nombre de usuario correspondiente, si existe, en Arch Linux. También puedo confirmar que no funciona en Ubuntu cuando se ejecuta como un usuario normal, aunque no lo he probado como superusuario. Tampoco funciona en Alpine Linux. Tal vez una característica de seguridad impide que esto funcione en algunos sistemas.

46
Stefan

Me doy cuenta de que esta es una vieja pregunta, pero aquí hay otra respuesta

awk -F: '{print $1,$3}' /etc/passwd | grep <UID>
1
D Smith

Parse/etc/passwd:

% awk -F: "/:$(id -u ubuntu):/{print \$1}" /etc/passwd
ubuntu
0
laebshade
id | awk '{print $1}' | sed 's/.*(//;s/)$//'

Este oneliner hace lo siguiente:

  • obtener información del usuario
  • extraer la primera columna ("uid = ID (NOMBRE)")
  • eliminar cualquier cosa antes de los corchetes, y los corchetes mismos
0
NAIM