Comanda id
poate fi utilizată pentru a căuta un utilizator „s uid
, de exemplu:
$ id -u ubuntu 1000
Există o comandă pentru a căuta un nume de utilizator dintr-un uid
? Îmi dau seama că acest lucru se poate face uitându-vă la fișierul /etc/passwd
, dar vă întreb dacă există o comandă existentă, mai ales dacă utilizatorul care îl execută nu este root.
Nu „caut numele de utilizator al utilizatorului actual , adică nu caut whoami
sau logname
.
De asemenea, acest lucru m-a făcut să mă întreb dacă pe găzduirea web partajată aceasta este o caracteristică de securitate sau pur și simplu nu înțeleg ceva corect?
Pentru examinare, fișierul /etc/passwd
dintr-o gazdă web partajată:
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
Și aici este un exemplu de listare a directorului /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
Putem vedea root
este proprietarul unor fișiere și root
apare și în /etc/passwd
, cu toate acestea, ceilalți utilizatori / grupuri apar ca numere .
Comentarii
- Rețineți că mai mulți utilizatori pot avea același UID. ‘ este rar, dar se întâmplă ocazional.
Răspuns
ls
efectuează deja căutarea respectivă. Puteți efectua o căutare a informațiilor utilizatorului din linia de comandă cu getent passwd
.
Dacă ls
afișează un ID de utilizator în loc de un nume de utilizator, este „deoarece nu există un utilizator cu acest nume. Sistemele de fișiere stochează ID-uri de utilizator, nu nume de utilizatori. Dacă montați un sistem de fișiere dintr-un alt sistem sau dacă un fișier aparține unui utilizator șters acum sau dacă ați trecut un ID de utilizator numeric către chown
, puteți avea un fișier care aparține la un ID de utilizator care nu are un nume.
Pe o gazdă partajată, este posibil să aveți acces la unele fișiere care sunt partajate între mai multe mașini virtuale, fiecare cu baza de date a utilizatorilor. Acest lucru este puțin ciudat (de ce să partajați fișiere, dar nu și utilizatorii care le dețin?), dar este „posibil din punct de vedere tehnic.
Comentarii
- I ‘ văd numărul în loc de numele de pe
ls -l
dacă numele are peste opt caractere. - @kgrittn Ar putea depinde pe varianta Unix. GNU ls arată întregul nume de utilizator. BusyBox ls îl trunchiază la 8 caractere (cel puțin pe versiunea pe care o am aici).
Răspuns
Încercați
getent passwd "$uid" | cut -d: -f1
Comentarii
- Dacă acest lucru nu returnează nimic nu înseamnă că nu ‘ nu aveți acces pentru a traduce ID-ul într-un nume de utilizator?
- Mai probabil că nu
t set
” $ uid ” `sau acel uid nu ‘ nu există.grep ":$uid:" /etc/passwd
îl găsește?getent passwd
produce vreo ieșire? - @cwd: ar trebui să aveți întotdeauna acces pentru a traduce un id într-un nume de utilizator. De exemplu,
ls -l
face întotdeauna acest lucru. - Pur și simplu curios pentru că te uiți la o listă
ls
pe o gazdă partajată afișa numere în coloanele cu numele utilizatorului / grupului cu ls. Poate că este o măsură de precauție de securitate sau de jailbreak? - @cwd Mai probabil gazda partajată folosește un
/etc/passwd
montat / partajat din altă parte, care nu a fost ‘ nu a fost montat în acel moment.
Răspunde
S-ar putea să te bucuri de acest mic ditty.
$ id -nu [number]
3.17.3-1-ARCH # 1 SMP PREEMPT Vin 14 noiembrie 22:56:01 CET 2014 i686 GNU / Linux
Pot confirma că returnează un nume de utilizator corespunzător, dacă există, pe Arch Linux. De asemenea, pot confirma că nu funcționează pe Ubuntu atunci când rulează ca un utilizator normal, deși nu am testat acest lucru ca superutilizator. De asemenea, nu funcționează pe Alpine Linux. Poate că o caracteristică de securitate împiedică acest lucru să funcționeze pe unele sisteme.
Comentarii
-
id -u jimmij
= >1000
.id -nu 1000
= >id: 1000: no such user
. - funcționează pentru mine, cu
id --version
=id (GNU coreutils) 8.23
- Funcționează și în FreeBSD 10.3.
- notă: funcționează pe Red Hat / CentOS > = 7 (nu pe Red Hat / CentOS < = 6)
- FYI, acest lucru nu funcționează pe imaginile busybox / alpine linux / docker alpine
Răspunde
Îmi dau seama că aceasta este o întrebare veche, dar iată un alt răspuns
awk -F: "{print $1,$3}" /etc/passwd | grep <UID>
Comentarii
- Treceți la
grep
ce? (De asemenea, dacă adăugați patru spații la începutul liniei, acesta îl va reda ca text cu lățime fixă.) - Prefer răspunsul cu
getent passwd
. Dar dacă analizăm / etc / passwd, ar fi mai frumos să folosim doar awkID=0 ; awk -F: '{if ( $3 == '"$ID"' ) print $1}' /etc/passwd
.
Răspuns
Parse / etc / passwd:
% awk -F: "/:$(id -u ubuntu):/{print \$1}" /etc/passwd ubuntu
Comentarii
- Spre deosebire de
getent
, acest lucru nu funcționează dacă sistemul folosește LDAP. - acest lucru nu funcționează ‘ dacă NIS i s-a folosit sau orice alt protocol de autentificare distribuit.
- @choroba: dacă ar avea o cerință specifică pentru LDAP sau NIS, probabil că l-ar fi menționat. Soluția mea funcționează pe configurările tipice de Linux.
- vot negativ, deoarece ‘ nu este fiabil (s-ar putea potrivi fie cu utilizatorul, fie cu grupul).
Răspuns
id | awk "{print $1}" | sed "s/.*(//;s/)$//"
Acest oneliner face următoarele:
- obțineți informații despre utilizator
- extrageți prima coloană („uid = ID (NAME)”)
- eliminați orice înainte de paranteze și parantezele în sine
Răspuns
Comanda id
poate fi utilizată pentru ambele pentru a căuta UID și / sau numele USERULUI
- căutați un UID de la USER , de exemplu:
$ id -u ubuntu 1000
- căutați un UTILIZATOR de către UID , de exemplu:
$ id -un 1000 ubuntu
Dacă UID-ul sau USER-ul nu sunt găsite pe mașina curentă, acesta imprimă mesaj, de exemplu:
$ id -un 1234 id: 1234: no such user
De la 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