Skip to main content

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

BaseO que consultaExemplo
passwdUsuários do sistemagetent passwd
groupGrupos do sistemagetent group
shadowSenhas e expiraçãosudo getent shadow
hostsResolução de nomesgetent hosts servidor01
servicesServiços e portasgetent services ssh
protocolsProtocolos de redegetent protocols tcp
networksRedes conhecidasgetent networks
aliasesAliases de e-mailgetent 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
CampoDescrição
usuarioNome do usuário
senhaNormalmente aparece como x, pois a senha real fica no /etc/shadow
UIDID do usuário
GIDID do grupo primário
comentarioCampo GECOS, geralmente nome completo ou descrição
homeDiretório home
shellShell 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
CampoDescrição
grupoNome do grupo
senhaCampo legado, normalmente x
GIDID do grupo
membrosUsuá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:

CampoDescrição
UsuárioNome da conta
Hash da senhaSenha criptografada ou marcador de bloqueio
Última alteraçãoDias desde 01/01/1970
MínimoDias mínimos para trocar senha
MáximoDias máximos para trocar senha
AvisoDias de aviso antes de expirar
InatividadeDias após expiração até desativar
Expiração da contaData 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çãoComando
Ver se usuário existegetent passwd usuario
Ver UID do usuáriogetent passwd usuario | cut -d: -f3
Ver shell do usuáriogetent passwd usuario | cut -d: -f7
Ver home do usuáriogetent passwd usuario | cut -d: -f6
Ver se grupo existegetent group grupo
Ver membros do grupogetent group grupo
Ver se host resolvegetent hosts nome
Ver porta de serviçogetent services ssh
Ver senha/expiraçãosudo 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:

ComandoMelhor para
getent passwd usuarioVer se o usuário existe e consultar cadastro
getent group grupoVer grupo e membros declarados
id usuarioVer 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 saberComando
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