Descobrir se existe um nome de usuário

61

Como posso descobrir, em um script de shell, se um determinado nome de usuário existe no sistema atual?

/etc/passwd e /etc/shadow estão incompletos. Considere os serviços de diretório do OS X, ou Linux com a integração do Active Directory da mesma forma.

    
por Daniel Beck 16.09.2011 / 09:28

4 respostas

94

Uma das ferramentas mais básicas a serem usadas é provavelmente id .

#!/bin/bash
if id "$1" >/dev/null 2>&1; then
        echo "user exists"
else
        echo "user does not exist"
fi

Que produz

$ ./userexists root
user exists
$ ./userexists alice
user does not exist
$ ./userexists
user does not exist
    
por 16.09.2011 / 17:49
18

getent

Este comando é projetado para reunir entradas para os bancos de dados que podem ser suportados por arquivos / etc e vários serviços remotos como LDAP, AD, NIS / Páginas Amarelas, DNS e semelhantes.

Para descobrir se um nome de usuário é conhecido por um dos serviços de nomeação de senha, basta executar:

getent passwd username

Isso também funciona com grupos, hosts e outros, dependendo do sistema operacional e da implementação.

    
por 17.09.2011 / 14:46
6

finger

Analise a saída de finger -m <username> . Nenhum código de erro se nenhum usuário foi encontrado, infelizmente, mas se não for encontrado, a saída de erro será gravada. Sem desvantagens até agora.

finger -ms <username> 2>&1 1>/dev/null | wc -l

Será impressa 0 se o usuário for encontrado (porque não há saída de erro), caso contrário, números maiores.

chown

Executar (como qualquer usuário, surpreendentemente):

T=$( mktemp -t foo.XXX ) ; chown <username> $T

Se falhar como root , o nome da conta é inválido.

Se falhar como não sendo root user, analise a saída possivelmente localizada para Operação não permitida ou usuário inválido (ou equivalentes). Defina LANG antes para fazer isso de forma confiável.

    
por 16.09.2011 / 09:28
0

Eu diria que você gostaria de confiar em /etc/passwd e similares (por exemplo, /etc/shadow para sistemas baseados em Shadow; em uma nota secundária fora do tópico, alguns sistemas similares podem usar /etc/master.passwd ou outros arquivos semelhantes ).

O /etc/passwd é normalmente tratado como a decisão autoritativa absoluta sobre se um usuário existe ou não. Se você usar qualquer um dos outros métodos descritos nesta página, e se esses outros métodos apontarem para um usuário existente, mas /etc/passwd não, então eu diria que o usuário não existe corretamente no sistema, por definição dos mais padrão comum que o software provavelmente confiaria.

Dito isso, adicionarei outra maneira de adicionar à mistura algumas outras opções que podem ser usadas.

ls -l /home | grep ^customUserName$<BR> echo $?

Evidentemente, substitua "customuserName" pelo nome do usuário que você deseja verificar. Substitua / home por / users se é isso que seu sistema usa. Isso pode não localizar todos os usuários em / etc / passwd se nenhum diretório inicial foi criado para o usuário em particular, o que poderia ocorrer se você simplesmente importasse usuários (isto é, linhas de texto em / etc / passwd) e se diretórios pessoais não faça-se a menos que / até que uma pessoa faça o login.

    
por 04.03.2015 / 23:53

Tags