Entendendo as Permissões Especiais no Linux

No Linux, o sistema de permissões é uma parte fundamental da segurança e da administração do sistema. Permitir que usuários acessem e modifiquem arquivos de maneira controlada é crucial para proteger dados e manter a integridade do sistema. Enquanto as permissões padrão de leitura (r), gravação (w) e execução (x) são amplamente conhecidas, o Linux também oferece permissões especiais que podem fornecer ainda mais controle sobre o comportamento de arquivos e diretórios.

Neste post, vamos explorar o que são essas permissões especiais, como elas funcionam e quando você deve usá-las.

O que são Permissões Especiais?

As permissões especiais no Linux são uma extensão do sistema de permissões padrão, que se aplicam principalmente a arquivos e diretórios executáveis. Essas permissões permitem comportamentos específicos, como permitir a execução de um arquivo com privilégios elevados, ou definir como o sistema lida com arquivos temporários.

Existem três permissões especiais principais no Linux:

  1. Setuid (Set User ID)
  2. Setgid (Set Group ID)
  3. Sticky Bit

Vamos analisar cada uma delas em detalhes.

1. Setuid (Set User ID)

A permissão setuid é usada em arquivos executáveis e faz com que o programa seja executado com as permissões do proprietário do arquivo, e não do usuário que o executa.

Como funciona?

Quando você executa um arquivo com a permissão setuid, o sistema executa esse arquivo com as permissões do dono do arquivo. Isso é útil para permitir que usuários normais executem programas que necessitam de privilégios elevados (como o passwd para alterar senhas), sem conceder permissões de superusuário (root) diretamente.

Como definir a permissão setuid?

Para adicionar a permissão setuid a um arquivo, você pode usar o comando chmod:

chmod u+s nome_do_arquivo

Exemplo prático:

  • O comando passwd (para alterar senhas) tem a permissão setuid. Isso significa que, mesmo que você seja um usuário comum, ao executar passwd, o sistema executa o comando com as permissões do root para que você possa alterar sua própria senha.
Como visualizar o setuid?

Você pode verificar se um arquivo tem a permissão setuid olhando para a primeira coluna do comando ls -l:

ls -l /usr/bin/passwd

Se o arquivo tiver a permissão setuid, a saída será algo assim:

-rwsr-xr-x 1 root root 54272 Jun 15 2019 /usr/bin/passwd

O “s” na posição de execução do usuário indica que a permissão setuid está ativada.

2. Setgid (Set Group ID)

A permissão setgid tem dois comportamentos principais:

  • Quando aplicada a arquivos executáveis, ela faz com que o programa seja executado com as permissões do grupo do arquivo, em vez do grupo do usuário que está executando o comando.
  • Quando aplicada a diretórios, ela garante que qualquer arquivo criado dentro desse diretório herde o grupo do diretório, em vez de herdar o grupo do usuário.

Como funciona?

No caso de arquivos executáveis, o comportamento do setgid é semelhante ao setuid, mas com relação ao grupo em vez do usuário. Isso pode ser útil quando você deseja que um programa seja executado com permissões de grupo específicas, mesmo quando executado por um usuário diferente.

Para diretórios, a permissão setgid facilita a organização de arquivos, permitindo que todos os arquivos criados dentro de um diretório herdem o grupo correto, sem que o usuário precise configurar manualmente.

Como definir a permissão setgid?

Para adicionar a permissão setgid a um arquivo ou diretório, use o seguinte comando chmod:

chmod g+s nome_do_arquivo_ou_diretorio

Exemplo prático:

  • Arquivos executáveis: Suponha que você tenha um programa de backup que precisa ser executado com as permissões de grupo de “backup”, mesmo quando qualquer usuário da máquina o executa.
  • Diretórios: Em um diretório compartilhado onde várias pessoas precisam criar arquivos, você pode aplicar setgid para garantir que todos os arquivos criados nesse diretório pertençam ao mesmo grupo.
Como visualizar o setgid?

Quando o setgid está ativado para um arquivo executável, a saída do ls -l mostrará um “s” na coluna de permissões, assim como o setuid:

-rwxr-sr-x 1 root backup 12345 Jul 14 10:00 /home/backup/backup_script

Para diretórios, a permissão setgid aparece da seguinte forma:

drwxr-sr-x 2 root backup 4096 Jul 14 10:00 /home/backup/shared_dir

3. Sticky Bit

O sticky bit é uma permissão especial aplicada a diretórios, especialmente em sistemas compartilhados. Quando um diretório tem o sticky bit ativado, os usuários só podem excluir ou renomear seus próprios arquivos, mesmo que o diretório tenha permissões de gravação para todos.

Como funciona?

O sticky bit é útil em diretórios compartilhados, como o diretório /tmp, onde vários usuários podem ter arquivos temporários. Com o sticky bit ativado, mesmo que o diretório tenha permissões de gravação para todos, cada usuário só pode excluir ou modificar seus próprios arquivos. Isso evita que um usuário exclua ou modifique os arquivos de outros usuários.

Como definir o sticky bit?

Para adicionar o sticky bit a um diretório, use o seguinte comando:

chmod +t nome_do_diretorio

Exemplo prático:

  • O diretório /tmp é frequentemente configurado com o sticky bit. Isso garante que apenas o usuário que criou um arquivo temporário possa apagá-lo, evitando que outros usuários modifiquem ou excluam arquivos de outros.
Como visualizar o sticky bit?

A saída de ls -l para um diretório com o sticky bit ativado mostrará um “t” na última posição das permissões de execução:

drwxrwxrwt 10 root root 4096 Jul 14 10:00 /tmp

O “t” na última posição indica que o sticky bit está ativado.


Conclusão

As permissões especiais no Linux, como setuid, setgid e sticky bit, oferecem maneiras poderosas de controlar como os arquivos e diretórios são acessados e manipulados por usuários e grupos. Compreender e usar essas permissões corretamente pode aumentar a segurança do seu sistema e facilitar a administração de ambientes multiusuário.

Lembre-se de usar essas permissões com cautela, pois elas podem alterar significativamente o comportamento de programas e a segurança do sistema. Se usado de forma adequada, você pode garantir que os usuários tenham apenas o acesso necessário para realizar suas tarefas, sem comprometer a integridade do sistema.

Se você já usou alguma dessas permissões especiais, compartilhe sua experiência nos comentários!