Aproveitando o clima de sexta-feira, aqui vai uma dica rápida sobre o gerenciamento de usuários via linha de comando no Linux, incluindo algumas dicas e detalhes que você talvez ainda não conheça.
Embora desenvolvido de forma independente, o Linux é um sistema Unix, que herda os recursos multiusário desenvolvidos desde os primeiros sistemas Unix, usados nas décadas de 70 e 80. Isso permite que o sistema seja usado por inúmeros usuários simultâneamente, sem que um atrapalhe as atividades do outro, nem que possa alterar seus arquivos. Dois exemplos extremos seriam um servidor LTSP, onde dezenas de usuários podem rodar aplicativos simultâneamente, através de terminais burros conectados ao servidor principal via rede e um servidor web de shared hosting, que pode hospedar milhares de sites diferentes, cada um administrado por um usuário diferente.
As restrições básicas de acesso são implementadas através de um sistema de permissões simples, porém eficiente, que consiste num conjunto de três permissões de acesso (ler, gravar e executar) e três grupos (dono, grupo e outros), que combinadas permitem fazer muita coisa.
Os dois comandos mais básicos são o “adduser” e o “passwd”, que permitem, respectivamente adicionar novos usuários e alterar as senhas de acesso posteriormente, como em:
(cria o usuário joao, especificando uma senha inicial)
(altera a senha posteriormente)
O próprio usuário pode alterar a senha usando o comando “passwd”, desde que ele saiba a senha antiga. Se o usuário esqueceu a senha, você pode definir uma nova executando o comando como root; nesse caso o sistema pede a nova senha diretamente, sem solicitar a senha antiga.
Os usuários são cadastrados no sistema através do arquivo “/etc/passwd”. Se tiver curiosidade em olhar dentro do arquivo você verá uma entrada para cada usuário, incluindo o diretório home e o sheel usado, como em:
As senhas são salvas de forma encriptada em um arquivo separado, o “/etc/shadow”. Dentro do arquivo você verá entradas contendo a senha encriptada, como em:
As senhas são encriptadas usando um algoritmo de mão única, que permite apenas encriptar as senhas, mas não recuperá-las. Durante o login, o sistema aplica o mesmo algoritmo à senha digitada pelo usuário; se o resultado (depois de aplicado o algoritmo) for o mesmo armazenado no arquivo, o sistema sabe que a senha confere e o acesso é autorizado. Este sistema faz com que as senhas não sejam recuperáveis. Se o usuário esqueceu a senha, você pode usar o comando “passwd” para definir uma nova, mas não é possível recuperar a senha antiga.
Ferramentas como o John the ripper permitem descobrir as senhas armazenadas no arquivo “/etc/shadow” usando um ataque de força bruta, que consiste em simplesmente testar todas as possibilidades (incluindo alguns refinamentos, como descobrir senhas fáceis, baseadas em palavras do dicionário) até descobrir a senha. Este método funciona bem em senhas fáceis, com até 6 caracteres, mas é inviável no caso de boas senhas, com 8 caracteres ou mais.
A senha referente ao usuário “joao”, que usei como exemplo, poderia ser descoberta rapidamente. Baixe o programa no https://www.openwall.com/john/ (ou instale-o usando o apt-get/yum) e tente descobrir qual é 🙂
Continuando, para remover um usuário anteriormente criado, utilize o comando “deluser”, como em:
Por questão de segurança, o comando remove apenas a conta, sem apagar o diretório home, ou outras pastas (como o diretório de spool dos e-mails). O diretório home é especialmente importante, pois ele guarda todas as configurações e os arquivos do usuário, de forma que em um servidor você só deve removê-lo depois de ter realmente certeza do que está fazendo. Para remover o usuário apagando também o diretório home, adicione o parâmetro “–remove-home”, como em:
Como comentei, o diretório home é importante, por concentrar todos os arquivos do usuário. Uma opção saudável ao removê-lo é criar um backup, de forma que você possa restaurá-lo mais tarde caso necessário. Para isso, use a opção “–backup”, que cria um arquivo compactado, contendo os arquivos do usuário, salvo no diretório onde o comando for executado:
Se executasse o comando “ls” depois de remover o usuário “joao” usando a opção de backup, veria que foi criado o arquivo “joao.tar.bz2”, referente ao backup.
Você também pode bloquear temporariamente um usuário, sem remover o home ou qualquer outro arquivo usando o comando “passwd -l”, como em:
O “passwd -l” realmente trava a conta, fazendo com que o sistema passe a recursar qualquer senha inserida na hora do login. Para desbloquear a conta posteriormente, use o “passwd -u”, como em:
O Fedora e o CentOS incluem o system-config-users, um utilitário gráfico de administração de usuários. Uma versão levemente modificada dele pode ser encontrada no Ubuntu e em outras versões baseadas no Debian, na forma do “users-admin”, que faz parte do pacote “gnome-system-tools”.