# 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\
> \&#xNAN;**-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>
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://mysther.gitbook.io/knowledge-base/sistemas-operacionais/linux/utilizacao/permissionamento.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
