===== Introdução aos Comandos de Gerenciamento de Permissões no Linux =====
No Linux, o controle de acesso a arquivos e diretórios é fundamental para garantir a segurança e o gerenciamento adequado de um sistema multiusuário. Para isso, o sistema oferece comandos poderosos que permitem ajustar as permissões, a propriedade e os atributos dos arquivos e diretórios, garantindo que eles sejam acessados e modificados apenas por usuários autorizados.
Os comandos **`chown`**, **`chmod`**, **`chattr`** e **`newgrp`** são essenciais para administradores de sistemas que precisam gerenciar permissões com precisão. Com esses comandos, você pode:
* Alterar o dono e o grupo de arquivos e diretórios (**`chown`**);
* Definir permissões específicas de leitura, escrita e execução, bem como permissões especiais como **`setuid`**, **`setgid`** e **`sticky bit`** (**`chmod`**);
* Aplicar atributos avançados, como imutabilidade e "somente anexar" (**`chattr`**);
* Alternar temporariamente para um novo grupo de usuários, afetando permissões em tempo de execução (**`newgrp`**).
Os exemplos a seguir demonstram como usar esses comandos em diferentes níveis de complexidade, desde operações básicas até casos avançados, permitindo que você tenha controle total sobre a segurança e o acesso ao sistema.
==== Nível Básico ====
* **Alterar o dono de um arquivo com `chown`:**
- chown usuario arquivo.txt
- Muda o dono de `arquivo.txt` para o usuário especificado.
* **Alterar as permissões de um arquivo para leitura e escrita com `chmod`:**
- chmod 644 arquivo.txt
- Define permissões de leitura e escrita para o dono, e apenas leitura para outros usuários.
* **Adicionar o atributo de somente leitura a um arquivo com `chattr`:**
- chattr +i arquivo.txt
- Define o arquivo como "imutável" (somente leitura), impedindo alterações ou exclusão.
* **Mudar para um novo grupo temporariamente com `newgrp`:**
- newgrp grupo1
- Troca para o grupo `grupo1`, afetando permissões temporariamente até o término da sessão.
==== Nível Intermediário ====
* **Alterar o dono e o grupo de um arquivo com `chown`:**
- chown usuario:grupo arquivo.txt
- Muda o dono do arquivo para `usuario` e o grupo para `grupo`.
* **Aplicar permissões recursivamente a todos os arquivos de um diretório com `chmod`:**
- chmod -R 755 /pasta/
- Define permissões recursivamente em todos os arquivos e subdiretórios dentro de `/pasta/`.
* **Remover o atributo imutável de um arquivo com `chattr`:**
- chattr -i arquivo.txt
- Remove o atributo de imutabilidade, permitindo que o arquivo seja modificado ou excluído.
* **Adicionar um usuário a um grupo temporariamente com `newgrp`:**
- newgrp grupo2
- Adiciona o usuário ao grupo `grupo2` temporariamente na sessão atual.
==== Nível Avançado ====
* **Transferir a propriedade de todos os arquivos de um diretório recursivamente com `chown`:**
- chown -R usuario:grupo /pasta/
- Transfere a propriedade de todos os arquivos e diretórios dentro de `/pasta/` para o usuário e grupo especificados.
* **Definir permissões especiais com `chmod` (bit `setuid`):**
- chmod u+s arquivo_binario
- Define o bit `setuid`, permitindo que o arquivo binário seja executado com as permissões do dono do arquivo.
* **Definir permissões especiais com `chmod` (bit `setgid`):**
- chmod g+s /diretorio_compartilhado
- Define o bit `setgid` em um diretório, garantindo que todos os arquivos criados nele herdem o grupo do diretório.
* **Adicionar o bit `sticky` para um diretório compartilhado com `chmod`:**
- chmod +t /diretorio_publico
- Adiciona o bit `sticky`, permitindo que apenas o dono de um arquivo possa excluí-lo dentro de um diretório compartilhado.
* **Aplicar o atributo de "anexo" a um arquivo com `chattr`:**
- chattr +a log.txt
- Define o arquivo como "somente anexar", permitindo apenas adicionar dados, mas não excluir ou modificar.
* **Alterar o grupo temporário e executar um comando específico com `newgrp`:**
- newgrp grupo3 -c 'touch arquivo.txt'
- Muda temporariamente para o grupo `grupo3` e executa o comando `touch arquivo.txt` no contexto desse grupo.
==== Nível Especializado ====
* **Alterar dono e grupo de forma recursiva, mas com exceção de certos tipos de arquivos com `chown`:**
- find /pasta -type f -exec chown usuario:grupo {} +
- Altera o dono e o grupo de todos os arquivos em `/pasta`, mas exclui diretórios.
* **Adicionar a permissão `sticky bit` para um diretório compartilhado com `chmod`:**
- chmod 1777 /pasta_publica
- Adiciona o sticky bit, permitindo que apenas o dono dos arquivos dentro de `/pasta_publica` possa excluir seus próprios arquivos.
* **Tornar um diretório imutável e prevenir exclusão com `chattr`:**
- chattr +i /diretorio/
- Marca o diretório como imutável, prevenindo qualquer alteração ou exclusão de seus arquivos.
* **Reverter os atributos de imutabilidade e anexação em um arquivo com `chattr`:**
- chattr -ia arquivo.txt
- Remove tanto o atributo de imutabilidade quanto o de "somente anexar", permitindo modificar ou excluir o arquivo.
* **Mudar para um grupo temporário e iniciar um novo shell com permissões desse grupo usando `newgrp`:**
- newgrp grupo_admin
- Muda para o grupo `grupo_admin` e inicia um novo shell com as permissões desse grupo.
* **Combinação de `setuid`, `setgid` e `sticky bit` em diretórios e arquivos:**
- chmod 4775 arquivo_binario
- Define o bit `setuid` (4), permitindo que o arquivo seja executado com as permissões do dono, além de `rwxr-xr-x` (755).
- chmod 2775 /diretorio_compartilhado
- Define o bit `setgid` (2) em um diretório, garantindo que todos os arquivos criados nele herdem o grupo do diretório, além de permissões `rwxrwxr-x` (775).
- chmod 1777 /diretorio_publico
- Define o `sticky bit` (1) no diretório, permitindo que apenas o dono de um arquivo possa excluí-lo, além de permissões `rwxrwxrwx` (777).