Kommandot id kan användas för att slå upp en användare ”s uid, till exempel:

$ id -u ubuntu 1000 

Finns det ett kommando att slå upp ett användarnamn från en uid ? Jag inser att detta kan göras genom att titta på /etc/passwd -filen men jag frågar om det finns ett befintligt kommando till detta, särskilt om användaren som kör den inte är root.

Jag letar inte efter nuvarande användarens användarnamn, dvs jag letar inte efter whoami eller logname.

Detta fick mig också att undra om det på en delad webbhotell är en säkerhetsfunktion, eller förstår jag bara inte något korrekt?

För undersökning, /etc/passwd -filen från en delad webbhotell:

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 

Och här är ett exempel på en katalogkatalog över /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 är ägare till vissa filer, och root visas också i /etc/passwd, men alla andra användare / grupper dyker upp alla som siffror .

Kommentarer

  • Tänk på att fler än en användare kan ha samma UID. Det ’ är sällsynt, men händer ibland.

Svar

ls utför redan den sökningen. Du kan söka efter användarinformation från kommandoraden med getent passwd .

Om ls visar ett användar-ID istället för ett användarnamn, det beror på att det inte finns någon användare med det namnet. Filsystem lagrar användar-ID, inte användarnamn. Om du monterar ett filsystem från ett annat system, eller om en fil tillhör en användare som nu har tagits bort, eller om du skickat ett numeriskt användar-ID till chown, kan du ha en fil som tillhör till ett användar-ID som inte har något namn.

På en delad värd kan du ha tillgång till vissa filer som delas mellan flera virtuella datorer, var och en med sin användardatabas. Detta är lite konstigt (varför dela filer men inte användare som äger dem?), men det är tekniskt möjligt.

Kommentarer

  • I ’ jag ser numret istället för namnet på ls -l om namnet är över åtta tecken långt.
  • @kgrittn Det kan bero på på Unix-varianten. GNU ls visar hela användarnamnet. BusyBox ls avkortar den till åtta tecken (åtminstone på den build jag har här).

Svar

Försök

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

Kommentarer

  • Om detta inte returnerar betyder inget att jag inte ’ har du inte tillgång till att översätta id: t till ett användarnamn?
  • Mer troligt att du inte t set ” $ uid ” `eller att uid inte finns ’ t finns. Finns det grep ":$uid:" /etc/passwd? Ger getent passwd någon utdata?
  • @cwd: Du bör alltid ha tillgång till att översätta ett id till ett användarnamn. Till exempel gör ls -l alltid detta.
  • Bara nyfiken på att titta på en ls -lista på en delad värd visade siffror i kolumnerna för användare / gruppnamn med ls. Kanske är det en säkerhetsåtgärd eller jailshell-sak?
  • @cwd Mer troligt använder den delade värden en /etc/passwd monterad / delad från någon annanstans som inte var ’ t monterad för tillfället.

Svar

Du kanske tycker om det här lilla ditty.

$ id -nu [number] 

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

Jag kan bekräfta att det returnerar ett motsvarande användarnamn, om det finns, på Arch Linux. Jag kan också bekräfta att det inte fungerar på Ubuntu när det körs som en vanlig användare, även om jag inte har testat detta som superanvändaren. Det fungerar inte heller på Alpine Linux. Kanske förhindrar en säkerhetsfunktion att detta fungerar på vissa system.

Kommentarer

  • id -u jimmij = > 1000. id -nu 1000 = > id: 1000: no such user.
  • fungerar för mig, med id --version = id (GNU coreutils) 8.23
  • Fungerar också i FreeBSD 10.3.
  • Obs: detta fungerar på Red Hat / CentOS > = 7 (inte på Red Hat / CentOS < = 6)
  • FYI detta fungerar inte på upptagenbox / alpina linux / alpina dockningsbilder

Svar

Jag inser att det här är en gammal fråga, men här är ett annat svar

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

Kommentarer

  • Rör till grep vad? (Om du lägger till fyra mellanslag i början av raden kommer det att visas som text med fast bredd.)
  • Jag föredrar svaret med getent passwd. Men om man analyserar / etc / passwd, skulle det vara trevligare att bara använda awk ID=0 ; awk -F: '{if ( $3 == '"$ID"' ) print $1}' /etc/passwd.

Svar

Analysera / etc / passwd:

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

Kommentarer

  • Till skillnad från getent fungerar inte detta om systemet använder LDAP.
  • det fungerar inte ’ om NIS i används eller vad som helst annat distribuerat autentiseringsprotokoll.
  • @choroba: om han hade ett specifikt krav på LDAP eller NIS skulle han förmodligen ha nämnt det. Min lösning fungerar på vanliga Linux-inställningar.
  • nedröstning eftersom den ’ är inte tillförlitlig (den kan matcha antingen användaren eller gruppen).

Svar

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

Denna oneliner gör följande:

  • få användarinformation
  • extrahera den första kolumnen (”uid = ID (NAME)”)
  • ta bort allt innan parentes och själva parenteserna

Svar

Kommandot id kan användas för att både för att slå upp UID och / eller ANVÄNDARNAMN

  1. leta upp en UID av USER , till exempel:
 $ id -u ubuntu 1000 
  1. leta upp en ANVÄNDARE av UID , till exempel:
 $ id -un 1000 ubuntu 

Om UID eller USER inte finns på den aktuella maskinen skriver den ut meddelande, till exempel:

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

Från 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 

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *