Usuários e Grupos no Linux
O Linux é um sistema operacional multiusuário, o que significa que múltiplos usuários podem utilizar o sistema simultaneamente, cada um com suas próprias permissões, arquivos e configurações. O gerenciamento de usuários e grupos é uma das tarefas fundamentais da administração de sistemas Linux.
Todo processo em execução no Linux pertence a um usuário, e todo arquivo no sistema possui um dono e um grupo associado. Essa estrutura é a base do modelo de permissões do Linux e garante o isolamento e a segurança entre os diferentes usuários do sistema.
Identificadores de Usuários e Grupos
Section titled “Identificadores de Usuários e Grupos”Cada usuário no Linux é identificado internamente por um número chamado UID (User ID), e cada grupo por um GID (Group ID). Embora utilizemos nomes como root ou fernando no dia a dia, o kernel do Linux trabalha internamente apenas com esses números.
UID - User ID
Section titled “UID - User ID”O UID é um número inteiro único atribuído a cada usuário do sistema. Ele determina as permissões e o nível de acesso do usuário.
| Faixa de UID | Tipo de Usuário |
|---|---|
0 | Superusuário (root) |
1 - 999 | Usuários do sistema (serviços e daemons) |
1000+ | Usuários regulares (pessoas) |
Para verificar o UID do usuário atual:
# Exibe o UID, GID e grupos do usuário atualid
# Saída exemplo:uid=1000(fernando) gid=1000(fernando) grupos=1000(fernando),27(sudo),100(users)Para verificar apenas o UID:
id -u# 1000
id -u root# 0GID - Group ID
Section titled “GID - Group ID”O GID funciona de forma semelhante ao UID, mas para grupos. Quando um usuário é criado, normalmente um grupo com o mesmo nome e GID correspondente é criado automaticamente — esse é chamado de grupo primário do usuário.
# Exibe apenas o GID do usuário atualid -g# 1000
# Exibe todos os grupos do usuárioid -G# 1000 27 100
# Exibe os nomes dos gruposid -Gn# fernando sudo usersArquivos de Configuração de Usuários
Section titled “Arquivos de Configuração de Usuários”As informações sobre usuários e grupos no Linux são armazenadas em arquivos de texto localizados no diretório /etc. Os principais são: /etc/passwd, /etc/shadow, /etc/group e /etc/gshadow.
/etc/passwd - Informações dos Usuários
Section titled “/etc/passwd - Informações dos Usuários”O arquivo /etc/passwd contém as informações básicas de todas as contas de usuários do sistema. Apesar do nome, este arquivo não armazena senhas (nas implementações modernas). Ele é legível por todos os usuários do sistema.
Cada linha representa um usuário e possui 7 campos separados por : (dois pontos):
nome:senha:UID:GID:GECOS:diretório_home:shellExemplo de uma entrada:
fernando:x:1000:1000:Fernando Dias:/home/fernando:/bin/bashDetalhamento dos campos:
| Campo | Exemplo | Descrição |
|---|---|---|
| Nome de login | fernando | Nome do usuário para login no sistema |
| Senha | x | x indica que a senha está no /etc/shadow |
| UID | 1000 | Identificador numérico do usuário |
| GID | 1000 | Identificador numérico do grupo primário |
| GECOS | Fernando Dias | Informações adicionais (nome completo, telefone, etc.) |
| Diretório home | /home/fernando | Caminho do diretório pessoal do usuário |
| Shell | /bin/bash | Shell padrão executado no login |
Para visualizar as informações do seu próprio usuário:
grep $USER /etc/passwdO campo GECOS (General Electric Comprehensive Operating Supervisor) é um campo de informações opcionais que pode conter o nome completo, número da sala, telefone comercial, telefone residencial e outros dados, separados por vírgulas:
fernando:x:1000:1000:Fernando Dias,Sala 101,1234-5678,9876-5432:/home/fernando:/bin/bash/etc/shadow - Senhas Criptografadas
Section titled “/etc/shadow - Senhas Criptografadas”O arquivo /etc/shadow armazena as senhas criptografadas dos usuários e informações relacionadas à política de senhas. Este arquivo é legível apenas pelo root, proporcionando uma camada extra de segurança.
Cada linha possui 9 campos separados por ::
nome:senha_hash:última_alteração:mín:máx:aviso:inativo:expiração:reservadoExemplo:
fernando:$6$xyz123$aB3d...:19750:0:99999:7:::Detalhamento dos campos:
| Campo | Exemplo | Descrição |
|---|---|---|
| Nome de login | fernando | Nome do usuário (deve corresponder ao /etc/passwd) |
| Senha hash | $6$xyz123$aB3d... | Senha criptografada com hash |
| Última alteração | 19750 | Dias desde 01/01/1970 até a última troca de senha |
| Mínimo | 0 | Dias mínimos entre trocas de senha |
| Máximo | 99999 | Dias máximos de validade da senha |
| Aviso | 7 | Dias antes da expiração para avisar o usuário |
| Inativo | (vazio) | Dias após expiração em que a conta ainda é acessível |
| Expiração | (vazio) | Data de expiração da conta (dias desde 01/01/1970) |
| Reservado | (vazio) | Campo reservado para uso futuro |
O campo de senha hash segue o formato $algoritmo$salt$hash:
| Prefixo | Algoritmo |
|---|---|
$1$ | MD5 |
$5$ | SHA-256 |
$6$ | SHA-512 (mais comum) |
$y$ | yescrypt (padrão moderno) |
Para consultar informações de expiração de senha de um usuário:
# Exige privilégios de rootsudo chage -l fernandoSaída exemplo:
Última mudança de senha : Jan 15, 2025Senha expira : nuncaSenha inativa : nuncaConta expira : nuncaNúmero mínimo de dias entre mudança de senha : 0Número máximo de dias entre mudança de senha : 99999Número de dias de aviso antes da senha expirar : 7/etc/group - Informações dos Grupos
Section titled “/etc/group - Informações dos Grupos”O arquivo /etc/group contém a definição de todos os grupos do sistema. Cada linha possui 4 campos:
nome_grupo:senha:GID:membrosExemplo:
sudo:x:27:fernando,francisco| Campo | Exemplo | Descrição |
|---|---|---|
| Nome do grupo | sudo | Nome do grupo |
| Senha | x | Senha do grupo (raramente utilizada) |
| GID | 27 | Identificador numérico do grupo |
| Membros | fernando,francisco | Lista de usuários membros, separados por vírgula |
# Listar todos os grupos do sistemacat /etc/group
# Ver os grupos de um usuário específicogroups fernando
# Buscar um grupo específicogetent group sudo/etc/gshadow - Senhas de Grupos
Section titled “/etc/gshadow - Senhas de Grupos”Semelhante ao /etc/shadow, o arquivo /etc/gshadow armazena senhas criptografadas para grupos e informações sobre administradores de grupo. Este arquivo é legível apenas pelo root.
nome_grupo:senha_hash:administradores:membrosNa prática, senhas de grupo são raramente utilizadas na administração moderna de sistemas Linux.
Usuários do Sistema
Section titled “Usuários do Sistema”Além dos usuários regulares (pessoas que fazem login), o Linux possui usuários do sistema (system accounts). Esses usuários são criados para executar serviços e daemons de forma isolada, seguindo o princípio do menor privilégio.
Alguns exemplos comuns de usuários do sistema:
| Usuário | UID típico | Descrição |
|---|---|---|
root | 0 | Superusuário com acesso total ao sistema |
daemon | 1 | Processos gerais do sistema |
bin | 2 | Proprietário de binários do sistema |
sys | 3 | Proprietário de arquivos do sistema |
nobody | 65534 | Usuário sem privilégios (usado por alguns serviços) |
www-data | 33 | Servidor web (Apache/Nginx) |
mysql | 27 | Servidor de banco de dados MySQL/MariaDB |
sshd | 74 | Daemon do servidor SSH |
postfix | 89 | Servidor de e-mail Postfix |
Características dos usuários do sistema:
- Possuem UIDs na faixa de
1a999 - Geralmente não possuem senha definida
- O shell padrão é comumente
/usr/sbin/nologinou/bin/false, impedindo login interativo - Podem não ter diretório home ou ter um diretório específico do serviço (como
/var/lib/mysql) - São criados automaticamente durante a instalação de pacotes de software
# Verificar o shell de um usuário do sistemagetent passwd www-data
# Listar todos os usuários do sistema (UID < 1000)awk -F: '$3 < 1000 { print $1, $3 }' /etc/passwdGerenciamento de Usuários
Section titled “Gerenciamento de Usuários”Criando Usuários
Section titled “Criando Usuários”O principal comando para criar usuários no Linux é o useradd. Ele cria a conta do usuário com as configurações especificadas.
# Criar um usuário com configurações padrãosudo useradd joao
# Criar um usuário com opções personalizadassudo useradd -m -d /home/joao -s /bin/bash -c "João Silva" -G sudo,users joaoOpções mais utilizadas do useradd:
| Opção | Descrição |
|---|---|
-m | Cria o diretório home do usuário |
-d /caminho | Define o caminho do diretório home |
-s /shell | Define o shell padrão do usuário |
-c "comentário" | Define o campo GECOS (nome completo, etc.) |
-G grupo1,grupo2 | Adiciona o usuário a grupos suplementares |
-g grupo | Define o grupo primário do usuário |
-u UID | Define um UID específico |
-e AAAA-MM-DD | Define a data de expiração da conta |
-r | Cria um usuário do sistema (UID na faixa do sistema) |
-k /skel | Define o diretório skeleton personalizado |
Após criar o usuário, defina uma senha:
sudo passwd joaoadduser vs useradd
Section titled “adduser vs useradd”Em distribuições baseadas em Debian/Ubuntu, existe também o comando adduser, que é um wrapper interativo em torno do useradd. Ele guia o administrador pelo processo de criação, criando automaticamente o diretório home e solicitando a senha.
# Modo interativo — solicita senha, nome completo, etc.sudo adduser francisco| Característica | useradd | adduser (Debian/Ubuntu) |
|---|---|---|
| Tipo | Binário de baixo nível | Script wrapper de alto nível |
| Interatividade | Não interativo | Interativo (solicita informações) |
| Cria diretório home | Apenas com a opção -m | Cria automaticamente |
| Define senha | Requer passwd separado | Solicita durante a criação |
| Portabilidade | Disponível em todas as distros | Principalmente Debian/Ubuntu |
Modificando Usuários
Section titled “Modificando Usuários”O comando usermod permite alterar as propriedades de um usuário existente.
# Alterar o shell padrãosudo usermod -s /bin/zsh joao
# Alterar o nome completo (GECOS)sudo usermod -c "João P. Silva" joao
# Adicionar o usuário a um grupo suplementar (sem remover dos atuais)sudo usermod -aG docker joao
# Alterar o diretório home (e mover os arquivos)sudo usermod -d /home/joao_novo -m joao
# Bloquear a conta de um usuáriosudo usermod -L joao
# Desbloquear a contasudo usermod -U joao
# Definir data de expiração da contasudo usermod -e 2025-12-31 joaoRemovendo Usuários
Section titled “Removendo Usuários”O comando userdel remove uma conta de usuário do sistema.
# Remover apenas o usuário (mantém o diretório home)sudo userdel joao
# Remover o usuário e seu diretório homesudo userdel -r joaoEm distribuições Debian/Ubuntu, o deluser funciona como um wrapper semelhante ao adduser:
# Remover usuário e seu diretório homesudo deluser --remove-home joao
# Remover usuário e fazer backup dos arquivossudo deluser --backup --remove-home joaoGerenciamento de Grupos
Section titled “Gerenciamento de Grupos”Criando Grupos
Section titled “Criando Grupos”O comando groupadd cria novos grupos no sistema.
# Criar um gruposudo groupadd desenvolvedores
# Criar um grupo com GID específicosudo groupadd -g 2000 projeto_x
# Criar um grupo do sistema (GID na faixa do sistema)sudo groupadd -r app_serviceModificando Grupos
Section titled “Modificando Grupos”O comando groupmod altera as propriedades de um grupo existente.
# Alterar o nome do gruposudo groupmod -n devops desenvolvedores
# Alterar o GID do gruposudo groupmod -g 2500 devopsAdicionando e Removendo Membros de Grupos
Section titled “Adicionando e Removendo Membros de Grupos”# Adicionar um usuário a um grupo (usando usermod)sudo usermod -aG desenvolvedores joao
# Adicionar usando gpasswdsudo gpasswd -a joao desenvolvedores
# Remover um usuário de um gruposudo gpasswd -d joao desenvolvedoresO comando gpasswd é especialmente útil para gerenciar a associação de membros a grupos:
| Opção | Descrição |
|---|---|
-a usuário | Adiciona um usuário ao grupo |
-d usuário | Remove um usuário do grupo |
-A usuário | Define o administrador do grupo |
-M user1,user2 | Define a lista completa de membros do grupo |
Removendo Grupos
Section titled “Removendo Grupos”# Remover um gruposudo groupdel desenvolvedoresGrupo Primário vs Grupos Suplementares
Section titled “Grupo Primário vs Grupos Suplementares”Cada usuário no Linux possui um grupo primário e pode pertencer a vários grupos suplementares.
-
Grupo primário: Definido no
/etc/passwd(campo GID). Quando o usuário cria um arquivo, o grupo proprietário do arquivo será o grupo primário do usuário. Geralmente, o grupo primário tem o mesmo nome do usuário (User Private Group — UPG). -
Grupos suplementares: Definidos no
/etc/group. Concedem permissões adicionais ao usuário sem alterar a propriedade padrão dos arquivos criados.
# Ver grupo primárioid -gn fernando# fernando
# Ver todos os grupos (primário + suplementares)id -Gn fernando# fernando sudo users docker
# Alterar temporariamente o grupo primário ativo (na sessão atual)newgrp desenvolvedoresConfigurações Padrão
Section titled “Configurações Padrão”O arquivo /etc/login.defs contém configurações padrão para a criação de usuários e políticas de senha no sistema. Alguns parâmetros importantes:
# Faixa de UIDs para usuários regularesUID_MIN 1000UID_MAX 60000
# Faixa de UIDs para usuários do sistemaSYS_UID_MIN 201SYS_UID_MAX 999
# Política de senhasPASS_MAX_DAYS 99999 # Validade máxima da senha (dias)PASS_MIN_DAYS 0 # Dias mínimos entre trocasPASS_WARN_AGE 7 # Dias de aviso antes da expiração
# Criação do diretório homeCREATE_HOME yes
# Algoritmo de criptografia de senhasENCRYPT_METHOD YESCRYPTOutra fonte de configurações padrão é o arquivo /etc/default/useradd, que define valores usados pelo comando useradd:
# Visualizar configurações padrão do useradduseradd -DGROUP=100HOME=/homeINACTIVE=-1EXPIRE=SHELL=/bin/shSKEL=/etc/skelCREATE_MAIL_SPOOL=noComandos de Consulta Úteis
Section titled “Comandos de Consulta Úteis”# Verificar informações completas do usuário atualid
# Exibir o nome do usuário atualwhoami
# Listar usuários logados no sistemawhow
# Exibir todos os usuários regulares (UID >= 1000)awk -F: '$3 >= 1000 && $3 < 65534 { print $1, $3 }' /etc/passwd
# Exibir todos os grupos de um usuáriogroups fernando
# Verificar se um usuário existeid joao 2>/dev/null && echo "Existe" || echo "Não existe"
# Contar total de usuários no sistemawc -l < /etc/passwd
# Exibir último login dos usuárioswtmpdb last
# Exibir informações do GECOS de um usuáriofinger fernando # (pode requerer instalação do pacote finger)Resumo dos Comandos
Section titled “Resumo dos Comandos”| Comando | Descrição |
|---|---|
useradd | Cria um novo usuário |
adduser | Cria um novo usuário (interativo, Debian/Ubuntu) |
usermod | Modifica propriedades de um usuário |
userdel | Remove um usuário |
deluser | Remove um usuário (interativo, Debian/Ubuntu) |
passwd | Define ou altera a senha de um usuário |
chage | Gerencia políticas de expiração de senha |
groupadd | Cria um novo grupo |
groupmod | Modifica propriedades de um grupo |
groupdel | Remove um grupo |
gpasswd | Gerencia membros e senhas de grupos |
id | Exibe UID, GID e grupos de um usuário |
whoami | Exibe o nome do usuário atual |
groups | Exibe os grupos de um usuário |
getent | Consulta bancos de dados do sistema (passwd, group) |
newgrp | Altera o grupo primário ativo na sessão |
Saiba mais
Section titled “Saiba mais”- man useradd - Manual do comando useradd
- man usermod - Manual do comando usermod
- man passwd(5) - Formato do arquivo /etc/passwd
- man shadow(5) - Formato do arquivo /etc/shadow
- man login.defs - Configurações de login