> For the complete documentation index, see [llms.txt](https://mysther.gitbook.io/knowledge-base/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://mysther.gitbook.io/knowledge-base/sistemas-operacionais/linux/utilizacao/permissionamento.md).

# Permissionamento

### Como Funciona o Permissionamento

Todo arquivo ou diretório no Linux, possui permissões de *Leitura*, *Escrita* e *Execução*, que são atribuídas ao **Owner** (usuário que criou), **Group** (usuários que fazem parte de um grupo de usuários) e **Others** (que são os demais usuários do SO).\
Para vermos tais permissões, vamos executar o comando `ls -lh` e analisar a saída:

![](/files/-M2GTiQY72B37PY2eou_)

> **EXPLICAÇÃO**:\
> **ls** = Lista os arquivos\
> **-lh** = Exibe detalhes dos arquivos e de forma mais amigável

Já na primeira coluna, podemos ver as permissões do arquivo **meu\_arquivo.txt** e do diretório **meu\_diretorio**. Vamos então dividí-la em 4 partes, sendo a primeira parte, o primeiro caractere e mais 3 partes contendo 3 caracteres cada, ficando assim:

```
-   rw-   rw-   r--
d   rwx   rwx   r-x
```

A primeira parte pode ser um dos seguintes:

| CARACTERE | DESCRIÇÃO               |
| --------- | ----------------------- |
| `-`       | Arquivo                 |
| `d`       | Diretório               |
| `l`       | Link Simbólico (atalho) |

As demais partes seguem sempre o mesmo padrão, seguindo exatamente a ordem `rwx`. O caracter `-` é o único que pode aparecer em qualquer lugar.

| CARACTERE | DESCRIÇÃO           |
| --------- | ------------------- |
| `r`       | Read - Leitura      |
| `w`       | Write - Escrita     |
| `x`       | Execução            |
| `-`       | Denied - Sem Acesso |

{% hint style="warning" %}
**ATENÇÃO:**

O conteúdo de um diretório pode ser listado se tiver permissão `r` (leitura), porém só poderá acessar um arquivo dentro desse diretório, se o diretório tiver permissão `x` (execução).
{% endhint %}

Segue abaixo uma imagem para melhor descrever:

![](/files/-M2G_dtXmj8Vzh6UMC0a)

###

### Modificando as Permissões

Atribuindo permissões de leitura para o Group (**`g`**) e Others (**`o`**)

```bash
chmod go+r <arquivo
```

Removendo permissões de escrita para Others (**`o`**)

```bash
chmod o-w <arquivo>
```

Adicionando permissões de leitura, escrita e execução para o proprietário (owner) do arquivo

```bash
chmod u+rwx <file>
```

Removendo permissão de escrita e execução para "grupo" e "outros"

```bash
chmod g-wx <file>
chmod o-wx <file>
```

Outra forma de alterarmos as permissões, é configurando todos os bits de uma só vez. Iremos utilizar 3 números (que vai de 0 a 7), o primeiro representa o User, o segundo representa o Group e o último representar Others.\
Cada número define o tipo de permissão, como podemos ver abaixo:

| **NÚMERO** | **REPRESENTAÇÃO** | **DESCRIÇÃO**               |
| ---------- | ----------------- | --------------------------- |
| 0          | -                 | Sem Permissão               |
| 1          | --x               | Apenas Execução             |
| 2          | -w-               | Apenas Escrita              |
| 3          | -wx               | Escrita e Execução          |
| 4          | r--               | Apenas Leitura              |
| 5          | r-w               | Leitura e Execução          |
| 6          | rw-               | Leitura e Escrita           |
| 7          | rwx               | Leitura, Escrita e Execução |

Seguindo essa tabela, podemos atribuir permissão de "*Leitura e Escrita"* para o **User** e "*Somente Leitura*" para **Group** e **Others**.

```
chmod 644 <arquivo>
```

&#x20;É comum vermos profissionais (inclusive administradores de redes inexperientes) que atribuem permissão total ao arquivo para todos os usuários do sistema, utilizando o comando `chmod 7777 <arquivo>`. Pior do que isso, muitas vezes o comando é feito em um determinado diretório e de forma recursiva, como em: `chmod -R 7777 <directory>`.

Quando fazemos o processo acima, os executáveis tem um `s` no lugar do `x`. Isso indica que o executável é **setuid**, o que significa que, ao executar o programa, o dono do arquivo, e não você, será o usuário que irá realizar a execução. Esse tipo de permissionamento pode gerar falhas de segurança e permitir até PrivEsc, como veremos mais adiante.

{% hint style="danger" %}
**ATENÇÃO**:

Nunca dê esse tipo de permissão caso não haja necessidade, principalmente em arquivos expostos, como arquivos de um sistema web.
{% endhint %}

###

### Alterando User e Group

Isso pode ser útil quando precisamos fazer com que determinado arquivo ou diretório, passe a ser proprietário de outro User ou Group.

```bash
# Alterando o User
chown <novo_user> <arquivo>

# Alterando o Group
chgrp <novo_grupo> <diretorio>

# Alterando o Group de forma recursiva
chgrp -R <novo_grupo> <diretorio>

# Alterando User e Group simultaneamente
chown <user>:<group> <file>
```
