Você já se encontrou em uma situação em que precisava executar uma tarefa em um sistema Linux, apenas para se deparar com uma frustrante negação de acesso? Bem, diga adeus a esses problemas e dê as boas-vindas ao mundo das permissões especiais no Linux!
Este tutorial é o seu ingresso para dominar os pontos mais finos das permissões especiais no Linux — Bit Pegajoso, ID de Usuário Definido (SUID) e ID de Grupo Definido (SGID). Essas permissões especiais oferecem um nível mais elevado de controle de segurança.
Continue lendo e gerencie seus arquivos com precisão e confiança!
Pré-requisitos
Antes de mergulhar nos detalhes das permissões especiais no Linux, certifique-se de ter uma máquina Linux. Este tutorial usa o Ubuntu 22.04 LTS (Jammy Jellyfish) para demonstrações práticas.
Executando Arquivos com Permissões Especiais no Linux (SUID)
As permissões de arquivo do Linux normalmente determinam a capacidade de um usuário ler, escrever ou executar um arquivo com base em suas permissões e as do seu grupo. No entanto, há situações em que um usuário deve executar um arquivo com as permissões do proprietário do arquivo, em vez das suas próprias.
Por exemplo, considere um programa que apenas usuários root podem executar, mas há a necessidade de um usuário regular executá-lo para uma tarefa específica. Em tais casos, o SUID se torna inestimável.
Para ver como definir permissões SUID, siga estas etapas:
1. Abra o terminal e execute os seguintes comandos para criar um usuário (useradd
) chamado A-user
(arbitrário) e atribua uma senha a ele (passwd
).

2. Em seguida, execute o comando stat
abaixo para ver as permissões existentes do comando cat
.
Observe as permissões de acesso abaixo, pois você precisará delas para comparações posteriores:
- 0755 – Permite que o arquivo seja executado com as permissões de seu proprietário, fornecendo privilégios elevados a usuários não privilegiados ao executar o arquivo.
- -rwxr-xr-x – Define permissão para o proprietário ler, escrever e executar o arquivo (rwx), enquanto os membros do grupo e outros usuários podem ler e executar o arquivo (r-x e r-x).

cat
command3. Agora, execute o comando chmod
abaixo, que não fornece saída, mas define o bit SUID no comando cat
.
Este comando permite que o comando cat
seja executado com as permissões do proprietário do arquivo, em vez das permissões do usuário que está executando o comando.
? Observe que o uso de SUID deve ser feito com cautela, pois pode potencialmente introduzir riscos de segurança se não for implementado corretamente. Certifique-se de aplicar SUID apenas a comandos e arquivos confiáveis.
4. Depois de definir o bit SUID, execute o seguinte comando stat
para verificar o bit SUID, reexaminando as permissões do comando cat
.
Se bem-sucedido, você verá o seguinte, onde fará uma comparação com as informações anotadas no passo dois:
- 0755 alterado para 4755, onde o número 4 representa o bit SUID.
- -rwxr-xr-x alterado para -rwsr-xr-x, onde s representa o local de permissão de execução do usuário (x) respectivamente.

5. Execute o comando cat
abaixo para testar a permissão do usuário atual para acessar o arquivo /etc/shadow
. Este arquivo é um arquivo crítico do sistema que armazena senhas de usuário criptografadas e informações relacionadas, ao qual apenas um usuário root pode acessar.
Por padrão, o comando cat
permite visualizar o conteúdo de um arquivo no Linux. Mas esse comportamento nem sempre é válido para todos os arquivos.
A mensagem abaixo aparece, pois o usuário atual não tem permissão para acessar o arquivo.

6. Agora, execute cada comando abaixo para mudar (su
) para o novo usuário (A-user
) e tente acessar o arquivo /etc/shadow
novamente.
Desta vez, o comando cat
é executado com as permissões do proprietário do arquivo (geralmente root) em vez das permissões do usuário que executou o comando.
Como você temporariamente concedeu permissão a A-user para ler o conteúdo desse arquivo, você obterá uma saída como a abaixo.

7. Por motivos de segurança, execute os seguintes comandos para sair
do usuário atual (A-user) e reverter as permissões do comando cat
para seu estado original.

