Het commando id kan worden gebruikt om een gebruiker “s uid, bijvoorbeeld:

$ id -u ubuntu 1000 

Is er een commando om een gebruikersnaam op te zoeken van een uid ? Ik realiseer me dat dit kan worden gedaan door naar het /etc/passwd -bestand te kijken, maar ik “vraag of hier een bestaand commando voor bestaat, vooral als de gebruiker die het uitvoert niet root is.

Ik “ben niet op zoek naar de gebruikersnaam van de huidige gebruiker, dwz ik ben niet op zoek naar whoami of logname.

Dit deed me ook afvragen of dit op shared webhosting een beveiligingsfunctie is, of begrijp ik iets gewoon niet goed?

Voor onderzoek, het /etc/passwd -bestand van een gedeelde 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 

En hier is een voorbeeld van een directorylijst van /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 

We zien root is de eigenaar van sommige bestanden en root wordt ook weergegeven in /etc/passwd, maar de andere gebruikers / groepen worden allemaal weergegeven als nummers .

Reacties

  • Onthoud dat meer dan één gebruiker dezelfde UID kan hebben. Het ‘ is zeldzaam, maar komt af en toe voor.

Antwoord

ls voert die zoekopdracht al uit. U kunt gebruikersinformatie opzoeken vanaf de opdrachtregel met getent passwd .

Als ls toont een gebruikers-ID in plaats van een gebruikersnaam, het is omdat er geen gebruiker met die naam is. Bestandssystemen slaan gebruikers-IDs op, geen gebruikersnamen. Als je een bestandssysteem van een ander systeem koppelt, of als een bestand van een nu verwijderde gebruiker is, of als je een numeriek gebruikers-ID hebt doorgegeven aan chown, kun je een bestand hebben dat erbij hoort naar een gebruikers-ID die geen naam heeft.

Op een gedeelde host heeft u mogelijk toegang tot enkele bestanden die worden gedeeld tussen verschillende virtuele machines, elk met hun gebruikersdatabase. Dit is een beetje raar (waarom bestanden delen maar niet de gebruikers die ze bezitten?), maar het is technisch mogelijk.

Reacties

  • I ‘ Ik zie het nummer in plaats van de naam op ls -l als de naam langer is dan acht tekens.
  • @kgrittn Het kan afhangen op de Unix-variant. GNU ls toont de hele gebruikersnaam. BusyBox ls kapt het af tot 8 tekens (tenminste voor de build die ik hier heb).

Antwoord

Probeer

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

Reacties

  • Als dit niets teruggeeft, betekent dit dat ik niet ‘ heb je geen toegang om de ID naar een gebruikersnaam te vertalen?
  • Waarschijnlijk heb je t set ” $ uid ” `of die uid bestaat niet ‘ t. Vindt grep ":$uid:" /etc/passwd het? Levert getent passwd output op?
  • @cwd: je zou altijd toegang moeten hebben om een id naar een gebruikersnaam te vertalen. ls -l doet dit bijvoorbeeld altijd.
  • Gewoon nieuwsgierig omdat we kijken naar een ls vermelding op een gedeelde host toonde getallen in de gebruikers- / groepsnaamkolommen met ls. Misschien is het een veiligheidsmaatregel of een jailshell-ding?
  • @cwd Het is waarschijnlijker dat de gedeelde host een /etc/passwd gemount / gedeeld van elders gebruikt die niet ‘ t is destijds aangekoppeld.

Antwoord

Misschien vind je dit leuk liedje.

$ id -nu [number] 

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

Ik kan bevestigen dat het een corresponderende gebruikersnaam retourneert, als die bestaat, op Arch Linux. Ik kan ook bevestigen dat het niet werkt op Ubuntu wanneer het als een normale gebruiker wordt uitgevoerd, hoewel ik dit niet als superuser heb getest. Het werkt ook niet op Alpine Linux. Misschien voorkomt een beveiligingsfunctie dat dit op sommige systemen werkt.

Reacties

  • id -u jimmij = > 1000. id -nu 1000 = > id: 1000: no such user.
  • werkt voor mij, met id --version = id (GNU coreutils) 8.23
  • Werkt ook in FreeBSD 10.3.
  • opmerking: dit werkt op Red Hat / CentOS > = 7 (niet op Red Hat / CentOS < = 6)
  • Ter info: dit werkt niet op busybox / alpine linux / alpine docker-afbeeldingen

Antwoord

Ik realiseer me dat dit een oude vraag is, maar hier is een ander antwoord

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

Reacties

  • Doorspoelen naar grep wat? (Als je ook vier spaties toevoegt aan het begin van de regel, wordt het weergegeven als tekst met een vaste breedte.)
  • Ik geef de voorkeur aan het antwoord met getent passwd. Maar als u / etc / passwd parseert, zou het prettiger zijn om alleen awk te gebruiken ID=0 ; awk -F: '{if ( $3 == '"$ID"' ) print $1}' /etc/passwd.

Antwoord

Parse / etc / passwd:

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

Reacties

  • In tegenstelling tot getent werkt dit niet als het systeem LDAP gebruikt.
  • Dit ‘ werkt ook niet als NIS i s gebruikt of welk ander gedistribueerd authenticatieprotocol dan ook.
  • @choroba: als hij een specifieke vereiste had voor LDAP of NIS, zou hij het waarschijnlijk hebben genoemd. Mijn oplossing werkt op typische Linux-setups.
  • stem af omdat het ‘ niet betrouwbaar is (het kan overeenkomen met de gebruiker of de groep).

Antwoord

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

Deze oneliner doet het volgende:

  • gebruikersinformatie opvragen
  • de eerste kolom extraheren (“uid = ID (NAME)”)
  • alles vóór haakjes verwijderen, en de haakjes zelf

Antwoord

Het commando id kan worden gebruikt om beide om UID en / of USER name op te zoeken

  1. zoek een UID door USER , bijvoorbeeld:
 $ id -u ubuntu 1000 
  1. zoek een GEBRUIKER op via UID , bijvoorbeeld:
 $ id -un 1000 ubuntu 

Als de UID of USER niet wordt gevonden op de huidige machine, wordt bericht, bijvoorbeeld:

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

Van 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 

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *