Gerenciar Contas de Usuário Linux com useradd, usermod e userdel

CompTIABeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá as habilidades essenciais para gerenciar contas de usuário em um sistema Linux. Você praticará o ciclo de vida completo da administração de usuários, desde a criação e proteção de novas contas até a modificação de suas propriedades e, por fim, a exclusão segura. Esta experiência prática é fundamental para qualquer administrador de sistemas responsável por manter um ambiente Linux multiusuário.

Você começará usando o comando useradd para criar um novo usuário e seu diretório pessoal (home), protegendo a conta em seguida com o comando passwd. Depois, explorará as diferenças entre su e su - para alternar entre usuários e aprenderá como bloquear e desbloquear contas. Você também modificará atributos de usuário, como políticas de expiração de senha com o chage e associações a grupos com o usermod. O laboratório termina demonstrando como remover corretamente um usuário e seus dados associados usando o comando userdel.

Este é um Laboratório Guiado, que fornece instruções passo a passo para ajudá-lo a aprender e praticar. Siga as instruções cuidadosamente para concluir cada etapa e ganhar experiência prática. Dados históricos mostram que este é um laboratório de nível iniciante com uma taxa de conclusão de 82%. Ele recebeu uma taxa de avaliação positiva de 100% dos alunos.

Criar e Proteger um Usuário com useradd e passwd

Nesta etapa, você aprenderá como criar uma nova conta de usuário usando o comando useradd e, em seguida, protegê-la definindo uma senha com o comando passwd. Estas são tarefas administrativas fundamentais para o gerenciamento de um sistema Linux.

Primeiro, vamos criar um novo usuário chamado student1. O comando useradd requer privilégios de root para criar usuários, portanto, você precisará preceder o comando com sudo.

Execute o seguinte comando no seu terminal:

sudo useradd -m student1

A opção -m é importante; ela instrui o useradd a criar o diretório home do usuário, que será /home/student1 por padrão. Se você não usar -m, o usuário será criado, mas não terá um diretório pessoal para armazenar seus arquivos.

Após executar o comando, o sistema cria entradas para o novo usuário em vários arquivos críticos do sistema. Você pode verificar isso usando o comando grep para procurar linhas que comecem com student1 nos arquivos /etc/passwd, /etc/shadow e /etc/group. Como o /etc/shadow requer privilégios de root para leitura, você deve usar sudo:

sudo grep ^student1 /etc/passwd /etc/shadow /etc/group

Sua saída deve ser semelhante a esta. Os números de ID de Usuário (UID) e ID de Grupo (GID) podem variar, mas a estrutura será a mesma:

/etc/passwd:student1:x:5001:5001::/home/student1:/bin/sh
/etc/shadow:student1:!:20265:0:99999:7:::
/etc/group:student1:x:5001:

Vamos detalhar essa saída:

  • /etc/passwd: Este arquivo contém informações básicas da conta do usuário. O x no segundo campo indica que a senha criptografada não está armazenada aqui, mas sim no arquivo /etc/shadow por questões de segurança.
  • /etc/shadow: Este arquivo contém informações seguras da conta do usuário. O segundo campo conterá inicialmente ! ou *, indicando que nenhuma senha foi definida ainda e a conta não pode ser usada para login.
  • /etc/group: Um novo grupo, também chamado student1, foi criado automaticamente para ser o grupo primário deste usuário.

Agora que o usuário existe, você precisa definir uma senha para tornar a conta utilizável e segura. Usaremos o comando passwd para isso. Assim como o useradd, ele requer sudo ao alterar a senha de outro usuário.

sudo passwd student1

O sistema solicitará que você digite e depois redigite uma nova senha para student1. Para este laboratório, use student1pass como senha. Observe que, por motivos de segurança, o que você digitar não será exibido na tela.

New password:
Retype new password:
passwd: password updated successfully

Com a senha definida, vamos verificar o arquivo /etc/shadow novamente para ver o que mudou. Como o /etc/shadow exige privilégios de root, use sudo:

sudo grep ^student1 /etc/shadow

A saída agora será diferente. O marcador ... representa uma sequência longa e única de caracteres.

