Voltar ao Diminua Blog

Artigo

Dominando o Arquivo `/etc/passwd`: Um Guia Completo para Usuários e Administradores Linux

Explore a estrutura, o conteúdo e as implicações de segurança do arquivo mais fundamental para a gestão de usuários no Linux.

Dominando o Arquivo `/etc/passwd`: Um Guia Completo para Usuários e Administradores Linux

O Coração da Gestão de Usuários no Linux: Entendendo `/etc/passwd`

No universo do Linux, a gestão de usuários é uma tarefa fundamental para a segurança e a organização do sistema. Um dos arquivos mais cruciais para essa gestão é o /etc/passwd. Longe de ser apenas uma lista de nomes, este arquivo armazena informações vitais sobre cada conta de usuário no sistema, incluindo detalhes técnicos que, quando compreendidos, podem otimizar a administração e reforçar a segurança. Neste artigo, vamos desmistificar o /etc/passwd, explorando sua estrutura, seu conteúdo e as melhores práticas para sua manipulação.

Estrutura do Arquivo `/etc/passwd`: Cada Linha, Um Campo

O arquivo /etc/passwd é um arquivo de texto simples, onde cada linha representa um usuário do sistema e é dividida em sete campos separados por dois pontos (:). Vamos detalhar cada um desses campos:

  • Nome de login (username): O identificador único do usuário.
  • Senha (password): Tradicionalmente, este campo continha o hash da senha do usuário. No entanto, por razões de segurança, em sistemas modernos, este campo geralmente contém um caractere x, indicando que o hash da senha real está armazenado em um arquivo separado e mais protegido (/etc/shadow).
  • UID (User ID): Um número único que identifica o usuário para o sistema. O UID 0 é reservado para o superusuário (root).
  • GID (Group ID): O ID do grupo primário ao qual o usuário pertence.
  • Campo GECOS (ou comentário): Informações adicionais sobre o usuário, como nome completo, número de telefone, etc. Geralmente, é usado para armazenar o nome completo do usuário.
  • Diretório home (home directory): O caminho para o diretório pessoal do usuário.
  • Shell de login (login shell): O interpretador de comandos padrão que será executado quando o usuário fizer login. Exemplos comuns incluem /bin/bash, /bin/sh, /bin/zsh ou /sbin/nologin (para contas de sistema que não devem ter acesso interativo).

Um exemplo de linha em /etc/passwd pode parecer com isto:

usuario_exemplo:x:1001:1001:Usuário de Exemplo:/home/usuario_exemplo:/bin/bash

A Importância do Campo de Senha e a Integração com `/etc/shadow`

Como mencionado, o segundo campo, que deveria conter o hash da senha, é hoje um ponto de atenção crucial. A prática de mover os hashes de senha para o arquivo /etc/shadow foi uma evolução significativa na segurança Linux. O arquivo /etc/shadow possui permissões restritas, permitindo que apenas o usuário root o leia. Isso impede que usuários não privilegiados visualizem os hashes de senha, tornando muito mais difícil para um atacante obter informações para quebrar senhas por força bruta.

O formato de cada linha em /etc/shadow também é baseado em campos separados por dois pontos, contendo:

  • Nome de login
  • Hash da senha
  • Data da última alteração da senha
  • Idade mínima da senha
  • Idade máxima da senha
  • Período de aviso para expiração da senha
  • Período de inatividade após expiração da senha
  • Data de expiração da conta
  • Campo reservado

A separação entre /etc/passwd e /etc/shadow é um dos pilares da segurança de contas no Linux.

Visualizando e Manipulando o Arquivo `/etc/passwd` com Segurança

Para visualizar o conteúdo do arquivo /etc/passwd, você pode usar comandos simples como cat ou less:

cat /etc/passwd

less /etc/passwd

Para adicionar um novo usuário, o comando mais recomendado e seguro é o useradd. Ele cuida da criação da entrada em /etc/passwd, /etc/shadow e /etc/group, além de criar o diretório home e definir permissões adequadas. Por exemplo:

sudo useradd -m -s /bin/bash novo_usuario

Onde:

  • sudo é necessário para executar o comando com privilégios de administrador.
  • -m cria o diretório home do usuário.
  • -s /bin/bash define o shell de login para Bash.

Após a criação, é essencial definir uma senha para o novo usuário usando o comando passwd:

sudo passwd novo_usuario

Para remover um usuário, utilize o comando userdel. É altamente recomendável usar a opção -r para remover também o diretório home do usuário:

sudo userdel -r nome_do_usuario

Contas de Sistema e o Shell `/sbin/nologin`

Nem todas as entradas em /etc/passwd representam usuários humanos. Muitos serviços e processos no Linux rodam sob contas de sistema dedicadas. Para essas contas, é uma prática de segurança comum atribuir o shell /sbin/nologin ou /usr/sbin/nologin. Isso impede que essas contas sejam usadas para login interativo, pois o shell simplesmente exibirá uma mensagem informando que a conta não tem permissão para login e encerrará a sessão.

Isso é fundamental para a segurança, pois limita o escopo de ação de processos que possam ter sido comprometidos. Se um serviço rodando sob uma conta de sistema for explorado, o atacante não poderá usá-la para obter um shell interativo e explorar ainda mais o sistema.

Implicações de Segurança e Boas Práticas

O arquivo /etc/passwd, embora não contenha os hashes de senha, ainda é um arquivo público e legível por todos os usuários do sistema. Isso significa que qualquer usuário pode ver a lista de todos os usuários, seus UIDs, GIDs e diretórios home.

Boas práticas incluem:

  • Não edite `/etc/passwd` manualmente a menos que seja absolutamente necessário e você saiba exatamente o que está fazendo. Utilize sempre os comandos useradd, usermod e userdel para gerenciar usuários.
  • Monitore as alterações no arquivo /etc/passwd, assim como em /etc/shadow e /etc/group. Ferramentas de auditoria e sistemas de detecção de intrusão podem ser configurados para alertar sobre modificações inesperadas.
  • Use senhas fortes e incentive os usuários a fazerem o mesmo. A segurança do sistema depende, em grande parte, da força das senhas.
  • Revise periodicamente as contas de usuário, especialmente contas de sistema, para garantir que apenas as necessárias existam e estejam configuradas corretamente.
  • Entenda o propósito das contas de sistema e certifique-se de que seus shells de login são apropriados (geralmente /sbin/nologin).

Para um aprofundamento em como monitorar e gerenciar logs de sistema, incluindo eventos relacionados à criação e exclusão de usuários, consulte nosso artigo sobre Dominando o `systemd-journald`: Análise Profunda de Logs no Linux.

Conclusão

O arquivo /etc/passwd é muito mais do que uma simples lista de usuários. Ele é a espinha dorsal da autenticação e autorização no Linux, contendo metadados essenciais para o funcionamento do sistema. Compreender sua estrutura, a relação com /etc/shadow e as ferramentas corretas para sua manipulação é crucial para qualquer administrador de sistemas ou desenvolvedor que trabalhe com Linux. Ao seguir as boas práticas de segurança e utilizar as ferramentas adequadas, você garante um ambiente mais seguro e eficiente.

Foto de Zulfugar Karimov no Pexels.