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 awk ID=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

  1. căutați un UID de la USER , de exemplu:
 $ id -u ubuntu 1000 
  1. 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 

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *