Skip to content

chmod 2775

chmod 2775 define rwxrwsr-x: dono e grupo têm acesso total, os outros leem e entram, e o bit setgid (o s) faz os arquivos e subpastas criados dentro herdarem o grupo do diretório, e não o grupo principal de quem criou.

Matriz de permissões

Quais bits de permissão cada classe tem
QuemLeitura (4)Escrita (2)Execução (1)Dígito
Dono (u)SimSimSim7
Grupo (g)SimSimSim7
Outros (o)SimNãoSim5

Execução muda de sentido conforme o tipo. Num arquivo, deixa o kernel rodá-lo como programa. Num diretório, é a permissão de busca: entrar (cd) e alcançar os arquivos de dentro pelo nome. Leitura num diretório só lista os nomes.

O que cada classe pode fazer com um arquivo e com um diretório
QuemNum arquivoNum diretório
Dono (u)Ler, alterar e executarListar, entrar, criar, apagar e renomear itens
Grupo (g)Ler, alterar e executarListar, entrar, criar, apagar e renomear itens
Outros (o)Ler e executarListar, entrar e abrir itens

Bits especiais deste modo

  • setgid (2000): o programa roda com o grupo do arquivo; num diretório, arquivos e subpastas novos herdam o grupo do diretório.

Dados

Representações deste modo
Octal2775
Simbólicorwxrwsr-x
ls -l, arquivo-rwxrwsr-x
ls -l, diretóriodrwxrwsr-x
Comando simbólico equivalentechmod u=rwx,g=rwxs,o=rx
umask padrão que gera esse modoNenhum dos umasks comuns; defina explicitamente com chmod
Como o Git registra um arquivo assim100755 (executável)
Bits especiaissetgid

Quando usar

  • Pastas de projeto, deploy ou site editadas por várias pessoas do mesmo grupo. Sem setgid, um arquivo criado pela Alice fica com o grupo alice e o Bob não consegue editar.
  • Junto com umask 002 (ou 007), para os arquivos novos também terem escrita para o grupo: o setgid resolve o grupo, o umask resolve o modo.

Quando não usar

  • Em arquivos comuns: setgid num executável faz ele rodar com os privilégios do grupo do arquivo, o que não é o que se quer para dados.
  • Quando os outros não podem ler o projeto: use 2770.

Montando uma pasta compartilhada do zero

O setgid só afeta o que for criado depois dele, então corrija antes o grupo do conteúdo existente. Subpastas criadas depois herdam o próprio bit setgid, então o arranjo se propaga pela árvore.

O chmod do GNU mantém o setgid de um diretório se depois você rodar chmod 775 nele (uma extensão do GNU descrita no manual do coreutils). Tire explicitamente com chmod g-s ou com um modo de cinco dígitos como 00775.

sudo groupadd devs
sudo usermod -aG devs alice    # a alice precisa entrar de novo
sudo chgrp -R devs /srv/projects
# depois, os dois find abaixo aplicam 2775 nos diretórios e 664 nos arquivos

Comandos

Aplicar em um arquivo ou diretório
sudo chmod 2775 /srv/projects
sudo chmod u=rwx,g=rwxs,o=rx /srv/projects   # mesmo resultado
Conferir o resultado
stat -c '%a %A %n' /srv/projects     # Linux (stat do GNU): 2775 drwxrwsr-x
stat -f '%Mp%Lp %Sp %N' /srv/projects   # macOS e BSD

Aplicando numa árvore inteira

O chmod -R colocaria o mesmo modo em arquivos e diretórios. Defina os diretórios como 2775 e os arquivos como 664 separadamente:

sudo find /srv/projects -type d -exec chmod 2775 {} +
sudo find /srv/projects -type f -exec chmod 664 {} +

Perguntas frequentes

O que significa o 2 em chmod 2775?
É o bit setgid (octal 2000). Num diretório ele faz os itens novos herdarem o grupo do diretório; o ls -l mostra um s na posição de execução do grupo.
Por que os arquivos novos da pasta compartilhada ainda saem com a permissão errada?
O setgid resolve o grupo, não o modo. Se os arquivos saem 644, o umask de quem cria é 022; mude para 002 para saírem 664.
Como tirar o bit setgid de um diretório?
chmod g-s pasta. Um chmod 775 simples mantém o bit em sistemas GNU; chmod 00775 pasta zera.

Revisado em por Arielton Oberek.