El comando id
se puede usar para buscar un usuario «s uid
, por ejemplo:
$ id -u ubuntu 1000
¿Existe un comando para buscar un nombre de usuario de un uid
? Me doy cuenta de que esto se puede hacer mirando el archivo /etc/passwd
pero estoy preguntando si hay un comando existente para esto, especialmente si el usuario que lo ejecuta no es root.
No estoy buscando el nombre de usuario del actual usuario, es decir, no estoy buscando whoami
o logname
.
Esto también me hizo preguntarme si en el alojamiento web compartido esto es una característica de seguridad, o simplemente no estoy entendiendo algo correctamente.
Para examinar, el archivo /etc/passwd
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 una lista 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 root
es el propietario de algunos archivos, y root
también aparece en /etc/passwd
, sin embargo, los demás usuarios / grupos aparecen como números .
Comentarios
- Tenga en cuenta que más de un usuario puede tener el mismo UID. Es ‘ poco común, pero ocurre ocasionalmente.
Respuesta
ls
ya realiza esa búsqueda. Puede realizar una búsqueda de información de usuario desde la línea de comando con getent passwd
.
Si ls
muestra un 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ó un ID de usuario numérico a chown
, puede tener un archivo que pertenezca a una ID de usuario que no tiene nombre.
En un host compartido, es posible que tenga 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.
Comentarios
- I ‘ veo el número en lugar del nombre en
ls -l
si el nombre tiene más de ocho caracteres. - @kgrittn Puede depender en la variante Unix. GNU ls muestra el nombre de usuario completo. BusyBox ls lo trunca a 8 caracteres (al menos en la compilación que tengo aquí).
Respuesta
Intente
getent passwd "$uid" | cut -d: -f1
Comentarios
- Si esto devuelve nada, significa que no ‘ ¿No tienes acceso para traducir la identificación a un nombre de usuario?
- Lo más probable es que no
t set
» $ uid » `o ese uid no ‘ t existe. ¿Lo encuentragrep ":$uid:" /etc/passwd
? ¿getent passwd
produce algún resultado? - @cwd: Siempre debe tener acceso para traducir una identificación a un nombre de usuario. Por ejemplo,
ls -l
siempre está haciendo esto. - Solo tengo curiosidad porque mirar un
ls
listado en un host compartido mostraba números en las columnas de nombre de usuario / grupo con ls. ¿Quizás es una precaución de seguridad o una cosa de jailshell? - @cwd Es más probable que el host compartido esté usando un
/etc/passwd
montado / compartido desde otro lugar que no estaba ‘ t montado en ese momento.
Responder
Puede que disfrutes de este pequeño cancioneta.
$ 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. Quizás una característica de seguridad impida que esto funcione en algunos sistemas.
Comentarios
-
id -u jimmij
= >1000
.id -nu 1000
= >id: 1000: no such user
. - funciona para mí, con
id --version
=id (GNU coreutils) 8.23
- También funciona en FreeBSD 10.3.
- nota: esto funciona en Red Hat / CentOS > = 7 (no en Red Hat / CentOS < = 6)
- FYI, esto no funciona en imágenes de busybox / alpine linux / alpine docker
Respuesta
Me doy cuenta de que esta es una pregunta antigua, pero aquí hay otra respuesta
awk -F: "{print $1,$3}" /etc/passwd | grep <UID>
Comentarios
- Pipe to
grep
¿qué? (Además, si agrega cuatro espacios al principio de la línea, se mostrará como texto de ancho fijo). - Prefiero la respuesta con
getent passwd
. Pero si se analiza / etc / passwd, sería mejor usar awk soloID=0 ; awk -F: '{if ( $3 == '"$ID"' ) print $1}' /etc/passwd
.
Responder
Analizar / etc / passwd:
% awk -F: "/:$(id -u ubuntu):/{print \$1}" /etc/passwd ubuntu
Comentarios
- A diferencia de
getent
, esto no funciona si el sistema usa LDAP. - esto no ‘ tampoco funciona si NIS i s utilizado o cualquier otro protocolo de autenticación distribuido.
- @choroba: si tuviera un requisito específico para LDAP o NIS, probablemente lo habría mencionado. Mi solución funciona en configuraciones típicas de Linux.
- voto negativo porque ‘ no es confiable (podría coincidir con el usuario o el grupo).
Responder
id | awk "{print $1}" | sed "s/.*(//;s/)$//"
Este delineador hace lo siguiente:
- obtener información del usuario
- extraer la primera columna («uid = ID (NAME)»)
- eliminar todo lo que esté antes de los corchetes y los corchetes mismos
Responder
El comando id
se puede utilizar para tanto para buscar UID y / o nombre de USUARIO
- busque un UID por USER , por ejemplo:
$ id -u ubuntu 1000
- busque un USUARIO por UID , por ejemplo:
$ id -un 1000 ubuntu
Si el UID o USER no se encuentra en la máquina actual, imprime mensaje, por ejemplo:
$ id -un 1234 id: 1234: no such user
De man id
:
id - print real and effective user and group IDs -n, --name print a name instead of a number, for -ugG -u, --user print only the effective user ID -g, --group print only the effective group ID -G, --groups print all group IDs