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
| Quem | Leitura (4) | Escrita (2) | Execução (1) | Dígito |
|---|---|---|---|---|
| Dono (u) | Sim | Sim | Sim | 7 |
| Grupo (g) | Sim | Sim | Sim | 7 |
| Outros (o) | Sim | Não | Sim | 5 |
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.
| Quem | Num arquivo | Num diretório |
|---|---|---|
| Dono (u) | Ler, alterar e executar | Listar, entrar, criar, apagar e renomear itens |
| Grupo (g) | Ler, alterar e executar | Listar, entrar, criar, apagar e renomear itens |
| Outros (o) | Ler e executar | Listar, 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
| Octal | 2775 |
|---|---|
| Simbólico | rwxrwsr-x |
| ls -l, arquivo | -rwxrwsr-x |
| ls -l, diretório | drwxrwsr-x |
| Comando simbólico equivalente | chmod u=rwx,g=rwxs,o=rx |
| umask padrão que gera esse modo | Nenhum dos umasks comuns; defina explicitamente com chmod |
| Como o Git registra um arquivo assim | 100755 (executável) |
| Bits especiais | setgid |
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 arquivosComandos
sudo chmod 2775 /srv/projects
sudo chmod u=rwx,g=rwxs,o=rx /srv/projects # mesmo resultadostat -c '%a %A %n' /srv/projects # Linux (stat do GNU): 2775 drwxrwsr-x
stat -f '%Mp%Lp %Sp %N' /srv/projects # macOS e BSDAplicando 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.