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 togrep ":$uid:" /etc/passwd
? Produkujegetent 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 pouzeID=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
- vyhledat UID USER , například:
$ id -u ubuntu 1000
- 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