
Эту команду id
можно использовать для поиска пользователя uid
, например:
$ id -u ubuntu
1000
Есть ли команда для поиска имени пользователя из uid
? Я понимаю, что это можно сделать, просмотрев /etc/passwd
файл, но я спрашиваю, есть ли существующая команда для этого, особенно если пользователь, выполняющий ее, не является root.
Я не ищутекущийимя пользователя, т.е. я не ищу whoami
или logname
.
Это также заставило меня задуматься, является ли это функцией безопасности на общем веб-хостинге, или я просто что-то не так понимаю?
Для проверки, /etc/passwd
файл с общего веб-хостинга:
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
А вот пример списка каталогов/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
Мы видим root
, что является владельцем некоторых файлов, а root
также отображается в /etc/passwd
, однако все остальные пользователи/группы отображаются в виде номеров.
решение1
Вам может понравиться эта песенка.
$ id -nu [number]
3.17.3-1-ARCH #1 SMP PREEMPT Пятница, 14 ноября 22:56:01 CET 2014 i686 GNU/Linux
Я могу подтвердить, что он возвращает соответствующее имя пользователя, если оно существует, в Arch Linux. Я также могу подтвердить, что он не работает в Ubuntu при запуске от имени обычного пользователя, хотя я не тестировал это как суперпользователь. Он также не работает в Alpine Linux. Возможно, функция безопасности не позволяет этому работать в некоторых системах.
решение2
Пытаться
getent passwd "$uid" | cut -d: -f1
решение3
ls
уже выполняет этот поиск. Вы можете выполнить поиск информации о пользователе из командной строки с помощьюgetent passwd
.
Если ls
вместо имени пользователя отображается идентификатор пользователя, это значит, что пользователя с таким именем нет. Файловые системы хранят идентификаторы пользователей, а не имена пользователей. Если вы монтируете файловую систему из другой системы, или если файл принадлежит удаленному пользователю, или если вы передали числовой идентификатор пользователя в chown
, у вас может быть файл, принадлежащий идентификатору пользователя, у которого нет имени.
На общем хосте у вас может быть доступ к некоторым файлам, которые совместно используются несколькими виртуальными машинами, каждая из которых имеет свою базу данных пользователей. Это немного странно (зачем делиться файлами, но не пользователями, которые ими владеют?), но технически это возможно.
решение4
Я понимаю, что это старый вопрос, но вот еще один ответ
awk -F: '{print $1,$3}' /etc/passwd | grep <UID>