Usuários e grupos
Esta aula aborda os conceitos de usuários e grupos no Linux, comandos para identificar o usuário atual (whoami, id), o uso seguro do sudo, e uma visão geral do arquivo /etc/passwd. O conteúdo é prático e voltado para scripts shell.
No Linux, todo processo é executado por um usuário, e cada usuário pertence a um ou mais grupos. Entender como gerenciar usuários e grupos é essencial para controle de permissões e segurança em scripts shell. Nesta aula, você aprenderá a identificar o usuário atual, executar comandos como superusuário e interpretar o arquivo que armazena informações básicas dos usuários.
Esses conceitos são fundamentais para escrever scripts que precisam verificar privilégios, alternar contextos de execução ou gerenciar permissões de arquivos e diretórios.
Conceitos
Usuário é uma entidade que pode executar processos e possuir arquivos. Cada usuário tem um identificador numérico único (UID). Grupos são coleções de usuários que compartilham permissões; cada grupo tem um GID. Um usuário pode pertencer a múltiplos grupos: o grupo primário (definido em /etc/passwd) e grupos suplementares (definidos em /etc/group).
As permissões de arquivos (leitura, escrita, execução) são definidas para o proprietário, para o grupo proprietário e para outros. Scripts frequentemente precisam verificar se o usuário atual tem privilégios suficientes para realizar operações sensíveis.
whoami e id
O comando whoami exibe o nome do usuário atual. Já o comando id mostra informações detalhadas: UID, GID primário e todos os grupos suplementares. Esses comandos são úteis para scripts que precisam adaptar seu comportamento conforme o usuário que os executa.
#!/bin/bash
echo "Você é: $(whoami)"
echo "Detalhes:"
idExemplo de saída do id:
uid=1000(aluno) gid=1000(aluno) groups=1000(aluno),4(adm),27(sudo)Você pode extrair partes específicas com opções como id -u (UID), id -g (GID primário) e id -G (todos os GIDs).
sudo
sudo permite executar comandos como outro usuário, normalmente root. É controlado pelo arquivo /etc/sudoers. Em scripts, use sudo com cuidado: verifique se o script não exige senha interativa (use sudo -n para não interativo) e evite expor senhas.
#!/bin/bash
# Verifica se o usuário tem permissão sudo
if sudo -n true 2>/dev/null; then
echo "Tem acesso sudo"
else
echo "Sem acesso sudo"
fiPara garantir que um script seja executado com privilégios elevados, muitas vezes se usa:
if [ "$EUID" -ne 0 ]; then
echo "Por favor, execute como root."
exit 1
fiMas cuidado: $EUID é uma variável interna do Bash que indica o UID efetivo.
/etc/passwd (visão geral)
O arquivo /etc/passwd armazena informações básicas de cada usuário do sistema. Cada linha tem 7 campos separados por dois-pontos:
- nome de usuário
- senha (geralmente 'x' indicando que está em /etc/shadow)
- UID
- GID do grupo primário
- descrição (GECOS)
- diretório home
- shell padrão
Exemplo de linha:
aluno:x:1000:1000:Aluno,,,:/home/aluno:/bin/bashScripts podem ler esse arquivo para obter informações, mas evite modificar diretamente; use comandos como useradd, usermod, etc.
#!/bin/bash
# Lista todos os usuários e seus UIDs
cut -d: -f1,3 /etc/passwdBoas práticas
- Sempre verifique o ID do usuário antes de executar operações críticas.
- Use
sudocom-nem scripts para evitar prompts de senha. - Não hardcode senhas; use variáveis de ambiente ou arquivos seguros.
- Prefira comandos de gerenciamento (useradd, groupadd) a editar manualmente /etc/passwd.
Referências
Exercícios
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)"Crie um script que verifique se o usuário atual é root (UID 0) e exiba uma mensagem apropriada.
✓ Resposta:#!/bin/bash if [ "$EUID" -eq 0 ]; then echo "Você é root." else echo "Você não é root." fiEscreva um script que liste todos os grupos suplementares do usuário atual (excluindo o primário).
✓ Resposta:#!/bin/bash # Obtém o GID primário primary_gid=$(id -g) # Lista todos os GIDs e remove o primário id -G | tr ' ' '\n' | grep -v "^$primary_gid$" | while read gid; do getent group "$gid" | cut -d: -f1 doneUse o comando
sudo -npara verificar se o usuário pode executar um comando como root sem senha. Exiba "sim" ou "não".✓ Resposta:#!/bin/bash if sudo -n true 2>/dev/null; then echo "sim" else echo "não" fiEscreva um script que use
/etc/passwdpara listar todos os usuários que têm shell/bin/bash.✓ Resposta:#!/bin/bash grep '/bin/bash$' /etc/passwd | cut -d: -f1