student1:$y$j9T$lUM1RtLPQdrCOHmaFf1po/$xqNw.5dz54yR9whxsID9teI28/BOyvKocK5dA9X7GoD:20265:0:99999:7:::

Observe que o segundo campo agora contém uma string longa e complexa. Esta é a versão em hash (criptografada) da senha que você acabou de definir. A conta agora está ativa e pode ser usada para login.

Alternar Usuários e Entender Diferenças de Ambiente com su vs su -

Nesta etapa, você explorará como alternar para outra conta de usuário dentro da sua sessão de terminal atual usando o comando su (substitute user). Você também aprenderá a diferença crítica entre usar su com e sem a flag - (ou --login), o que afeta significativamente o ambiente do usuário.

Primeiro, vamos examinar seu ambiente atual como o usuário labex. Execute estes comandos para ver seu usuário atual, diretório home e diretório de trabalho:

whoami
echo $HOME
pwd

Você verá a seguinte saída, confirmando que você é o usuário labex no diretório do seu projeto:

labex
/home/labex
/home/labex/project

Agora, vamos alternar para o usuário student1 que você criou na etapa anterior. Use o comando su seguido pelo nome de usuário. Será solicitada a senha do student1, que você definiu como student1pass.

su student1

Após inserir a senha, sua sessão agora está operando com a identidade de student1. No entanto, o ambiente não foi totalmente carregado. Vamos executar os mesmos comandos novamente para ver o que mudou e o que não mudou.

whoami
echo $HOME
pwd

Observe a saída:

student1
/home/student1
/home/labex/project

O que isso nos diz:

  • whoami: Você agora é efetivamente o student1.
  • echo $HOME: A variável de ambiente HOME agora aponta para o diretório home do novo usuário (student1).
  • pwd: Você ainda está no mesmo diretório em que estava antes de trocar de usuário (/home/labex/project).

Esse comportamento pode ser problemático porque scripts e aplicativos podem depender da variável HOME para encontrar arquivos de configuração, levando a comportamentos inesperados.

Agora, digite exit para retornar ao shell do seu usuário labex.

exit

Em seguida, vamos tentar alternar de usuário novamente, mas desta vez com a flag -. Esta flag diz ao su para iniciar um shell de login, o que simula um login completo para o novo usuário. Isso significa que ele carregará o ambiente completo do student1, incluindo seu diretório home e perfil de shell.

su - student1

Digite a senha (student1pass) novamente. Agora, execute o mesmo conjunto de comandos de diagnóstico:

whoami
echo $HOME
pwd

Compare a saída com a tentativa anterior:

student1
/home/student1
/home/student1

As diferenças são significativas:

  • whoami: Você ainda é o student1.
  • echo $HOME: A variável HOME aponta para /home/student1 (igual ao su).
  • pwd: Seu diretório de trabalho atual foi alterado para o diretório home do student1.

Isso demonstra que su - <username> é a maneira recomendada de alternar usuários na linha de comando, pois fornece um ambiente limpo e previsível para o novo usuário, evitando problemas com caminhos e permissões incorretos.

Para finalizar esta etapa, digite exit para retornar à sua sessão original do labex.

exit

Bloquear e Desbloquear Contas de Usuário com passwd -l e passwd -u

Nesta etapa, você aprenderá como desativar temporariamente uma conta de usuário bloqueando-a e, em seguida, reativá-la desbloqueando-a. Esta é uma prática administrativa comum para situações em que você precisa impedir que um usuário faça login sem excluir sua conta e seus arquivos.

Primeiro, vamos bloquear a conta student1. Para fazer isso, use o comando passwd com a opção -l (lock). Esta ação requer privilégios administrativos, portanto, você deve usar sudo.

sudo passwd -l student1

O comando confirmará que a senha foi bloqueada. A mensagem de saída pode variar ligeiramente, mas indica sucesso.

passwd: password for user student1 changed.

Mas o que o "bloqueio" realmente faz? Vamos inspecionar o arquivo /etc/shadow novamente para ver o efeito.

sudo grep ^student1 /etc/shadow

Você notará uma mudança sutil, mas importante. A string da senha criptografada agora está prefixada com um ou dois pontos de exclamação (!). O marcador ... representa o restante do seu hash exclusivo.

student1:!$y$j9T$...:20265:0:99999:7:::

