Tutoriel Linux

Usuários de Linux: comandos úteis para listar contas e identificar acessos.

Débutant5 min de lecture
À retenirLinux n'est pas réservé aux experts. Le bon point de départ : une distribution accessible, une sauvegarde propre et quelques commandes comprises.

Ao assumir o controle de um servidor Linux, a primeira pergunta nem sempre é “quem está conectado agora?”. A verdadeira questão costuma ser: quais contas ainda existemQuais podem fazer login e quais têm direitos sensíveis.

Ilustração de Tux em frente a um servidor com contas de usuário, uma lupa e cadeados de segurança.
Listar as contas do Linux ajuda a identificar acessos humanos, grupos sensíveis e chaves SSH esquecidas.

Neste guia, vamos listar os usuários de forma organizada, sem pânico. /etc/passwdEm seguida, identifique as contas que precisam ser verificadas primeiro. Deixe-me dizer uma coisa: não exclua nada só porque um nome parece estranho. No Linux, muitas contas são para serviços.

Leia o arquivo /etc/passwd sem confundir a conta do sistema com a conta do usuário.

O arquivo /etc/passwd Lista as contas locais conhecidas. Não contém senhas em texto simples, mas fornece informações úteis: nome da conta, UID, GID, diretório inicial e shell.

cat /etc/passwd

Uma linha tem o seguinte formato:

nathan:x:1000:1000:Nathan Martin:/home/nathan:/bin/bash

Os campos são separados por dois pontos. Para uma primeira olhada, concentre-se no nome, UID, diretório inicial e shell:

cortar -d: -f1,3,6,7 /etc/passwd

Em muitas distribuições, as contas de usuário começam com o UID. milAs contas do sistema geralmente têm um UID menor ou um shell semelhante. /usr/sbin/nologin Ou /bin/falseEssa não é uma regra universal, mas é um bom primeiro filtro.

awk -F: '$3 >= 1000 && $3 < 60000 {print $1, $3, $6, $7}' /etc/passwd

A página de manual do passwd(5) Este documento detalha o formato exato do arquivo. Mantenha-o à mão caso precise auditar um servidor antigo ou uma distribuição um tanto incomum.

Prefira o Getent quando as contas não forem apenas locais.

Em uma posição simples, /etc/passwd Muitas vezes, isso é suficiente. Em um servidor integrado com LDAP, Active Directory, SSSD ou outro diretório, pode estar incompleto. Nesse caso, use getent, que consulta os bancos de dados configurados pelo sistema.

getent passwd

Para verificar uma conta específica:

getent passwd nathan

E para gerar uma lista de contas mais legível com os UIDs dos usuários:

getent passwd | awk -F: '$3 >= 1000 && $3 < 60000 {print $1, $3, $6, $7}'

Prefiro este método em máquinas corporativas porque evita a suposição de que uma conta não existe simplesmente porque não está gravada no arquivo local. O comando está documentado em getent(1).

Verifique grupos e permissões confidenciais

Listar contas é bom. Saber quais delas podem causar danos é melhor ainda. Comece com um usuário específico com eu ia :

id nathan
grupos natan

Você verá o UID, o grupo primário e os grupos secundários. Os grupos que você deve observar com mais atenção dependem da distribuição, mas sudo, roda, administrador, janela de encaixe Ou então, determinados grupos de aplicativos podem fornecer muito mais do que apenas um simples acesso de usuário.

getent grupo sudo
roda do grupo getent
getent grupo docker
administrador do grupo getent

Se uma conta aparecer em sudo Ou rodaVerifique também a configuração do sudoers. Uma conta antiga e esquecida com acesso de administrador é exatamente o tipo de detalhe que pode lhe causar problemas mais tarde. Sobre este ponto, consulte nosso guia para Dominando o sudo no Linux Essa verificação inicial é um bom complemento.

Pedidos id(1) E grupos(1) Elas permanecem simples, mas rapidamente dão uma ideia do escopo real de uma conta.

Identifique as contas que podem fazer login.

Nem todas as contas listadas são para login. Para isolar aquelas com um shell interativo ativo, você pode filtrar os shells:

obter senha | grep -E '/bin/(bash|sh|zsh|peixe)$'

Este filtro não é perfeito, mas fornece uma lista inicial para revisão. Em seguida, verifique se as contas possuem uma pasta pessoal:

getent passwd | awk -F: '$6 ~ /^/home/ {print $1, $6, $7}'
ls -1 /home

Se você estiver auditando um servidor exposto via SSH, verifique também as chaves presentes nos diretórios de usuários:

sudo find /home -maxdepth 3 -path '*/.ssh/authorized_keys' -type f -ls

Uma chave SSH em uma conta incorreta pode ser suficiente para manter o acesso. Se precisar corrigir suas configurações de autenticação, releia também nosso artigo sobre Gerando uma chave SSH no Ubuntu.

Confira as conexões mais recentes sem tirar conclusões precipitadas.

Para ver quem está online agora:

Quem
c

Para história recente:

último -a | cabeça
sudo lastlog | head -30

último registro Isso pode indicar que uma conta nunca foi acessada, mas isso não é suficiente para provar que ela é inútil. Uma conta pode ser usada para um serviço, uma tarefa agendada, um aplicativo ou pode ter sido criada para um procedimento de backup. Use esses comandos como sinais, não como uma decisão automática. A página último log(8) Especifica as opções disponíveis.

Se estiver procurando por alguma anomalia após uma conexão suspeita, complemente essa busca com os registros do sistema:

sudo journalctl -u ssh -b
sudo journalctl -p aviso..alerta -b

Nosso guia para journalctl e os logs da última inicialização Pode ajudar a estruturar essa parte sem precisar pesquisar aleatoriamente.

A pequena lista de verificação que eu usaria antes de limpar.

  • Slug exato da conta Anote o nome, o UID, o diretório inicial e o shell.
  • Grupos sensíveis : controle sudo, roda, janela de encaixe, administrador e grupos de aplicativos.
  • Acesso SSH : procurar arquivos chaves_autorizadas e guarde uma cópia antes de fazer qualquer alteração.
  • Última atividade : cruzar durar, último registro e os jornais, sem os remover com base em uma única pista.
  • Serviço relacionado Verifique se a conta pertence a um serviço ou aplicativo antes de desativá-la.

Se uma conta parecer realmente desnecessária, comece bloqueando-a ou desativando o login, e não excluindo a pasta. Em um servidor, eu sempre prefiro monitorar, testar os serviços e só então fazer uma limpeza. É menos drástico, mas evita que um aplicativo seja afetado porque uma conta "desconhecida" estava sendo usada diariamente.

sudo passwd -l conta_antiga
sudo systemctl --falhou
sudo journalctl -p aviso..alerta -b

Após essa verificação, você terá uma visão muito mais clara: contas humanas, contas do sistema, direitos de administrador, acesso SSH e atividades recentes. Para vincular essa verificação aos serviços ativos, você pode usar a lista de serviços systemctl e veja o que realmente está rodando na máquina.

sudo apt update && sudo apt upgrade