Usuários e grupos
Esta aula aborda o gerenciamento de usuários e grupos no Linux, incluindo comandos essenciais como whoami, id e sudo, além de uma visão geral do arquivo /etc/passwd. O conteúdo é prático e voltado para scripts shell que precisam identificar ou alternar o usuário em execução.
Em sistemas Linux, cada processo é executado no contexto de um usuário e de um ou mais grupos. Entender como identificar e alterar o usuário atual é fundamental para escrever scripts seguros e que realizem operações com privilégios adequados. Nesta aula, exploraremos os conceitos básicos de usuários e grupos, comandos para consultar a identidade do usuário, o uso do sudo para elevação de privilégios e a estrutura do arquivo /etc/passwd.
Dominar esses tópicos permite que você escreva scripts que se adaptem ao ambiente de execução, verifiquem permissões e executem tarefas administrativas de forma controlada.
Conceitos
No Linux, cada usuário possui um identificador numérico único chamado UID (User ID). De forma similar, grupos possuem um GID (Group ID). Os usuários podem pertencer a um grupo primário e a vários grupos suplementares. As permissões de arquivos e processos são baseadas nesses identificadores.
O superusuário (root) tem UID 0 e possui privilégios totais. Scripts que precisam executar operações restritas geralmente verificam se estão sendo executados como root ou utilizam o sudo para obter privilégios temporários.
whoami e id
O comando whoami exibe o nome do usuário atual. Já o comando id fornece informações mais detalhadas: UID, GID e grupos aos quais o usuário pertence. Esses comandos são frequentemente usados em scripts para verificar o contexto de execução.
#!/bin/bash
echo "Você é: $(whoami)"
echo "Informações completas:"
id
A saída do id tem formato como uid=1000(joao) gid=1000(joao) grupos=1000(joao),4(adm),27(sudo). É possível extrair campos específicos com opções como id -u (UID) e id -g (GID).
sudo
O comando sudo permite executar comandos com os privilégios de outro usuário, geralmente root. Para usá-lo, o usuário precisa estar no arquivo /etc/sudoers ou em um grupo como sudo ou wheel. Em scripts, é comum usar sudo para comandos que exigem permissões elevadas.
#!/bin/bash
# Verifica se o script está sendo executado como root
if [[ $EUID -ne 0 ]]; then
echo "Este script precisa ser executado como root. Tentando sudo..."
exec sudo "$0" "$@"
exit 1
fi
echo "Agora sou root: $(whoami)"
É importante usar sudo com cuidado para evitar brechas de segurança. Sempre valide se o script realmente precisa de privilégios elevados e evite executar scripts inteiros como root quando apenas alguns comandos exigem.
/etc/passwd (visão geral)
O arquivo /etc/passwd armazena informações básicas de cada conta de usuário. Cada linha representa um usuário e possui sete campos separados por dois-pontos: nome de usuário, senha (normalmente 'x' indicando que a senha está em /etc/shadow), UID, GID, comentário (GECOS), diretório home e shell padrão.
Exemplo de linha: joao:x:1000:1000:João Silva:/home/joao:/bin/bash. Scripts podem ler esse arquivo para obter informações sobre usuários, mas é recomendável usar comandos como getent passwd para consultas mais seguras e compatíveis com NSS.
#!/bin/bash
# Lista todos os usuários com UID >= 1000 (usuários comuns)
awk -F: '$3 >= 1000 { print $1 }' /etc/passwd
Nota: O campo senha atualmente não contém a senha criptografada; ela fica em /etc/shadow, acessível apenas por root.
Boas práticas e observações finais
Sempre verifique o usuário atual antes de executar operações que exigem privilégios. Use $EUID ou id -u para obter o UID de forma confiável. Evite hardcodar nomes de usuário; prefira consultar o sistema. Lembre-se de que o uso excessivo de sudo pode mascarar problemas de permissão.
Exercícios
-
Exercício 1: Escreva um script que exiba o nome do usuário atual e seu UID.
✓ Resposta:
#!/bin/bash echo "Usuário: $(whoami)" echo "UID: $(id -u)" -
Exercício 2: Crie um script que verifique se o usuário atual é root (UID 0) e, se não for, exiba uma mensagem de erro e saia com código 1.
✓ Resposta:
#!/bin/bash if [[ $EUID -ne 0 ]]; then echo "Erro: Este script deve ser executado como root." >&2 exit 1 fi echo "Root confirmado." -
Exercício 3: Escreva um script que, usando
id, exiba todos os grupos aos quais o usuário atual pertence.✓ Resposta:#!/bin/bash echo "Grupos: $(id -Gn)" # ou, um por linha: id -nG | tr ' ' '\n' -
Exercício 4: Crie um script que use
sudopara listar o conteúdo do diretório /root (que normalmente só root pode ler). O script deve verificar se o usuário tem permissão sudo.✓ Resposta:#!/bin/bash if sudo -n true 2>/dev/null; then sudo ls -la /root else echo "Você não tem permissão sudo." >&2 exit 1 fi -
Exercício 5: Escreva um script que leia o arquivo /etc/passwd e exiba o nome de usuário e o diretório home de todos os usuários com UID maior ou igual a 1000.
✓ Resposta:
#!/bin/bash awk -F: '$3 >= 1000 { print $1, $6 }' /etc/passwd