Este prefixo ! invalida o hash da senha armazenada, tornando impossível para o sistema corresponder a qualquer senha que o usuário forneça. Como resultado, o usuário não consegue fazer login. Vamos testar isso. Tente alternar para o usuário student1:

su - student1

Será solicitada uma senha, mas mesmo que você digite a correta (student1pass), o login falhará.

Password:
su: Authentication failure

Isso confirma que a conta foi bloqueada com sucesso. Agora, vamos desbloqueá-la. Para reativar a conta, basta reverter o processo usando a opção -u (unlock) com o comando passwd.

sudo passwd -u student1

Novamente, o comando confirmará a alteração.

passwd: password for user student1 changed.

Vamos verificar o arquivo /etc/shadow uma última vez para confirmar que a conta está desbloqueada.

sudo grep ^student1 /etc/shadow

A saída mostra que o prefixo ! foi removido, restaurando o hash da senha original.

student1:$y$j9T$...:20265:0:99999:7:::

A conta agora está ativa novamente. Você pode confirmar isso alternando com sucesso para o usuário student1. Digite a senha student1pass quando solicitado.

su - student1

Você deve estar logado como student1. Por fim, digite exit para retornar à sua sessão labex.

exit

Modificar a Expiração de Senha e a Associação a Grupos com chage e usermod

Nesta etapa, você gerenciará propriedades de usuário mais avançadas. Você aprenderá como aplicar políticas de segurança de senha usando o chage para controlar a expiração da senha e como gerenciar as associações de grupo de um usuário usando o usermod para controlar suas permissões e direitos de acesso.

Primeiro, vamos examinar as informações de expiração de senha para a conta student1. O comando chage (change age) com a flag -l (list) exibe esses detalhes.

sudo chage -l student1

A saída mostrará as configurações padrão para a conta. As datas corresponderão a quando você criou o usuário.

Last password change     : Dec 08, 2024
Password expires     : never
Password inactive     : never
Account expires      : never
Minimum number of days between password change  : 0
Maximum number of days between password change  : 99999
Number of days of warning before password expires : 7

Por segurança, é uma boa prática exigir que os usuários alterem suas senhas periodicamente. Vamos definir uma política onde a senha deve ser alterada a cada 90 dias (-M 90), só pode ser alterada uma vez a cada 7 dias (-m 7) e o usuário recebe um aviso 14 dias antes de expirar (-W 14).

sudo chage -M 90 -m 7 -W 14 student1

Agora, visualize as configurações novamente para confirmar suas alterações:

sudo chage -l student1

A saída refletirá a nova política:

Last password change     : Dec 08, 2024
Password expires     : Mar 08, 2025
Password inactive     : never
Account expires      : never
Minimum number of days between password change  : 7
Maximum number of days between password change  : 90
Number of days of warning before password expires : 14

Em seguida, vamos modificar as associações a grupos. Um usuário pertence a um grupo primário e pode pertencer a vários grupos secundários (ou suplementares). Você pode visualizar os grupos de um usuário com o comando id.

id student1
uid=5001(student1) gid=5001(student1) groups=5001(student1)

Isso mostra que o grupo primário do student1 é student1 (gid=5001) e ele ainda não está em nenhum grupo secundário.

Vamos criar um novo grupo chamado developers e adicionar o student1 a ele. Primeiro, crie o grupo:

sudo groupadd developers

Agora, adicione o student1 a este novo grupo usando o usermod. As flags -aG são cruciais: -G especifica os grupos secundários e -a (append) anexa o usuário ao grupo sem removê-lo de outros grupos.

sudo usermod -aG developers student1

Verifique os grupos do usuário novamente:

id student1

A saída agora inclui o grupo developers:

uid=5001(student1) gid=5001(student1) groups=5001(student1),1002(developers)

O que acontece se você esquecer a flag -a? Vamos criar outro grupo, testers, e adicionar o student1 a ele usando apenas -G.

sudo groupadd testers
sudo usermod -G testers student1

Agora verifique os grupos mais uma vez:

id student1
uid=5001(student1) gid=5001(student1) groups=5001(student1),1003(testers)

