Kommandoen id kan bruges til at slå en bruger “s uid, for eksempel:

$ id -u ubuntu 1000 

Er der en kommando til at slå et brugernavn op fra en uid ? Jeg er klar over, at dette kan gøres ved at se på /etc/passwd -filen, men jeg spørger, om der er en eksisterende kommando til dette, især hvis brugeren, der udfører det, ikke er root.

Jeg leder ikke efter aktuelle brugerens brugernavn, dvs. jeg leder ikke efter whoami eller logname.

Dette fik mig også til at spekulere på, om dette på en delt webhosting er en sikkerhedsfunktion, eller forstår jeg bare ikke noget korrekt?

Til undersøgelse, /etc/passwd -filen fra en delt webhost:

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 

Og her er et eksempel på en katalogoversigt over /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 

Vi kan se root er ejeren af nogle filer, og root vises også i /etc/passwd, men de andre brugere / grupper vises alle som tal .

Kommentarer

  • Husk, at mere end en bruger kan have den samme UID. Det ‘ er sjældent, men sker lejlighedsvis.

Svar

ls udfører allerede denne opslag. Du kan udføre en brugeroplysningsliste fra kommandolinjen med getent passwd .

Hvis ls viser et bruger-id i stedet for et brugernavn, det er fordi der ikke er nogen bruger ved dette navn. Filsystemer gemmer bruger-ider, ikke brugernavne. Hvis du monterer et filsystem fra et andet system, eller hvis en fil tilhører en nu slettet bruger, eller hvis du har givet et numerisk bruger-id til chown, kan du have en fil, der hører til til et bruger-id, der ikke har et navn.

På en delt vært har du muligvis adgang til nogle filer, der deles mellem flere virtuelle maskiner, hver med deres brugerdatabase. Dette er lidt underligt (hvorfor dele filer, men ikke brugerne, der ejer dem?), men det er teknisk muligt.

Kommentarer

  • I ‘ m ser antallet i stedet for navnet på ls -l hvis navnet er over otte tegn i længden.
  • @kgrittn Det afhænger muligvis på Unix-varianten. GNU ls viser hele brugernavnet. BusyBox ls afkortes til 8 tegn (i det mindste på den build, jeg har her).

Svar

Prøv

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

Kommentarer

  • Hvis dette ikke returnerer betyder det ikke, at jeg ikke ‘ har du ikke adgang til at oversætte idet til et brugernavn?
  • Mere sandsynligt har du ikke t set ” $ uid ” `eller at uid ikke findes ‘ t. Finder grep ":$uid:" /etc/passwd det? Producerer getent passwd noget output?
  • @cwd: Du skal altid have adgang til at oversætte en id til et brugernavn. For eksempel gør ls -l altid dette.
  • Bare nysgerrig, fordi man ser på en ls -liste på en delt vært viste numre i kolonnerne bruger / gruppe med ls. Måske er det en sikkerhedsforanstaltning eller jailshell-ting?
  • @cwd Mere sandsynligt bruger den delte vært en /etc/passwd monteret / delt fra et andet sted, som ikke var ‘ t monteret på det tidspunkt.

Svar

Du kan måske nyde denne lille dity.

$ id -nu [number] 

3.17.3-1-ARCH # 1 SMP FREMPT fre 14. nov 22:56:01 CET 2014 i686 GNU / Linux

Jeg kan bekræfte, at det returnerer et tilsvarende brugernavn, hvis der findes et, på Arch Linux. Jeg kan også bekræfte, at det ikke fungerer på Ubuntu, når det køres som en normal bruger, selvom jeg ikke har testet dette som superbrugeren. Det fungerer heller ikke på Alpine Linux. Måske forhindrer en sikkerhedsfunktion dette i at fungere på nogle systemer.

Kommentarer

  • id -u jimmij = > 1000. id -nu 1000 = > id: 1000: no such user.
  • fungerer for mig med id --version = id (GNU coreutils) 8.23
  • Fungerer også i FreeBSD 10.3.
  • note: dette fungerer på Red Hat / CentOS > = 7 (ikke på Red Hat / CentOS < = 6)
  • FYI dette fungerer ikke på busybox / alpine linux / alpine dockerbilleder

Svar

Jeg er klar over, at dette er et gammelt spørgsmål, men her er et andet svar

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

Kommentarer

  • Rør til grep hvad? (Også hvis du tilføjer fire mellemrum i starten af linjen, gengives det som en tekst med fast bredde.)
  • Jeg foretrækker svaret med getent passwd. Men hvis parsing / etc / passwd, ville det være pænere at kun bruge awk ID=0 ; awk -F: '{if ( $3 == '"$ID"' ) print $1}' /etc/passwd.

Svar

Analyse / etc / passwd:

% awk -F: "/:$(id -u ubuntu):/{print \$1}" /etc/passwd ubuntu 

Kommentarer

  • I modsætning til getent fungerer dette ikke, hvis systemet bruger LDAP.
  • dette fungerer ikke ‘ heller ikke hvis NIS i s brugt eller hvilken som helst anden distribueret godkendelsesprotokol.
  • @choroba: hvis han havde et specifikt krav til LDAP eller NIS, ville han sandsynligvis have nævnt det. Min løsning fungerer på typiske linux-opsætninger.
  • downvote fordi den ‘ er ikke pålidelig (den kan matche hverken brugeren eller gruppen).

Svar

id | awk "{print $1}" | sed "s/.*(//;s/)$//" 

Denne oneliner gør følgende:

  • få brugeroplysninger
  • udpak den første kolonne (“uid = ID (NAME)”)
  • fjern alt inden for parentes, og selve parenteserne

Svar

Kommandoen id kan bruges til både for at slå UID og / eller USER-navn op

  1. slå et UID af BRUGER , for eksempel:
 $ id -u ubuntu 1000 
  1. slå op en BRUGER af UID , for eksempel:
 $ id -un 1000 ubuntu 

Hvis UID eller BRUGER ikke findes på den aktuelle maskine, udskriver den besked, for eksempel:

$ id -un 1234 id: 1234: no such user 

Fra 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 

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *