Kommandoen id
kan brukes til å slå opp en bruker «s uid
, for eksempel:
$ id -u ubuntu 1000
Er det en kommando om å slå opp et brukernavn fra en uid
? Jeg er klar over at dette kan gjøres ved å se på /etc/passwd
-filen, men jeg spør om det er en eksisterende kommando til dette, spesielt hvis brukeren som utfører den ikke er rot.
Jeg leter ikke etter brukernavnet til nåværende bruker, dvs. jeg leter ikke etter whoami
eller logname
.
Dette fikk meg også til å lure på om dette på en delt webhotell er en sikkerhetsfunksjon, eller forstår jeg bare ikke noe riktig?
For undersøkelse, /etc/passwd
-filen fra en delt webver:
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 en eksempelliste 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 eieren av noen filer, og root
vises også i /etc/passwd
, men de andre brukerne / gruppene vises alle som tall .
Kommentarer
- Husk at mer enn én bruker kan ha samme UID. Det ‘ er sjeldent, men skjer av og til.
Svar
ls
utfører allerede den oppslaget. Du kan utføre en brukerinformasjonssøking fra kommandolinjen med getent passwd
.
Hvis ls
viser en bruker-ID i stedet for et brukernavn, det er fordi det ikke er noen bruker med det navnet. Filsystemer lagrer bruker-ID-er, ikke brukernavn. Hvis du monterer et filsystem fra et annet system, eller hvis en fil tilhører en bruker som nå er slettet, eller hvis du har gitt en numerisk bruker-ID til chown
, kan du ha en fil som tilhører til en bruker-ID som ikke har noe navn.
På en delt vert kan du ha tilgang til noen filer som deles mellom flere virtuelle maskiner, hver med brukerdatabasen. Dette er litt rart (hvorfor dele filer, men ikke brukerne som eier dem?), men det er teknisk mulig.
Kommentarer
- I ‘ Jeg ser tallet i stedet for navnet på
ls -l
hvis navnet er over åtte tegn langt. - @kgrittn Det kan avhenge på Unix-varianten. GNU ls viser hele brukernavnet. BusyBox avkorter den til åtte tegn (i det minste på den builden jeg har her).
Svar
Prøv
getent passwd "$uid" | cut -d: -f1
Kommentarer
- Hvis dette ikke returnerer noe, betyr det at jeg ikke ‘ har du ikke tilgang til å oversette id til et brukernavn?
- Mer sannsynlig at du ikke
t set
» $ uid » `eller at uid ikke finnes ‘ t. Finnergrep ":$uid:" /etc/passwd
det? Girgetent passwd
noen utdata? - @cwd: Du bør alltid ha tilgang til å oversette en id til et brukernavn. For eksempel gjør
ls -l
alltid dette. - Bare nysgjerrig fordi du ser på en
ls
-liste på en delt vert viste tall i bruker- / gruppenavnskolonnene med ls. Kanskje det er en sikkerhetsforanstaltning eller jailshell-ting? - @cwd Mer sannsynlig bruker den delte verten en
/etc/passwd
montert / delt fra andre steder som ikke var ‘ t montert på den tiden.
Svar
Du kan like dette lille ditty.
$ id -nu [number]
3.17.3-1-ARCH # 1 SMP PREEMPT fre 14. nov 22:56:01 CET 2014 i686 GNU / Linux
Jeg kan bekrefte at den returnerer et tilsvarende brukernavn, hvis det finnes, på Arch Linux. Jeg kan også bekrefte at det ikke fungerer på Ubuntu når det kjøres som en vanlig bruker, selv om jeg ikke har testet dette som superbruker. Det fungerer heller ikke på Alpine Linux. Kanskje forhindrer en sikkerhetsfunksjon at dette fungerer på noen systemer.
Kommentarer
-
id -u jimmij
= >1000
.id -nu 1000
= >id: 1000: no such user
. - fungerer for meg, med
id --version
=id (GNU coreutils) 8.23
- Fungerer også i FreeBSD 10.3.
- Merk: dette fungerer på Red Hat / CentOS > = 7 (ikke på Red Hat / CentOS < = 6)
- FYI dette fungerer ikke på busybox / alpine linux / alpine dockerbilder
Svar
Jeg skjønner at dette er et gammelt spørsmål, men her er det et annet svar
awk -F: "{print $1,$3}" /etc/passwd | grep <UID>
Kommentarer
- Rør til
grep
hva? (Også hvis du legger til fire mellomrom i begynnelsen av linjen, blir det gjengitt som tekst med fast bredde.) - Jeg foretrekker svaret med
getent passwd
. Men hvis parsing / etc / passwd, ville det være hyggeligere å bare bruke awkID=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 motsetning til
getent
, fungerer ikke dette hvis systemet bruker LDAP. - dette fungerer ikke ‘ t enten hvis NIS i s brukt eller hvilken som helst annen distribuert autentiseringsprotokoll.
- @choroba: hvis han hadde et spesifikt krav til LDAP eller NIS, ville han sannsynligvis ha nevnt det. Løsningen min fungerer på typiske Linux-oppsett.
- nedstemme fordi den ‘ er ikke pålitelig (den kan matche verken brukeren eller gruppen).
Svar
id | awk "{print $1}" | sed "s/.*(//;s/)$//"
Denne oneliner gjør følgende:
- få brukerinformasjon
- trekk ut den første kolonnen («uid = ID (NAME)»)
- fjern noe før parentes, og selve parentesene
Svar
Kommandoen id
kan brukes til å både for å slå opp UID og / eller USER-navn
- slå opp et UID av USER , for eksempel:
$ id -u ubuntu 1000
- slå opp en BRUKER av UID , for eksempel:
$ id -un 1000 ubuntu
Hvis UID eller BRUKER ikke finnes på gjeldende maskin, skriver den ut -melding, 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