Observe que o student1 não está mais no grupo developers. Usar usermod -G sem -a substitui todos os grupos secundários existentes pela nova lista. Para ter o usuário em ambos os grupos, você deve listar todos os grupos (-G developers,testers) ou usar a flag de anexo. Vamos corrigir isso adicionando novamente o student1 ao grupo developers corretamente.

sudo usermod -aG developers student1

Verifique o estado final. O usuário deve agora ser membro de ambos os grupos.

id student1
uid=5001(student1) gid=5001(student1) groups=5001(student1),1003(testers),1002(developers)

Excluir Usuários e Seus Dados com userdel e userdel -r

Nesta etapa, você aprenderá como remover permanentemente contas de usuário do sistema usando o comando userdel. Você verá a distinção importante entre simplesmente excluir as informações da conta de um usuário e excluir a conta junto com todos os seus arquivos associados, como o diretório home.

Primeiro, para demonstrar ambos os métodos de exclusão, vamos criar um segundo usuário chamado student2.

sudo useradd -m student2

Agora você tem dois usuários para trabalhar: student1 (das etapas anteriores) e o novo student2.

Vamos começar excluindo o usuário student1 sem nenhuma opção especial. O comando userdel padrão remove as entradas do usuário dos arquivos de conta do sistema, como /etc/passwd e /etc/shadow, mas não remove seu diretório home. Isso pode ser útil se você precisar arquivar os dados do usuário antes de removê-los totalmente.

sudo userdel student1

Para confirmar que a conta do usuário foi removida, tente usar o grep no arquivo /etc/passwd.

grep ^student1 /etc/passwd

Este comando não produzirá saída, o que confirma que a entrada da conta do usuário foi excluída. No entanto, e quanto ao seu diretório home? Vamos verificar se o /home/student1 ainda existe.

ls -ld /home/student1

Você verá que o diretório ainda está lá, embora o proprietário agora seja exibido como um número (o antigo UID do usuário) porque o sistema não consegue mais mapear esse ID para um nome de usuário.

drwxr-x--- 2 5001 5001 78 Jun 26 08:18 /home/student1

Agora, vamos excluir o usuário student2, mas desta vez usaremos a flag -r (remove). Esta opção instrui o userdel a remover o diretório home do usuário e o spool de e-mail, além de suas entradas de conta. Esta é uma exclusão completa e irreversível.

sudo userdel -r student2

Você pode ver uma mensagem de aviso sobre o spool de e-mail não ser encontrado, o que é normal, já que o usuário nunca recebeu e-mails:

userdel: student2 mail spool (/var/mail/student2) not found

Este aviso não indica um erro — significa apenas que não havia arquivo de spool de e-mail para excluir, o que é esperado para um usuário recém-criado.

Primeiro, verifique se a entrada da conta desapareceu do /etc/passwd. Como antes, este comando não deve retornar saída.

grep ^student2 /etc/passwd

Em seguida, e mais importante, verifique a existência do diretório home /home/student2.

ls -ld /home/student2

Desta vez, o comando falhará com uma mensagem de erro, provando que o diretório foi completamente removido junto com a conta do usuário.

ls: cannot access '/home/student2': No such file or directory

Você praticou com sucesso ambos os métodos para excluir usuários, o que lhe dá a flexibilidade de preservar ou apagar permanentemente os dados de um usuário conforme necessário.

Resumo

Neste laboratório, você aprendeu os comandos fundamentais para gerenciar contas de usuário em um sistema Linux. Você começou criando um novo usuário com useradd -m, garantindo que um diretório home também fosse criado, e depois protegeu a conta definindo uma senha com passwd. Você praticou a alternância entre usuários usando tanto su quanto su -, aprendendo a diferença crítica entre um ambiente de shell padrão e um de login. Você também aprendeu como gerenciar o acesso à conta bloqueando-a e desbloqueando-a com as opções -l e -u do comando passwd.

O laboratório continuou com a modificação de atributos de usuários existentes. Você usou o chage para gerenciar políticas de expiração de senha e o usermod para alterar as associações de grupo de um usuário. Por fim, explorou o processo de remoção de usuários do sistema, distinguindo entre o comando userdel, que remove a conta do usuário, e o comando userdel -r, que também exclui o diretório home do usuário e o spool de e-mail para uma limpeza completa.