# Alteração de permissões no formato octal

## Como funciona a representação octal?

O formato octal utiliza oito símbolos, de `0` a `7`, para representar grupos de três bits.

No caso das permissões tradicionais, são utilizados três dígitos:

1. O primeiro representa as permissões do proprietário.
2. O segundo representa as permissões do grupo.
3. O terceiro representa as permissões dos outros usuários.

Assim, o modo `754` é interpretado da seguinte forma:

| Categoria    | Dígito | Cálculo   | Permissões |
| ------------ | ------ | --------- | ---------- |
| Proprietário | `7`    | 4 + 2 + 1 | `rwx`      |
| Grupo        | `5`    | 4 + 0 + 1 | `r-x`      |
| Outros       | `4`    | 4 + 0 + 0 | `r--`      |

Portanto:

```
chmod 754 script.sh
```

Produz um modo equivalente a:

```
-rwxr-xr--
```

O primeiro caractere `-` indica que se trata de um arquivo regular.

## Exemplos frequentes

Apesar de ser possível ter várias combinações de permissões de leitura, escrita e execução para usuários, grupos e outros, as permissões mais comuns são as que seguem:

- Permissão octal `600` e simbólica `rw-------`: Somente o proprietário tem leitura e escrita. É um modo frequentemente utilizado para arquivos privados;
- Permissão octal `644` e simbólica `rw-r--r--`: O proprietário pode ler e escrever; grupo e outros podem ler. É comum para arquivos de texto não executáveis;
- Permissão octal `700` e simbólica `rwx------`: Todas as permissões básicas ficam restritas ao proprietário;
- Permissão octal `755` e simbólica `rwxr-xr-x`: O proprietário pode ler, escrever e executar; grupo e outros podem ler e executar. É comum em scripts e diretórios públicos para travessia;
- Permissão octal `775` e simbólica `rwxrwxr-x`: Proprietário e grupo têm todas as permissões básicas; outros podem ler e executar; e
- Permissão octal `777` e simbólica `rwxrwxrwx`: Todos recebem leitura, escrita e execução. Deve ser evitado como solução genérica para problemas de acesso, pois pode permitir alterações indesejadas.

Os exemplos descrevem permissões básicas. A possibilidade efetiva de acesso também depende do caminho, das ACLs, dos privilégios do processo e de outros mecanismos de segurança.

## Por que `chmod 644` substitui o modo anterior?

Ao executar:

```
chmod 644 relatorio.txt
```

O comando define um novo modo básico: leitura e escrita para o proprietário, leitura para grupo e outros, sem execução para nenhuma dessas categorias.

Diferentemente de uma operação simbólica como `chmod g+w`, que acrescenta uma permissão ao modo existente, a forma octal especifica o conjunto de bits desejado.

Isso significa que, por exemplo, um arquivo inicialmente com modo `755` passa a ter modo `644` após a execução do comando.

## Bits especiais e quatro dígitos octais

Além das permissões básicas, o modo pode conter bits especiais:

| Valor | Bit especial | Função principal                                                                                                                                    |
| ----- | ------------ | --------------------------------------------------------------------------------------------------------------------------------------------------- |
| `4`   | *setuid*     | Em executáveis compatíveis, faz o processo utilizar o UID efetivo associado ao proprietário do arquivo.                                             |
| `2`   | *setgid*     | Em executáveis compatíveis, faz o processo utilizar o GID efetivo associado ao arquivo; em diretórios, pode favorecer a herança do grupo.           |
| `1`   | *sticky*     | Em diretórios, restringe a remoção ou renomeação de entradas por usuários não privilegiados que não sejam proprietários do arquivo ou do diretório. |

Quando utilizado um quarto dígito, ele representa esses bits especiais.

Por exemplo:

```
chmod 4755 programa
```

Solicita setuid, além das permissões básicas `755`.

Outro exemplo:

```
chmod 1777 diretorio-compartilhado
```

Define permissões básicas `777` e ativa o *sticky bit*, uma combinação comum em diretórios temporários compartilhados, embora a configuração real deva ser avaliada conforme a finalidade e o ambiente.

Esses bits têm implicações de segurança. Em especial, não se deve habilitar setuid ou setgid em executáveis sem compreender o efeito sobre os privilégios do processo.
