Il comando id
può essere utilizzato per cercare un utente “s uid
, ad esempio:
$ id -u ubuntu 1000
Esiste un comando per cercare un nome utente da un uid
? Mi rendo conto che questo può essere fatto guardando il file /etc/passwd
ma sto chiedendo se esiste un comando esistente per questo, specialmente se lutente che lo esegue non è root.
Non sto cercando il nome utente corrente dellutente, ovvero non sto cercando whoami
o logname
.
Questo mi ha anche fatto domandare se nellhosting web condiviso questa sia una funzione di sicurezza o semplicemente non capisco qualcosa correttamente?
Per un esame, il file /etc/passwd
da un host web condiviso:
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
Ed ecco un elenco di directory di esempio di /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
Possiamo vedere root
è il proprietario di alcuni file e root
viene visualizzato anche in /etc/passwd
, tuttavia tutti gli altri utenti / gruppi vengono visualizzati come numeri .
Commenti
- Tieni presente che più di un utente può avere lo stesso UID. ‘ è raro, ma accade occasionalmente.
Risposta
ls
esegue già quella ricerca. Puoi eseguire una ricerca delle informazioni sullutente dalla riga di comando con getent passwd
.
Se ls
mostra un ID utente invece di un nome utente, è perché non ci sono utenti con quel nome. I filesystem memorizzano gli ID utente, non i nomi utente. Se monti un filesystem da un altro sistema, o se un file appartiene a un utente ora eliminato, o se hai passato un ID utente numerico a chown
, puoi avere un file che appartiene a un ID utente che non ha un nome.
Su un host condiviso, potresti avere accesso ad alcuni file condivisi tra diverse macchine virtuali, ciascuna con il proprio database utente. Questo è un po strano (perché condividere i file ma non gli utenti che li possiedono?), ma è tecnicamente possibile.
Commenti
- I ‘ vedo il numero invece del nome su
ls -l
se il nome supera gli otto caratteri. - @kgrittn Potrebbe dipendere nella variante Unix. GNU ls mostra lintero nome utente. BusyBox ls lo tronca a 8 caratteri (almeno sulla build che ho qui).
Answer
Prova
getent passwd "$uid" | cut -d: -f1
Commenti
- Se non restituisce nulla significa che non ‘ Non hai accesso per tradurre lID in un nome utente?
- Più probabilmente non hai
t set
” $ uid ” “o quelluid ‘ non esiste.grep ":$uid:" /etc/passwd
lo trova?getent passwd
produce output? - @cwd: dovresti sempre avere accesso per tradurre un ID in un nome utente. Ad esempio,
ls -l
lo fa sempre. - Sono solo curioso perché guardando un
ls
elenco su un host condiviso mostrava i numeri nelle colonne del nome utente / gruppo con ls. Forse è una precauzione di sicurezza o una questione di jailshell? - @cwd Più probabilmente lhost condiviso utilizza un
/etc/passwd
montato / condiviso altrove che non era ‘ t montato in quel momento.
Risposta
Potrebbe piacerti questo piccolo canzoncina.
$ id -nu [number]
3.17.3-1-ARCH # 1 SMP PREEMPT ven 14 novembre 22:56:01 CET 2014 i686 GNU / Linux
Posso confermare che restituisce un nome utente corrispondente, se esiste, su Arch Linux. Posso anche confermare che non funziona su Ubuntu quando viene eseguito come un utente normale, anche se non lho testato come superutente. Inoltre non funziona su Alpine Linux. Forse una funzione di sicurezza impedisce il funzionamento su alcuni sistemi.
Commenti
-
id -u jimmij
= >1000
.id -nu 1000
= >id: 1000: no such user
. - funziona per me, con
id --version
=id (GNU coreutils) 8.23
- Funziona anche in FreeBSD 10.3.
- nota: funziona su Red Hat / CentOS > = 7 (non su Red Hat / CentOS < = 6)
- Cordiali saluti, questo non funziona con le immagini busybox / alpine linux / alpine docker
Risposta
Mi rendo conto che questa è una vecchia domanda, ma ecco unaltra risposta
awk -F: "{print $1,$3}" /etc/passwd | grep <UID>
Commenti
- Pipe to
grep
cosa? (Inoltre, se aggiungi quattro spazi allinizio della riga, verrà visualizzato come testo a larghezza fissa.) - Preferisco la risposta con
getent passwd
. Ma se analizzi / etc / passwd, sarebbe meglio usare solo awkID=0 ; awk -F: '{if ( $3 == '"$ID"' ) print $1}' /etc/passwd
.
Risposta
Parse / etc / passwd:
% awk -F: "/:$(id -u ubuntu):/{print \$1}" /etc/passwd ubuntu
Commenti
- A differenza di
getent
, questo non funziona se il sistema utilizza LDAP. - questo ‘ non funziona neanche se NIS i è utilizzato o qualsiasi altro protocollo di autenticazione distribuito.
- @choroba: se avesse un requisito specifico per LDAP o NIS, probabilmente lo avrebbe menzionato. La mia soluzione funziona su configurazioni Linux tipiche.
- downvote perché ‘ non è affidabile (potrebbe corrispondere allutente o al gruppo).
Risposta
id | awk "{print $1}" | sed "s/.*(//;s/)$//"
Questo oneliner esegue le seguenti operazioni:
- ottieni informazioni sullutente
- estrai la prima colonna (“uid = ID (NAME)”)
- rimuovi tutto ciò che precede le parentesi e le parentesi stesse
Risposta
Il comando id
può essere utilizzato per entrambi per cercare lUID e / o il nome USER
- cercare un UID di USER , ad esempio:
$ id -u ubuntu 1000
- cerca un USER per UID , ad esempio:
$ id -un 1000 ubuntu
Se lUID o USER non viene trovato sulla macchina corrente, stampa messaggio, ad esempio:
$ id -un 1234 id: 1234: no such user
Da 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