cat
command8. Por fim, execute o comando abaixo para verificar se o bit SUID foi removido.
Observe que o bit SUID 4 e s não estão mais nas permissões de acesso.

Habilitando Fluxos de Trabalho Colaborativos em Diretórios Linux (SGID)
Executar arquivos com permissões especiais no Linux via SUID funciona sem dúvida. Mas e se você almeja fluxos de trabalho colaborativos, onde vários usuários colaboram em projetos? Normalmente, você deve garantir que os arquivos recém-criados herdem a propriedade de grupo do diretório pai.
Quando confrontado com esse cenário, o SGID prova ser o diferencial. Esse recurso poderoso simplifica a gestão de recursos compartilhados e melhora os fluxos de trabalho baseados em grupo em ambientes Linux.
Para entender como funciona o SGID, você criará um grupo, adicionará usuários a ele, definirá permissões SGID em um diretório e testará sua funcionalidade da seguinte maneira:
1. Execute os seguintes comandos para fazer login como usuário root e criar um novo grupo chamado demo
(arbitrário). Este grupo é o que você usará para testar a funcionalidade do SGID.
Esses comandos não fazem

2. Em seguida, execute os comandos abaixo para criar dois usuários (userA
e userB
) que você usará para simular um ambiente colaborativo.

3. Após criar novos usuários, execute os comandos usermod
abaixo, que não produzem saída no terminal, mas adicionam os usuários (userA
e userB
) ao grupo demo
.
4. Agora, execute cada comando abaixo, crie um diretório (mkdir
) chamado /demo-dir
(arbitrário) e defina as propriedades de usuário e grupo do diretório para userA
e demo
, respectivamente.
? Quando bem-sucedidos, esses comandos não geram saída, o que se aplica ao longo deste tutorial.
5. Em seguida, execute o seguinte comando ls
para visualizar as permissões do diretório /demo-dir
.
A saída abaixo verifica que o usuário do diretório /demo-dir está definido como userA e o grupo como demo.

6. Com as permissões verificadas, execute o comando chmod
abaixo para definir o bit SGID no diretório /demo-dir/
da seguinte maneira:
g+s
– Set the SGID bit on the/demo-dir/
directory.o-rwx
– Remove all permissions (read, write, execute) for others.u+rwx
– Grant read, write, and execute permissions to the owner.g+rwx
– Grant read, write, and execute permissions to the group.
7. Depois de definir o SGID, execute o seguinte comando para verificar as permissões do diretório /demo-dir
.
Se for bem-sucedido, você verá o bit SGID definido, representado pelo número 2
antes do modo de permissão octal e s
no local de permissão de execução do proprietário do grupo (x
) (rws
).

8. Em seguida, execute cada comando abaixo para criar um diretório /home
para userA
.
9. Execute os seguintes comandos para trocar (su
) para userA
e criar um arquivo (touch
) chamado textA.txt
(arbitrário) no diretório /demo-dir
.
Esses comandos não têm saída (o que se aplica em todo este tutorial), mas você verificará as permissões do arquivo no próximo passo.
10. Execute o comando ls
abaixo para visualizar as permissões do arquivo textA.txt
.
Abaixo, o proprietário do grupo do arquivo textA.txt é demo, que é o grupo principal do criador, userA. Os membros do grupo demo podem ler e modificar o arquivo, enquanto outros só podem lê-lo.
Para garantir que os novos arquivos no diretório /demo-dir herdem a propriedade do grupo do diretório, um bit SGID deve ser definido no diretório, como será abordado nas etapas a seguir.

11. Agora, invoque os seguintes comandos para sair
do usuário atual (userA) e definir o bit SGID (chmod g+s
) no diretório /demo-dir

12. Uma vez que o SGID está definido, execute o comando abaixo para verificar o bit SGID adicionado ao diretório /demo-dir
.
Como mostrado abaixo, você notará que o bit SUID 2 foi adicionado, e há um s no local de execução do proprietário do grupo. Esta saída confirma que o bit SGID foi definido com sucesso para o diretório /demo-dir.

