Skip to content

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.

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.

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:

Terminal window
# Exibe o UID, GID e grupos do usuário atual
id
# Saída exemplo:
uid=1000(fernando) gid=1000(fernando) grupos=1000(fernando),27(sudo),100(users)


Para verificar apenas o UID:

Terminal window
id -u
# 1000
id -u root
# 0

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.

Terminal window
# Exibe apenas o GID do usuário atual
id -g
# 1000
# Exibe todos os grupos do usuário
id -G
# 1000 27 100
# Exibe os nomes dos grupos
id -Gn
# fernando sudo users

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.


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:shell

Exemplo de uma entrada:

fernando:x:1000:1000:Fernando Dias:/home/fernando:/bin/bash

Detalhamento 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:

Terminal window
grep $USER /etc/passwd

O 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

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:reservado

Exemplo:

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:

Terminal window
# Exige privilégios de root
sudo chage -l fernando

Saída exemplo:

Última mudança de senha : Jan 15, 2025
Senha expira : nunca
Senha inativa : nunca
Conta expira : nunca
Número mínimo de dias entre mudança de senha : 0
Número máximo de dias entre mudança de senha : 99999
Número de dias de aviso antes da senha expirar : 7

O arquivo /etc/group contém a definição de todos os grupos do sistema. Cada linha possui 4 campos:

nome_grupo:senha:GID:membros

Exemplo:

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 |

Terminal window
# Listar todos os grupos do sistema
cat /etc/group
# Ver os grupos de um usuário específico
groups fernando
# Buscar um grupo específico
getent group sudo

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:membros

Na prática, senhas de grupo são raramente utilizadas na administração moderna de sistemas Linux.

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 1 a 999
  • Geralmente não possuem senha definida
  • O shell padrão é comumente /usr/sbin/nologin ou /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
Terminal window
# Verificar o shell de um usuário do sistema
getent passwd www-data
# Listar todos os usuários do sistema (UID < 1000)
awk -F: '$3 < 1000 { print $1, $3 }' /etc/passwd

O principal comando para criar usuários no Linux é o useradd. Ele cria a conta do usuário com as configurações especificadas.

Terminal window
# Criar um usuário com configurações padrão
sudo useradd joao
# Criar um usuário com opções personalizadas
sudo useradd -m -d /home/joao -s /bin/bash -c "João Silva" -G sudo,users joao

Opçõ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:

Terminal window
sudo passwd joao

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.

Terminal window
# 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 |

O comando usermod permite alterar as propriedades de um usuário existente.

Terminal window
# Alterar o shell padrão
sudo 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ário
sudo usermod -L joao
# Desbloquear a conta
sudo usermod -U joao
# Definir data de expiração da conta
sudo usermod -e 2025-12-31 joao

O comando userdel remove uma conta de usuário do sistema.

Terminal window
# Remover apenas o usuário (mantém o diretório home)
sudo userdel joao
# Remover o usuário e seu diretório home
sudo userdel -r joao

Em distribuições Debian/Ubuntu, o deluser funciona como um wrapper semelhante ao adduser:

Terminal window
# Remover usuário e seu diretório home
sudo deluser --remove-home joao
# Remover usuário e fazer backup dos arquivos
sudo deluser --backup --remove-home joao

O comando groupadd cria novos grupos no sistema.

Terminal window
# Criar um grupo
sudo groupadd desenvolvedores
# Criar um grupo com GID específico
sudo groupadd -g 2000 projeto_x
# Criar um grupo do sistema (GID na faixa do sistema)
sudo groupadd -r app_service

O comando groupmod altera as propriedades de um grupo existente.

Terminal window
# Alterar o nome do grupo
sudo groupmod -n devops desenvolvedores
# Alterar o GID do grupo
sudo groupmod -g 2500 devops
Terminal window
# Adicionar um usuário a um grupo (usando usermod)
sudo usermod -aG desenvolvedores joao
# Adicionar usando gpasswd
sudo gpasswd -a joao desenvolvedores
# Remover um usuário de um grupo
sudo gpasswd -d joao desenvolvedores

O 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 |

Terminal window
# Remover um grupo
sudo groupdel desenvolvedores

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.

Terminal window
# Ver grupo primário
id -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 desenvolvedores

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:

Terminal window
# Faixa de UIDs para usuários regulares
UID_MIN 1000
UID_MAX 60000
# Faixa de UIDs para usuários do sistema
SYS_UID_MIN 201
SYS_UID_MAX 999
# Política de senhas
PASS_MAX_DAYS 99999 # Validade máxima da senha (dias)
PASS_MIN_DAYS 0 # Dias mínimos entre trocas
PASS_WARN_AGE 7 # Dias de aviso antes da expiração
# Criação do diretório home
CREATE_HOME yes
# Algoritmo de criptografia de senhas
ENCRYPT_METHOD YESCRYPT

Outra fonte de configurações padrão é o arquivo /etc/default/useradd, que define valores usados pelo comando useradd:

Terminal window
# Visualizar configurações padrão do useradd
useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/sh
SKEL=/etc/skel
CREATE_MAIL_SPOOL=no
Terminal window
# Verificar informações completas do usuário atual
id
# Exibir o nome do usuário atual
whoami
# Listar usuários logados no sistema
who
w
# 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ário
groups fernando
# Verificar se um usuário existe
id joao 2>/dev/null && echo "Existe" || echo "Não existe"
# Contar total de usuários no sistema
wc -l < /etc/passwd
# Exibir último login dos usuários
wtmpdb last
# Exibir informações do GECOS de um usuário
finger fernando # (pode requerer instalação do pacote finger)

| 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 |