Polecenia id można użyć do wyszukania użytkownika uid, na przykład:

$ id -u ubuntu 1000 

Czy istnieje polecenie wyszukania nazwy użytkownika w uid ? Zdaję sobie sprawę, że można to zrobić, patrząc na plik /etc/passwd, ale pytam, czy istnieje do tego polecenie, zwłaszcza jeśli wykonujący je użytkownik nie jest rootem.

Nie szukam nazwy użytkownika bieżącego użytkownika, tj. nie szukam whoami ani logname.

To również sprawiło, że zacząłem się zastanawiać, czy na współdzielonym hostingu internetowym jest to funkcja bezpieczeństwa, czy po prostu nie rozumiem czegoś poprawnie?

Do sprawdzenia, plik /etc/passwd z udostępnionego hosta internetowego:

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 oto przykładowa lista katalogu /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 

Widzimy root jest właścicielem niektórych plików, a root pojawia się również w /etc/passwd, jednak inni użytkownicy / grupy są wyświetlani jako liczby .

Komentarze

  • Należy pamiętać, że więcej niż jeden użytkownik może mieć ten sam UID. To ' jest rzadkie, ale zdarza się sporadycznie.

Odpowiedź

ls już wykonuje to wyszukiwanie. Możesz wyszukać informacje o użytkowniku z wiersza poleceń za pomocą getent passwd .

Jeśli ls pokazuje identyfikator użytkownika zamiast nazwy użytkownika, ponieważ nie ma użytkownika o tej nazwie. Systemy plików przechowują identyfikatory użytkowników, a nie nazwy użytkowników. Jeśli zamontujesz system plików z innego systemu lub jeśli plik należy do usuniętego użytkownika, lub jeśli przekazałeś numeryczny identyfikator użytkownika do chown, możesz mieć plik, który należy do identyfikatora użytkownika, który nie ma nazwy.

Na współdzielonym hoście możesz mieć dostęp do niektórych plików, które są współdzielone między kilkoma maszynami wirtualnymi, każda z ich bazą danych użytkowników. To trochę dziwne (po co udostępniać pliki, ale nie użytkownikom, którzy są ich właścicielami?), ale jest to technicznie możliwe.

Komentarze

  • I ' m widzę numer zamiast nazwy na ls -l, jeśli nazwa ma więcej niż osiem znaków.
  • @kgrittn Może to zależeć w wariancie Unix. GNU ls pokazuje całą nazwę użytkownika. BusyBox ls skraca go do 8 znaków (przynajmniej w tej wersji, którą mam tutaj).

Odpowiedź

Spróbuj

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

Komentarze

  • Jeśli to nic nie zwraca, oznacza to, że nie ' nie masz możliwości przetłumaczenia identyfikatora na nazwę użytkownika?
  • Bardziej prawdopodobne jest, że nie t set ” $ uid ” `lub ten identyfikator nie istnieje '. Czy grep ":$uid:" /etc/passwd go znajduje? Czy getent passwd generuje jakieś wyjście?
  • @cwd: Zawsze powinieneś mieć możliwość przetłumaczenia identyfikatora na nazwę użytkownika. Na przykład ls -l zawsze to robi.
  • Po prostu ciekawi, ponieważ patrząc na ls wpis na udostępnionym hoście wyświetlał liczby w kolumnach nazw użytkowników / grup z ls. Być może jest to środek ostrożności lub sprawa jailshell?
  • @cwd Bardziej prawdopodobne jest, że współdzielony host używa /etc/passwd zamontowanego / udostępnionego z innego miejsca, który nie był ' nie jest wtedy zamontowany.

Odpowiedź

Może ci się to trochę spodobać śpiewka.

$ id -nu [number] 

3.17.3-1-ARCH # 1 SMP PREEMPT pt. 14 listopada 22:56:01 CET 2014 i686 GNU / Linux

Mogę potwierdzić, że zwraca odpowiednią nazwę użytkownika, jeśli taka istnieje, w Arch Linux. Mogę również potwierdzić, że nie działa na Ubuntu, gdy jest uruchamiany jako zwykły użytkownik, chociaż nie testowałem tego jako superużytkownik. Nie działa również w Alpine Linux. Być może funkcja bezpieczeństwa uniemożliwia to działanie w niektórych systemach.

Komentarze

  • id -u jimmij = > 1000. id -nu 1000 = > id: 1000: no such user.
  • działa dla mnie z id --version = id (GNU coreutils) 8.23
  • Działa również we FreeBSD 10.3.
  • uwaga: to działa w Red Hat / CentOS > = 7 (nie w Red Hat / CentOS < = 6)
  • FYI to nie działa na obrazach busybox / alpine linux / alpine docker

Odpowiedź

Zdaję sobie sprawę, że to stare pytanie, ale oto inna odpowiedź

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

Komentarze

  • potokiem do grep co? (Jeśli dodasz cztery spacje na początku wiersza, zostanie on wyrenderowany jako tekst o stałej szerokości).
  • Wolę odpowiedź z getent passwd. Ale jeśli przeanalizuję / etc / passwd, lepiej byłoby użyć tylko awk ID=0 ; awk -F: '{if ( $3 == '"$ID"' ) print $1}' /etc/passwd.

Odpowiedź

Przetwarzaj / etc / passwd:

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

Komentarze

  • W przeciwieństwie do getent, to nie działa, jeśli system korzysta z LDAP.
  • to nie ' nie działa również, jeśli NIS i s lub jakikolwiek inny rozproszony protokół uwierzytelniania.
  • @choroba: gdyby miał określone wymagania dotyczące LDAP lub NIS, prawdopodobnie by o tym wspomniał. Moje rozwiązanie działa na typowych konfiguracjach Linuksa.
  • głos negatywny, ponieważ ' nie jest wiarygodny (może pasować do użytkownika lub grupy).

Odpowiedź

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

Ten oneliner wykonuje następujące czynności:

  • pobierz informacje o użytkowniku
  • wyodrębnij pierwszą kolumnę („uid = ID (NAZWA)”)
  • usuń wszystko przed nawiasami, a także same nawiasy.

Odpowiedź

Polecenie id może być użyte do oba do wyszukiwania identyfikatora UID i / lub nazwy UŻYTKOWNIKA

  1. wyszukaj UID użytkownika USER , na przykład:
 $ id -u ubuntu 1000 
  1. wyszukaj USER według UID , na przykład:
 $ id -un 1000 ubuntu 

Jeśli UID lub USER nie zostanie znaleziony na bieżącej maszynie, wypisze wiadomość, na przykład:

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

From 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 

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *