chmod 660
chmod 660 define rw-rw----: o dono e o grupo podem ler e gravar o arquivo, ninguém executa, e todas as outras contas ficam sem acesso.
Matriz de permissões
| Quem | Leitura (4) | Escrita (2) | Execução (1) | Dígito |
|---|---|---|---|---|
| Dono (u) | Sim | Sim | Não | 6 |
| Grupo (g) | Sim | Sim | Não | 6 |
| Outros (o) | Não | Não | Não | 0 |
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 e alterar | Só listar nomes; a escrita não vale sem execução |
| Grupo (g) | Ler e alterar | Só listar nomes; a escrita não vale sem execução |
| Outros (o) | Nenhum acesso | Nenhum acesso |
Dados
| Octal | 660 (0660) |
|---|---|
| Simbólico | rw-rw---- |
| ls -l, arquivo | -rw-rw---- |
| ls -l, diretório | drw-rw---- |
| Comando simbólico equivalente | chmod ug=rw,o= |
| umask padrão que gera esse modo | umask 007 para arquivos novos |
| Como o Git registra um arquivo assim | 100644 (não executável) |
| Bits especiais | Nenhum |
Quando usar
- Controle de acesso por grupo em dispositivos e sockets: portas seriais como /dev/ttyS0 são crw-rw---- root:dialout, e o socket do Docker é srw-rw---- root:docker. Entrar no grupo é o que dá o acesso.
- Bancos ou arquivos de estado gravados por um serviço e por quem o opera, como um SQLite compartilhado entre a aplicação e um cron do mesmo grupo.
- É o que os arquivos novos recebem com umask 007.
Quando não usar
- Arquivos servidos diretamente pelo servidor web se a conta dele estiver fora do grupo: ele recebe permission denied.
- Quando os membros do grupo só precisam ler, como configurações com credenciais: use 640 para que um leitor invadido não possa também reescrever.
Comandos
chmod 660 app.sqlite
chmod ug=rw,o= app.sqlite # mesmo resultadostat -c '%a %A %n' app.sqlite # Linux (stat do GNU): 660 -rw-rw----
stat -f '%Lp %Sp %N' app.sqlite # macOS e BSDAplicando numa árvore inteira
O chmod -R colocaria o mesmo modo em arquivos e diretórios. Defina os diretórios como 770 e os arquivos como 660 separadamente:
find . -type d -exec chmod 770 {} +
find . -type f -exec chmod 660 {} +Ou numa passada só com o X maiúsculo, que só dá execução a diretórios e a arquivos que já tinham: chmod -R ug=rwX,o= ..
Git e o bit de execução
O Git guarda um único dado de permissão por arquivo: 100755 se o bit de execução do dono estiver ligado, 100644 caso contrário. Um arquivo com este modo entra no commit como 100644; os bits de grupo e outros nunca chegam ao repositório. No Windows, ou com core.fileMode false, ligue o bit com git update-index --chmod=+x.
Perguntas frequentes
- O que significa chmod 660?
- Dono 6 (rw-), grupo 6 (rw-), outros 0 (---). Só o dono e os membros do grupo usam o arquivo.
- Por que não consigo usar /dev/ttyUSB0 ou o docker sem sudo?
- Os dois são 660 e pertencem a um grupo (dialout ou uucp nas portas seriais, docker no socket). Entre no grupo com sudo usermod -aG dialout $USER e faça login de novo. Lembre que estar no grupo docker equivale a ser root.
- Uso 660 ou 640?
- 660 quando o grupo grava, 640 quando só lê.
Revisado em por Arielton Oberek.