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 UIDTipo de Usuário
0Superusuário (root)
1 - 999Usuá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:

CampoExemploDescrição
Nome de loginfernandoNome do usuário para login no sistema
Senhaxx indica que a senha está no /etc/shadow
UID1000Identificador numérico do usuário
GID1000Identificador numérico do grupo primário
GECOSFernando DiasInformações adicionais (nome completo, telefone, etc.)
Diretório home/home/fernandoCaminho do diretório pessoal do usuário
Shell/bin/bashShell 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:

CampoExemploDescrição
Nome de loginfernandoNome do usuário (deve corresponder ao /etc/passwd)
Senha hash$6$xyz123$aB3d...Senha criptografada com hash
Última alteração19750Dias desde 01/01/1970 até a última troca de senha
Mínimo0Dias mínimos entre trocas de senha
Máximo99999Dias máximos de validade da senha
Aviso7Dias 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:

PrefixoAlgoritmo
$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
CampoExemploDescrição
Nome do gruposudoNome do grupo
SenhaxSenha do grupo (raramente utilizada)
GID27Identificador numérico do grupo
Membrosfernando,franciscoLista 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árioUID típicoDescrição
root0Superusuário com acesso total ao sistema
daemon1Processos gerais do sistema
bin2Proprietário de binários do sistema
sys3Proprietário de arquivos do sistema
nobody65534Usuário sem privilégios (usado por alguns serviços)
www-data33Servidor web (Apache/Nginx)
mysql27Servidor de banco de dados MySQL/MariaDB
sshd74Daemon do servidor SSH
postfix89Servidor 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çãoDescrição
-mCria o diretório home do usuário
-d /caminhoDefine o caminho do diretório home
-s /shellDefine o shell padrão do usuário
-c "comentário"Define o campo GECOS (nome completo, etc.)
-G grupo1,grupo2Adiciona o usuário a grupos suplementares
-g grupoDefine o grupo primário do usuário
-u UIDDefine um UID específico
-e AAAA-MM-DDDefine a data de expiração da conta
-rCria um usuário do sistema (UID na faixa do sistema)
-k /skelDefine 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ísticauseraddadduser (Debian/Ubuntu)
TipoBinário de baixo nívelScript wrapper de alto nível
InteratividadeNão interativoInterativo (solicita informações)
Cria diretório homeApenas com a opção -mCria automaticamente
Define senhaRequer passwd separadoSolicita durante a criação
PortabilidadeDisponível em todas as distrosPrincipalmente 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çãoDescrição
-a usuárioAdiciona um usuário ao grupo
-d usuárioRemove um usuário do grupo
-A usuárioDefine o administrador do grupo
-M user1,user2Define 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)
ComandoDescrição
useraddCria um novo usuário
adduserCria um novo usuário (interativo, Debian/Ubuntu)
usermodModifica propriedades de um usuário
userdelRemove um usuário
deluserRemove um usuário (interativo, Debian/Ubuntu)
passwdDefine ou altera a senha de um usuário
chageGerencia políticas de expiração de senha
groupaddCria um novo grupo
groupmodModifica propriedades de um grupo
groupdelRemove um grupo
gpasswdGerencia membros e senhas de grupos
idExibe UID, GID e grupos de um usuário
whoamiExibe o nome do usuário atual
groupsExibe os grupos de um usuário
getentConsulta bancos de dados do sistema (passwd, group)
newgrpAltera o grupo primário ativo na sessão