getent | Linux
- getent | Linux
O getent é um comando usado para consultar informações de bases do sistema Linux, como usuários, grupos, hosts, serviços, redes e outras bases configuradas no NSS.
NSS significa Name Service Switch. Ele define de onde o Linux deve buscar determinadas informações. Por exemplo:
- arquivos locais, como
/etc/passwd,/etc/group,/etc/hosts - LDAP
- NIS
- systemd
- DNS
- outras fontes configuradas no sistema
Na prática, o getent é mais confiável do que ler diretamente arquivos como /etc/passwd ou /etc/group, porque ele respeita todas as fontes configuradas no sistema.
O livro Practical Linux System Administration mostra que informações de usuários ficam em arquivos como /etc/passwd, onde aparecem campos como usuário, UID, GID, comentário, home e shell; também reforça que grupos ficam relacionados ao controle de acesso no sistema.
Sintaxe básica
getent <base>
Ou:
getent <base> <chave>
Exemplos:
getent passwd
getent passwd joao
getent group docker
getent hosts google.com
getent services ssh
Para que serve
O getent serve para buscar informações de forma padronizada nas bases do sistema.
Exemplo simples:
cat /etc/passwd
Esse comando lê somente o arquivo local /etc/passwd.
Já este:
getent passwd
consulta a base de usuários conforme a configuração do NSS. Se o sistema usa LDAP, Active Directory, SSSD ou outra fonte externa, o getent também pode retornar esses usuários.
Principais bases do getent
| Base | O que consulta | Exemplo |
|---|---|---|
passwd | Usuários do sistema | getent passwd |
group | Grupos do sistema | getent group |
shadow | Senhas e expiração | sudo getent shadow |
hosts | Resolução de nomes | getent hosts servidor01 |
services | Serviços e portas | getent services ssh |
protocols | Protocolos de rede | getent protocols tcp |
networks | Redes conhecidas | getent networks |
aliases | Aliases de e-mail | getent aliases |
Consultar usuários
Para listar todos os usuários conhecidos pelo sistema:
getent passwd
Exemplo de saída:
root:x:0:0:root:/root:/bin/bash
joao:x:1001:1001:Joao Silva:/home/joao:/bin/bash
nginx:x:997:997:Nginx web server:/var/lib/nginx:/sbin/nologin
Cada linha segue o formato:
usuario:senha:UID:GID:comentario:home:shell
| Campo | Descrição |
|---|---|
usuario | Nome do usuário |
senha | Normalmente aparece como x, pois a senha real fica no /etc/shadow |
UID | ID do usuário |
GID | ID do grupo primário |
comentario | Campo GECOS, geralmente nome completo ou descrição |
home | Diretório home |
shell | Shell padrão do usuário |
Consultar um usuário específico:
getent passwd joao
Verificar se um usuário existe:
getent passwd joao
Com validação em script:
if getent passwd joao > /dev/null; then
echo "Usuário existe"
else
echo "Usuário não existe"
fi
Consultar grupos
Listar todos os grupos:
getent group
Consultar um grupo específico:
getent group docker
Exemplo de saída:
docker:x:999:joao,maria
Formato:
grupo:senha:GID:membros
| Campo | Descrição |
|---|---|
grupo | Nome do grupo |
senha | Campo legado, normalmente x |
GID | ID do grupo |
membros | Usuários membros do grupo |
Verificar se o grupo docker existe:
getent group docker
Verificar se um usuário está no grupo docker:
getent group docker | grep -w joao
Ou de forma mais adequada em script:
if getent group docker | grep -qw joao; then
echo "Usuário está no grupo docker"
else
echo "Usuário não está no grupo docker"
fi
Consultar shadow
A base shadow contém informações sensíveis sobre senha, expiração e bloqueio de conta.
Normalmente precisa de sudo:
sudo getent shadow joao
Exemplo:
joao:$y$j9T$...:19800:0:99999:7:::
Campos principais:
| Campo | Descrição |
|---|---|
| Usuário | Nome da conta |
| Hash da senha | Senha criptografada ou marcador de bloqueio |
| Última alteração | Dias desde 01/01/1970 |
| Mínimo | Dias mínimos para trocar senha |
| Máximo | Dias máximos para trocar senha |
| Aviso | Dias de aviso antes de expirar |
| Inatividade | Dias após expiração até desativar |
| Expiração da conta | Data de expiração da conta |
Exemplo para validar se uma conta tem senha bloqueada:
sudo getent shadow joao
Se o campo da senha começar com ! ou *, normalmente indica senha bloqueada ou login por senha indisponível.
Consultar hosts
O getent hosts consulta resolução de nomes respeitando o NSS.
getent hosts localhost
Saída comum:
127.0.0.1 localhost
Consultar um host da rede:
getent hosts servidor01
Consultar domínio externo:
getent hosts google.com
A diferença para comandos como dig ou nslookup é que o getent hosts respeita a ordem configurada em /etc/nsswitch.conf.
Exemplo:
grep '^hosts:' /etc/nsswitch.conf
Saída comum:
hosts: files dns
Isso significa que o sistema tenta resolver primeiro por arquivos locais, como /etc/hosts, e depois por DNS.
Consultar serviços e portas
Listar serviços conhecidos:
getent services
Consultar o serviço SSH:
getent services ssh
Exemplo:
ssh 22/tcp
Consultar HTTP:
getent services http
Saída:
http 80/tcp
Consultar HTTPS:
getent services https
Saída:
https 443/tcp
Consultar protocolos
getent protocols tcp
Saída comum:
tcp 6 TCP
getent protocols udp
Saída comum:
udp 17 UDP
Diferença entre getent e cat
Usando cat
cat /etc/passwd
Consulta somente o arquivo local.
Usando getent
getent passwd
Consulta a base de usuários conforme o NSS.
Isso é importante em ambientes corporativos, porque nem todo usuário precisa existir localmente no /etc/passwd. Ele pode vir de LDAP, Active Directory, SSSD ou outro backend.
Exemplos práticos de administração
Verificar se usuário existe
getent passwd precisao
Com script:
usuario="precisao"
if getent passwd "$usuario" > /dev/null; then
echo "Usuário $usuario existe"
else
echo "Usuário $usuario não existe"
fi
Verificar UID de um usuário
getent passwd precisao | cut -d: -f3
Exemplo:
1001
Verificar shell de login
getent passwd precisao | cut -d: -f7
Exemplo:
/bin/bash
Se retornar algo como:
/sbin/nologin
ou:
/usr/sbin/nologin
significa que a conta normalmente não deve fazer login interativo.
Verificar home do usuário
getent passwd precisao | cut -d: -f6
Exemplo:
/home/precisao
Listar usuários humanos
Em muitas distribuições, usuários humanos começam com UID 1000 ou maior. O livro também apresenta essa convenção: UID/GID 0 para root, 1-999 para contas de sistema/serviço e 1000+ para usuários humanos.
getent passwd | awk -F: '$3 >= 1000 { print $1, $3, $6, $7 }'
Saída exemplo:
joao 1000 /home/joao /bin/bash
maria 1001 /home/maria /bin/bash
Listar contas com shell interativo
getent passwd | awk -F: '$7 ~ /(bash|sh|zsh|fish)$/ { print $1, $7 }'
Exemplo:
root /bin/bash
joao /bin/bash
maria /bin/zsh
Listar contas com nologin
getent passwd | awk -F: '$7 ~ /nologin|false/ { print $1, $7 }'
Exemplo:
nginx /sbin/nologin
mysql /sbin/nologin
Verificar se grupo existe
getent group docker
Com script:
grupo="docker"
if getent group "$grupo" > /dev/null; then
echo "Grupo $grupo existe"
else
echo "Grupo $grupo não existe"
fi
Verificar membros de um grupo
getent group docker
Exemplo:
docker:x:999:joao,maria
Para mostrar apenas os membros:
getent group docker | cut -d: -f4
Validar se usuário está em determinado grupo
usuario="joao"
grupo="docker"
if getent group "$grupo" | grep -qw "$usuario"; then
echo "$usuario está no grupo $grupo"
else
echo "$usuario não está no grupo $grupo"
fi
Verificar se uma porta existe na base de serviços
getent services ssh
Ou:
getent services 22/tcp
Dependendo da distribuição, consultar pelo nome costuma ser mais confiável.
Verificar resolução de nome
getent hosts servidor01
Se retornar IP, o sistema conseguiu resolver.
Com script:
host="servidor01"
if getent hosts "$host" > /dev/null; then
echo "$host resolve corretamente"
else
echo "$host não resolveu"
fi
Bases mais usadas no dia a dia
| Situação | Comando |
|---|---|
| Ver se usuário existe | getent passwd usuario |
| Ver UID do usuário | getent passwd usuario | cut -d: -f3 |
| Ver shell do usuário | getent passwd usuario | cut -d: -f7 |
| Ver home do usuário | getent passwd usuario | cut -d: -f6 |
| Ver se grupo existe | getent group grupo |
| Ver membros do grupo | getent group grupo |
| Ver se host resolve | getent hosts nome |
| Ver porta de serviço | getent services ssh |
| Ver senha/expiração | sudo getent shadow usuario |
getent com LDAP, AD ou SSSD
Em ambientes integrados com LDAP, Active Directory ou SSSD, o getent ajuda a validar se o sistema está conseguindo enxergar usuários e grupos externos.
Exemplo:
getent passwd usuario.dominio
Ou:
getent group grupo.dominio
Se não retornar nada, pode indicar problema em:
- configuração do SSSD
- conexão com LDAP/AD
- DNS
- Kerberos
- permissões de consulta
/etc/nsswitch.conf- cache local
Comandos úteis para investigar:
cat /etc/nsswitch.conf
systemctl status sssd
sss_cache -E
id usuario
Diferença entre getent e id
O id mostra informações de identidade de um usuário, como UID, GID e grupos.
id joao
Exemplo:
uid=1001(joao) gid=1001(joao) groups=1001(joao),999(docker)
O getent passwd joao mostra o registro cadastral do usuário:
getent passwd joao
Exemplo:
joao:x:1001:1001:Joao Silva:/home/joao:/bin/bash
Uso prático:
| Comando | Melhor para |
|---|---|
getent passwd usuario | Ver se o usuário existe e consultar cadastro |
getent group grupo | Ver grupo e membros declarados |
id usuario | Ver UID, GID e grupos efetivos do usuário |
Diferença entre getent group e groups
getent group docker
Mostra o cadastro do grupo docker.
groups joao
Mostra os grupos aos quais o usuário joao pertence.
Em alguns cenários com grupos primários, LDAP ou SSSD, olhar apenas getent group grupo pode não mostrar tudo que você espera. Para validar a associação real do usuário, use também:
id joao
Cuidados importantes
Não use apenas cat /etc/passwd se o ambiente usa LDAP, AD ou SSSD.
Prefira:
getent passwd usuario
Não use apenas cat /etc/group para validar grupo em ambiente corporativo.
Prefira:
getent group grupo
Para validar permissões reais de um usuário, combine:
getent passwd usuario
id usuario
groups usuario
Para validar login, shell e home:
getent passwd usuario
Para validar senha, bloqueio e expiração:
sudo getent shadow usuario
chage -l usuario
Exemplos de auditoria rápida
Usuários com shell interativo
getent passwd | awk -F: '$7 ~ /(bash|sh|zsh|fish)$/ { print $1 ":" $7 }'
Usuários com UID maior ou igual a 1000
getent passwd | awk -F: '$3 >= 1000 { print $1 ":" $3 ":" $6 ":" $7 }'
Usuários sem home em /home
getent passwd | awk -F: '$3 >= 1000 && $6 !~ /^\/home\// { print $1 ":" $6 }'
Usuários com shell nologin
getent passwd | awk -F: '$7 ~ /nologin|false/ { print $1 ":" $7 }'
Grupos sem membros explícitos
getent group | awk -F: '$4 == "" { print $1 }'
Verificar se grupo docker existe e quem está nele
getent group docker
Script simples de validação de usuário
#!/bin/bash
usuario="$1"
if [ -z "$usuario" ]; then
echo "Uso: $0 <usuario>"
exit 1
fi
if ! getent passwd "$usuario" > /dev/null; then
echo "[ERRO] Usuário não existe: $usuario"
exit 1
fi
linha_usuario=$(getent passwd "$usuario")
uid=$(echo "$linha_usuario" | cut -d: -f3)
gid=$(echo "$linha_usuario" | cut -d: -f4)
home=$(echo "$linha_usuario" | cut -d: -f6)
shell=$(echo "$linha_usuario" | cut -d: -f7)
echo "Usuário: $usuario"
echo "UID: $uid"
echo "GID: $gid"
echo "Home: $home"
echo "Shell: $shell"
echo
echo "Grupos:"
id "$usuario"
echo
echo "Validações:"
if [ "$uid" -eq 0 ]; then
echo "[ALERTA] Usuário possui UID 0"
fi
if [[ "$shell" =~ nologin|false ]]; then
echo "[INFO] Usuário não possui shell interativo"
else
echo "[INFO] Usuário possui shell interativo: $shell"
fi
if [ ! -d "$home" ]; then
echo "[ALERTA] Diretório home não existe: $home"
else
echo "[OK] Diretório home existe"
fi
Uso:
chmod +x valida-usuario.sh
./valida-usuario.sh joao
Quando usar getent
Use getent quando precisar consultar informações do sistema respeitando a configuração real de resolução do Linux.
Casos comuns:
- validar se um usuário existe
- validar se um grupo existe
- verificar UID e GID
- verificar shell de login
- verificar diretório home
- validar membros de grupos
- testar resolução de nomes
- consultar portas conhecidas
- validar integração com LDAP, AD ou SSSD
- criar scripts de auditoria mais confiáveis
Comandos essenciais
getent passwd
getent passwd usuario
getent group
getent group grupo
sudo getent shadow usuario
getent hosts nome
getent services ssh
getent protocols tcp
Resumo operacional
| Quero saber | Comando |
|---|---|
| Usuário existe? | getent passwd usuario |
| Grupo existe? | getent group grupo |
| Qual UID do usuário? | getent passwd usuario | cut -d: -f3 |
| Qual GID primário? | getent passwd usuario | cut -d: -f4 |
| Qual home? | getent passwd usuario | cut -d: -f6 |
| Qual shell? | getent passwd usuario | cut -d: -f7 |
| Quais membros do grupo? | getent group grupo |
| Host resolve? | getent hosts nome |
| Qual porta do serviço? | getent services servico |
| Conta está bloqueada? | sudo getent shadow usuario |