Pomocí příkazu id lze vyhledat uživatele uid, například:

$ id -u ubuntu 1000 

Existuje příkaz k vyhledání uživatelského jména z uid ? Uvědomuji si, že toho lze dosáhnout pohledem na soubor /etc/passwd, ale ptám se, zda k tomu existuje existující příkaz, zvláště pokud uživatel, který jej provádí, není root.

Nehledám uživatelské jméno aktuálního uživatele, tj. nehledám whoami nebo logname.

To mě také přimělo zajímat, jestli se jedná o sdílený webhosting o bezpečnostní prvek, nebo jen něčemu nerozumím správně?

Pro zkoumání, soubor /etc/passwd ze sdíleného webového hostitele:

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 

A zde je ukázkový výpis adresáře /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 

Vidíme root je vlastníkem některých souborů a root se také zobrazuje v /etc/passwd, ostatní uživatelé / skupiny se však zobrazují jako čísla .

Komentáře

  • Pamatujte, že stejný UID může mít více než jeden uživatel. Je to ‚ vzácné, ale stává se to příležitostně.

Odpověď

ls toto vyhledávání již provádí. Vyhledávání informací o uživateli můžete provést z příkazového řádku pomocí getent passwd .

Pokud ls zobrazuje uživatelské jméno místo uživatelského jména, je to proto, že pod tímto jménem není žádný uživatel. Souborové systémy ukládají ID uživatelů, nikoli uživatelská jména. Pokud připojíte souborový systém z jiného systému, nebo pokud soubor patří nyní odstraněnému uživateli, nebo pokud jste předali číselné ID uživatele chown, můžete mít soubor, který patří na ID uživatele, které nemá jméno.

Na sdíleném hostiteli můžete mít přístup k některým souborům, které jsou sdíleny mezi několika virtuálními stroji, každý s jejich databází uživatelů. To je trochu divné (proč sdílet soubory, ale ne uživatelé, kteří je vlastní?), ale je to technicky možné.

Komentáře

  • I ‚ m vidím místo jména ls -l číslo, pokud má název více než osm znaků.
  • @kgrittn Může to záviset na variantě Unix. GNU ls zobrazuje celé uživatelské jméno. BusyBox ls to zkrátí na 8 znaků (alespoň na sestavení, které zde mám).

Odpovědět

Zkuste

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

Komentáře

  • Pokud se toto vrátí, nic to neznamená, že ‚ Nemáte přístup k překladu ID na uživatelské jméno?
  • Pravděpodobněji jste t set “ $ uid “ `nebo tento uid neexistuje ‚. Najde to grep ":$uid:" /etc/passwd? Produkuje getent passwd nějaký výstup?
  • @cwd: Vždy byste měli mít přístup k překladu id na uživatelské jméno. Například ls -l to dělá vždy.
  • Jen jsem zvědavý, protože prohlížení seznamu ls na sdíleném hostiteli zobrazoval čísla ve sloupcích názvu uživatele / skupiny s ls. Možná je to bezpečnostní opatření nebo vězení?
  • @cwd Pravděpodobnější je, že sdílený hostitel používá /etc/passwd připojený / sdílený odjinud, kde nebyl ‚ t namontován v té době.

Odpověď

Možná se vám bude líbit tento malý popěvek.

$ id -nu [number] 

3.17.3-1-ARCH # 1 SMP PREEMPT Pá 14. listopadu 22:56:01 SEČ 2014 i686 GNU / Linux

Mohu potvrdit, že vrací odpovídající uživatelské jméno, pokud existuje, na Arch Linuxu. Mohu také potvrdit, že nefunguje na Ubuntu, když je spuštěn jako normální uživatel, i když jsem to netestoval jako superuser. Na Alpine Linux také nefunguje. Možná bezpečnostní funkce brání tomu, aby to v některých systémech fungovalo.

Komentáře

  • id -u jimmij = > 1000. id -nu 1000 = > id: 1000: no such user.
  • pracuje pro mě, s id --version = id (GNU coreutils) 8.23
  • Funguje také ve FreeBSD 10.3.
  • poznámka: toto funguje na Red Hat / CentOS > = 7 (nikoli na Red Hat / CentOS < = 6)
  • FYI toto nefunguje na obrázcích busybox / alpine linux / alpine docker

odpověď

Uvědomuji si, že se jedná o starou otázku, ale zde je další odpověď

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

Komentáře

  • Přejít na grep co? (Také pokud na začátku řádku přidáte čtyři mezery, vykreslí se to jako text s pevnou šířkou.)
  • Upřednostňuji odpověď s getent passwd. Pokud však analyzujete / etc / passwd, bylo by hezčí použít awk pouze ID=0 ; awk -F: '{if ( $3 == '"$ID"' ) print $1}' /etc/passwd.

Odpověď

Analyzovat / etc / passwd:

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

Komentáře

  • Na rozdíl od getent to nefunguje, pokud systém používá LDAP.
  • to ‚ nefunguje, pokud je NIS i použitý nebo jakýkoli jiný distribuovaný autentizační protokol.
  • @choroba: kdyby měl konkrétní požadavek na LDAP nebo NIS, pravděpodobně by to zmínil. Moje řešení funguje na typických nastaveních linuxu.
  • downvote, protože ‚ není spolehlivý (může odpovídat uživateli nebo skupině).

Odpověď

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

Tento jednoliner dělá následující:

  • získejte informace o uživateli
  • extrahujte první sloupec („uid = ID (NÁZEV)“)
  • odstraňte cokoli před závorky a samotné závorky

Odpověď

Pomocí příkazu id lze both vyhledat UID a / nebo USER jméno

  1. vyhledat UID USER , například:
 $ id -u ubuntu 1000 
  1. vyhledat UŽIVATEL pomocí UID , například:
 $ id -un 1000 ubuntu 

Pokud se na aktuálním stroji nenachází UID nebo USER, vytiskne , například:

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

Z 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 

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *