# Proprietário, grupo e permissões

Antes de estudar `chown`, `chgrp` e `chmod`, é necessário compreender como o Linux associa arquivos a usuários e grupos.

## Proprietário e grupo proprietário

Cada arquivo possui, em condições usuais, um proprietário identificado por um UID (User Identifier) e um grupo proprietário identificado por um GID (Group Identifier).

O Linux utiliza esses identificadores numéricos para verificar a propriedade e aplicar as regras tradicionais de permissões. Os nomes apresentados por `ls -l` são obtidos a partir dos cadastros de usuários e grupos disponíveis ao sistema.

Por exemplo:

```
-rw-r----- 1 ana professores [...]
|\_/\_/\_/ | \_/ \_________/ 
1 2  3  4  5  6       7
```

Nesse exemplo:

- `ana` é o usuário proprietário (6).
- `professores` é o grupo proprietário (7).
- O proprietário tem permissão de leitura e escrita (2).
- Os usuários pertencentes ao grupo professores têm permissão de leitura (3).
- Os demais usuários não têm nenhuma dessas permissões sobre o arquivo.

O grupo proprietário não é necessariamente o único grupo ao qual o usuário pertence. Um usuário pode pertencer a diversos grupos, e sua associação aos grupos é considerada durante a verificação de acesso.

## As três categorias de permissões

O modelo tradicional de permissões divide os usuários em três categorias:

| Símbolo | Categoria | Significado                                     |
| ------- | --------- | ----------------------------------------------- |
| `u`     | *User*    | Proprietário do arquivo                         |
| `g`     | *Group*   | Usuários que se enquadram no grupo proprietário |
| `o`     | *Others*  | Demais usuários                                 |
| `a`     | *All*     | Todas as categorias: `u`, `g` e `o`             |

Cada categoria pode receber três permissões básicas:

| Símbolo | Nome      | Significado em arquivo regular                 | Significado em diretório                                                    |
| ------- | --------- | ---------------------------------------------- | --------------------------------------------------------------------------- |
| `r`     | *Read*    | Ler o conteúdo                                 | Listar os nomes das entradas                                                |
| `w`     | *Write*   | Modificar o conteúdo                           | Criar, remover ou renomear entradas, conforme as demais condições de acesso |
| `x`     | *Execute* | Executar o arquivo como programa, se aplicável | Atravessar o diretório e acessar entradas por seus nomes                    |

A distinção entre arquivo e diretório é fundamental. Em um diretório, `x` significa permissão de travessia, e não execução de um programa. A remoção de um arquivo, por exemplo, depende principalmente das permissões no diretório que contém sua entrada, e não apenas das permissões do próprio arquivo.

As permissões tradicionais também não são a única camada possível de controle de acesso: ACLs (Access Control Lists), atributos de segurança e mecanismos como SELinux podem impor restrições adicionais.
