O comando id pode ser usado para pesquisar um usuário “s uid, por exemplo:

$ id -u ubuntu 1000 

Existe um comando para pesquisar um nome de usuário em um uid ? Sei que isso pode ser feito olhando para o arquivo /etc/passwd, mas estou perguntando se há um comando existente para isso, especialmente se o usuário que o está executando não é root.

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

Isso também me fez pensar se na hospedagem compartilhada na web esse é um recurso de segurança ou se não estou entendendo algo corretamente?

Para análise, o /etc/passwd arquivo 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á um exemplo de listagem de diretório 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 root é o proprietário de alguns arquivos e root também está aparecendo em /etc/passwd, no entanto, todos os outros usuários / grupos aparecem como números .

Comentários

  • Lembre-se de que mais de um usuário pode ter o mesmo UID. É ‘ raro, mas acontece ocasionalmente.

Resposta

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

Se ls mostra 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ário, não nomes de usuário. Se você montar um sistema de arquivos de outro sistema, ou se um arquivo pertencer a um usuário excluído, ou se você passou um ID de usuário numérico para chown, você pode ter um arquivo que pertence para um ID de usuário que não tem 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 de usuário. Isso é um pouco estranho (por que compartilhar arquivos, mas não os usuários que os possuem?), mas é tecnicamente possível.

Comentários

  • I ‘ estou vendo o número em vez do nome em ls -l se o nome tiver mais de oito caracteres.
  • @kgrittn Pode depender na variante Unix. GNU ls mostra o nome de usuário completo. BusyBox ls o trunca para 8 caracteres (pelo menos na compilação que tenho aqui).

Resposta

Tente

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

Comentários

  • Se não retornar nada, significa que eu não ‘ não tem acesso para traduzir o id para um nome de usuário?
  • É mais provável que você não t set ” $ uid ” `ou esse uid não ‘ não existe. grep ":$uid:" /etc/passwd o encontra? getent passwd produz alguma saída?
  • @cwd: Você sempre deve ter acesso para traduzir um id para um nome de usuário. Por exemplo, ls -l está sempre fazendo isso.
  • Apenas curioso porque olhando para uma ls listagem em um host compartilhado estava mostrando números nas colunas de nome de usuário / grupo com ls. Talvez seja uma precaução de segurança ou coisa de jailshell?
  • @cwd Mais provavelmente o host compartilhado está usando um /etc/passwd montado / compartilhado de outro lugar que não foi ‘ t montado no momento.

Resposta

Você pode gostar deste pouco cantiga.

$ id -nu [number] 

3.17.3-1-ARCH # 1 SMP PREEMPT Sex 14 Nov 22:56:01 CET 2014 i686 GNU / Linux

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

Comentários

  • id -u jimmij = > 1000. id -nu 1000 = > id: 1000: no such user.
  • funciona para mim, com id --version = id (GNU coreutils) 8.23
  • Funciona no FreeBSD 10.3 também.
  • observação: isso funciona em Red Hat / CentOS > = 7 (não em Red Hat / CentOS < = 6)
  • Para sua informação, isso não funciona em imagens do busybox / alpine linux / alpine docker

Resposta

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

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

Comentários

  • Pipe para grep o quê? (Além disso, se você adicionar quatro espaços no início da linha, será processado como texto de largura fixa.)
  • Prefiro a resposta com getent passwd. Mas se for analisar / etc / passwd, seria melhor usar apenas awk ID=0 ; awk -F: '{if ( $3 == '"$ID"' ) print $1}' /etc/passwd.

Resposta

Analisar / etc / passwd:

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

Comentários

  • Ao contrário de getent, isso não funciona se o sistema usa LDAP.
  • isso não ‘ também não funciona se o NIS i s usado ou qualquer outro protocolo de autenticação distribuído.
  • @choroba: se ele tivesse um requisito específico para LDAP ou NIS, ele provavelmente o teria mencionado. Minha solução funciona em configurações típicas do Linux.
  • downvote porque ‘ não é confiável (pode corresponder ao usuário ou grupo).

Resposta

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

Este oneliner faz o seguinte:

  • obtenha informações do usuário
  • extraia a primeira coluna (“uid = ID (NOME)”)
  • remova tudo o que estiver antes dos colchetes e os próprios colchetes

Resposta

O comando id pode ser usado para ambos para pesquisar UID e / ou nome de USUÁRIO

  1. pesquisar UID pelo USUÁRIO , por exemplo:
 $ id -u ubuntu 1000 
  1. procure um USUÁRIO por UID , por exemplo:
 $ id -un 1000 ubuntu 

Se o UID ou USUÁRIO não for encontrado na máquina atual, ele imprime mensagem, por exemplo:

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

De 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 

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *