Como posso procurar um nome de usuário por id no linux?

57

O comando id pode ser usado para procurar o uid de um usuário, por exemplo:

$ id -u ubuntu
1000

Existe um comando para procurar um nome de usuário de um uid ? Eu percebo que isso pode ser feito olhando o arquivo /etc/passwd , mas estou perguntando se existe um comando existente para isso, especialmente se o usuário que está executando não for root.

Não estou procurando o nome de usuário do atual , ou seja, não estou procurando whoami ou logname .

Isso também me fez pensar se em hospedagem compartilhada este é um recurso de segurança, ou eu não estou entendendo algo corretamente?

Para exame, o arquivo /etc/passwd de um host compartilhado:

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

E aqui está uma lista de diretórios de amostra de /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

Podemos ver que root é o proprietário de alguns arquivos e root também está aparecendo em /etc/passwd , mas os outros usuários / grupos aparecem como números.

    
por cwd 17.04.2012 / 03:29

6 respostas

32

ls já realiza essa pesquisa. Você pode executar uma pesquisa de informações do usuário na linha de comando com getent passwd .

Se ls mostrar um ID de usuário em vez de um nome de usuário, é porque não há nenhum usuário com esse nome. Os sistemas de arquivos armazenam IDs de usuários, não nomes de usuários. Se você montar um sistema de arquivos de outro sistema ou se um arquivo pertencer a um usuário excluído agora ou se tiver passado um ID de usuário numérico para chown , você poderá ter um arquivo que pertença a um ID de usuário que não possui um nome.

Em um host compartilhado, você pode ter acesso a alguns arquivos que são compartilhados entre várias máquinas virtuais, cada uma com seu banco de dados do usuário. Isso é um pouco estranho (por que compartilhar arquivos, mas não os usuários que os possuem?), Mas é tecnicamente possível.

    
por 18.04.2012 / 02:11
56

Tente

getent passwd "$uid" | cut -d: -f1
    
por 17.04.2012 / 03:36
26

Você pode gostar dessa pequena cantiga.

$ id -nu [number]

3.17.3-1-ARCH # 1 SMP PREVENÇÃO sex Nov 14 22:56:01 CET 2014 i686 GNU / Linux

Posso confirmar que ele retorna um nome de usuário correspondente, se houver, no Arch Linux. Eu também posso confirmar que ele não funciona no Ubuntu quando executado como um usuário normal, embora eu não tenha testado isso como o superusuário. Também não funciona no Alpine Linux. Talvez um recurso de segurança evite que isso funcione em alguns sistemas.

    
por 21.11.2014 / 13:13
0

Analise o arquivo / etc / passwd:

% awk -F: "/:$(id -u ubuntu):/{print \}" /etc/passwd
ubuntu
    
por 17.04.2012 / 05:35
0

Eu percebo que esta é uma pergunta antiga, mas aqui está outra resposta

awk -F: '{print $1,$3}' /etc/passwd | grep <UID>
    
por 31.03.2016 / 23:36
0
id | awk '{print $1}' | sed 's:.*(::;s:)$::'
    
por 03.05.2016 / 16:07