08 nov 2026 · linux, usuarios, permissoes · 4 min
Como criar usuário e grupo e dar acesso a uma pasta
Criar o usuário é a parte fácil; o que quebra produção é a pasta que ninguém do grupo consegue escrever, ou o contrário, todo mundo escreve. A receita que funciona é um grupo, uma pasta com dono root:grupo e modo 2770, mais setgid para o grupo ser herdado nos arquivos novos. Testado num contêiner limpo: alice, do grupo, cria arquivo; bob, fora do grupo, recebe “Permission denied”.
O que cada parte resolve
groupaddcria o grupo que vai compartilhar a pasta.useradd -G grupocoloca o usuário no grupo sem tirar dos outros.chown root:grupo pastadefine quem é o dono e qual grupo acessa.chmod 2770 pastadá leitura, escrita e execução ao dono e ao grupo, nada aos outros, e liga o bit setgid.- O setgid (
2na frente) faz todo arquivo novo na pasta herdar o grupo da pasta, não o grupo primário do usuário que criou.
Sem o setgid, alice cria arquivo com grupo alice e bob, mesmo no grupo dev, não consegue editar. Esse é o erro mais comum.
Antes de rodar
Confira se o grupo já existe com getent group dev. Se o usuário já existir, o script não recria, só adiciona ao grupo. Isso evita perder home ou chave SSH. Em servidor com LDAP ou SSSD, useradd pode conflitar com usuários de rede; nesse caso use a base de usuários da sua infraestrutura ou adapte o script.
Como aplicar sem relogar
Depois de adicionar o usuário ao grupo, a sessão atual não vê a mudança. Use newgrp dev para abrir um shell com o grupo ativo, ou faça logout e login de novo. Em script de provisionamento, rode os comandos de teste já com sg dev -c '...'.
O artefato
#!/bin/bash
set -euo pipefail
GROUP=dev
FOLDER=/srv/projeto
USERS=(alice bob)
if ! getent group "$GROUP" >/dev/null; then
groupadd "$GROUP"
fi
for u in "${USERS[@]}"; do
if ! id -u "$u" >/dev/null 2>&1; then
useradd -m -s /bin/bash -G "$GROUP" "$u"
else
usermod -aG "$GROUP" "$u"
fi
done
mkdir -p "$FOLDER"
chown root:"$GROUP" "$FOLDER"
chmod 2770 "$FOLDER"
mkdir -p /etc/sudoers.d
cat > /etc/sudoers.d/90-"$GROUP" <<'EOF'
%dev ALL=(root) NOPASSWD: /usr/bin/systemctl restart app.service, /usr/bin/journalctl -u app.service
EOF
chmod 0440 /etc/sudoers.d/90-"$GROUP"
if command -v visudo >/dev/null 2>&1; then
visudo -cf /etc/sudoers.d/90-"$GROUP"
fi
echo "Pronto. Grupo $GROUP, pasta $FOLDER (2770), sudoers em /etc/sudoers.d/90-$GROUP."
Rode como root. Mude GROUP, FOLDER e USERS no topo. Os usuários existentes entram no grupo sem perder os grupos atuais, por causa do -a no usermod.
Como verificar
ls -ld /srv/projeto
su - alice -c 'touch /srv/projeto/teste.txt'
ls -l /srv/projeto/teste.txt
su - bob -c 'touch /srv/projeto/bob.txt' # deve falhar
Saída esperada: pasta com drwxrws--- e dono root:dev; arquivo de alice com grupo dev; bob recebe “Permission denied”.
Se der errado
- Usuário não consegue escrever na pasta. Causa: usuário não está no grupo ou a sessão não foi reaberta. Correção:
usermod -aG grupo usuarioe faça login de novo; grupos são lidos no login. - Arquivo criado tem grupo do usuário, não da pasta. Causa: bit setgid não está ligado. Correção:
chmod g+s pastaouchmod 2770 pasta. - sudoers quebrou o sudo. Causa: sintaxe errada no arquivo. Correção: edite com
visudoe valide comvisudo -cf /etc/sudoers.d/90-dev; o script já valida sevisudoexistir.
Usuário, grupo ou sudo
| Precisa | Use | Observação |
|---|---|---|
| Compartilhar pasta entre pessoas | Grupo + pasta 2770 | Setgid resolve a herança |
| Dar permissão a um usuário só | setfacl -m u:usuario:rwx pasta |
ACL, mais fino que grupo |
| Permitir comando específico como root | sudoers escopado | Nunca %grupo ALL=(ALL) ALL |
| Criar usuário de serviço | useradd -r -s /usr/sbin/nologin |
Sem shell, sem home |
FAQ
Preciso de root? Sim, para criar usuários e mudar dono de pasta. O sudoers do script permite apenas restart e journalctl do serviço, não virar root livre.
Como remover um usuário do grupo? gpasswd -d usuario grupo ou deluser usuario grupo.
O que é o bit setgid em pasta? Faz arquivos novos herdarem o grupo da pasta. Em arquivo comum tem outro significado (execução com grupo), mas em pasta é herança.
Como auditar quem está no grupo? getent group dev lista os membros; groups usuario mostra os grupos de uma conta. Em auditoria, compare com a lista esperada.
O que muda com ACL? Com setfacl você dá permissão a um usuário ou grupo específico sem criar grupo novo. Use quando o compartilhamento for pontual; para equipe, grupo é mais simples de auditar.
Posso usar o mesmo script para vários projetos? Sim. Duplique a pasta e o grupo, ou use ACL se quiser compartilhar a mesma pasta com grupos diferentes.
Por que não dar sudo total ao grupo? Porque quem invade uma conta do grupo vira root. Escopo mínimo: só os comandos que o trabalho exige.
Fontes
Leia também: permissões em detalhe, rodar contêiner sem root, serviço próprio no systemd e cron do jeito certo.