13. Em seguida, volte para userA
e crie outro arquivo chamado testA.txt
(arbitrário) no diretório /demo-dir
.
14. Uma vez criado, execute o comando ls
abaixo para verificar a propriedade do novo arquivo (testA.txt
).
Se o SGID funciona como esperado, a saída mostra que enquanto userA é o proprietário, a propriedade do grupo é demo devido ao bit SGID definido no diretório /demo-dir.

15. Agora, crie um diretório /home
para o userB
para testar ainda mais a funcionalidade SGID.
16. Mude para o userB
e crie um arquivo chamado testB.txt
(arbitrário) no mesmo diretório /demo-dir
.

17. Visualize (ls
) as informações do novo arquivo (testB.txt
).
Verifique a propriedade do arquivo textB.txt.

Protegendo Arquivos Dentro de Diretórios (Bit de Bloqueio)
Permitir fluxos de trabalho colaborativos em diretórios do Linux promove o trabalho em equipe e a colaboração perfeita. Mas quando você precisa estabelecer um ambiente seguro para gerenciar arquivos de forma eficaz, as permissões do Bit de Bloqueio farão o truque.
Ao definir as permissões do Bit de Bloqueio, você está essencialmente colocando as “chaves do castelo” nas mãos do proprietário do arquivo, do proprietário do diretório ou do usuário root. Fazendo isso, você garante que apenas eles tenham autoridade para excluir ou renomear o arquivo dentro do diretório, proporcionando uma proteção adicional para dados sensíveis.
Para definir as permissões do Bit de Bloqueio, primeiro você deve criar um diretório compartilhado com as seguintes etapas:
1. Faça login como usuário root e crie um diretório (compartilhado) onde vários usuários possam criar arquivos.
2. Em seguida, execute os comandos abaixo para alterar as permissões do diretório /shared-dir
para conceder permissões de escrita a todos.
O primeiro número (1
) em 1777
define o Sticky Bit, enquanto o restante (777
) torna o diretório legível, gravável e executável por todos.
As seguintes são características ou atributos do Sticky Bit em um sistema Linux:
Feature | Function |
Directory Protection | When the Sticky Bit is set on a directory, it allows only the owner of a file within that directory to delete or rename their own files. Other users, even if they have write permissions to the directory, cannot delete or rename files owned by other users. |
Shared Directories | The sticky bit is handy for directories that are shared among multiple users. For example, on a system with a /tmp directory used by all users to store temporary files, setting the Sticky Bit prevents users from accidentally or maliciously deleting files owned by other users. |
Abaixo, você pode ver a letra ‘t’ na parte posterior do campo de permissão, o que indica que o Sticky Bit está definido para o diretório /shared-dir.

3. Mude para userA
e crie um arquivo chamado fileA.txt
(arbitrário) no diretório /shared-dir
:
4. Saia do usuárioA, mude para userB
e crie outro arquivo chamado fileB.txt
(arbitrário) no mesmo diretório /shared-dir
.
5. Agora, saia do usuárioB
, mude para usuárioA
e tente excluir o arquivo fileB.txt
do usuárioB
.
Você receberá uma saída como a abaixo, já que apenas o proprietário do arquivo pode fazer alterações ou excluí-lo.

6. Por fim, execute a seguinte lista de comandos (ls
) todos os arquivos dentro do diretório compartilhado (/shared-dir
).
Se as permissões do Bit Pegajoso funcionarem, você verá que o arquivo fileB.txt criado pelo usuárioB está seguro e intacto e não foi excluído.

Conclusão
Ao concluir esta exploração sobre permissões especiais no Linux, você desbloqueou um conjunto robusto de ferramentas: o SUID, SGID e Bit Pegajoso. Armado com esse conhecimento, você agora pode ajustar o controle de acesso e proteger seus arquivos com precisão.
Mas não pare por aqui! Por que não tentar configurar um diretório compartilhado com SGID e experimentar como os arquivos herdam a propriedade do grupo? O mundo Linux está à sua disposição, e com cada empreendimento, você dominará a arte de proteger seu sistema com habilidade!
Source:
https://adamtheautomator.com/special-permissions-in-linux/