>_ josetilabs.com
← blog

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

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

bash
#!/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

bash
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”.

Terminal com dois painéis: a pasta /srv/projeto tem modo 2770 e dono root:dev; o arquivo criado por alice tem grupo dev e modo 664, e bob recebe Permission denied
Pasta compartilhada e teste de acesso. Alice escreve, bob é barrado, e o grupo é herdado.

Se der errado

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.

Leia também

// Por e-mail

Os textos publicados aqui também vão por e-mail. O envio ainda não começou: quem deixar o endereço agora entra na primeira lista.

Guardo só o seu e-mail, a data e o registro desta autorização. Sem cookies, sem rastreador e nada compartilhado com terceiros. Detalhes na política de privacidade.