Permissões Especiais no Linux: SUID, SGID e Bit de Tarefa

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).

sudo useradd A-user
sudo passwd A-user
Creating a new user

2. Em seguida, execute o comando stat abaixo para ver as permissões existentes do comando cat.

stat /usr/bin/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).
Viewing access permissions of the cat command

3. 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.

sudo chmod u+s /usr/bin/cat

4. Depois de definir o bit SUID, execute o seguinte comando stat para verificar o bit SUID, reexaminando as permissões do comando cat.

stat /usr/bin/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.
Verifying the SUID bit

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.

cat /etc/shadow

A mensagem abaixo aparece, pois o usuário atual não tem permissão para acessar o arquivo.

Viewing the /etc/shadow file’s content via a user without appropriate permissions

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.

# Mudar para A-user
su A-user
# Visualizar o conteúdo do arquivo /etc/shadow
cat /etc/shadow

Como você temporariamente concedeu permissão a A-user para ler o conteúdo desse arquivo, você obterá uma saída como a abaixo.

Viewing the /etc/shadow file’s content

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.

exit
sudo chmod u-s /usr/bin/cat
Removing the SUID bit from the cat command

8. Por fim, execute o comando abaixo para verificar se o bit SUID foi removido.

stat /usr/bin/cat

Observe que o bit SUID 4 e s não estão mais nas permissões de acesso.

Confirming the SUID bit removal

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

# Mudar para root
sudo su
# Criar um novo grupo
groupadd demo
Switching to root and creating a job

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

useradd -s /bin/bash userA
passwd userA

useradd -s /bin/bash userB
passwd userB
Creating users with passwords for simulating a collaborative environment

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.

usermod -aG demo userA
usermod -aG demo userB

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.

# Criar um diretório
mkdir /demo-dir
# Alterar a propriedade do diretório
chown userA:demo /demo-dir

5. Em seguida, execute o seguinte comando ls para visualizar as permissões do diretório /demo-dir.

ls -ld /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.

Viewing the /demo-dir directory’s permissions

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.
chmod g+s,u+rwx,g+rwx,o-rwx /demo-dir/

7. Depois de definir o SGID, execute o seguinte comando para verificar as permissões do diretório /demo-dir.

stat /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).

Verifying the SGID bit set to the /demo-dir directory

8. Em seguida, execute cada comando abaixo para criar um diretório /home para userA.

mkdir /home/userA
chown userA:userA /home/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.

# Trocar para userA
su - userA
# Mudar de diretório
cd /demo-dir
# Criar um arquivo de texto
touch textA.txt

10. Execute o comando ls abaixo para visualizar as permissões do arquivo textA.txt.

ls -l 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.

Verifying the textA.txt file’s permissions

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

# Sair de userA
exit
# Definir SGID para /demo-dir
chmod g+s /demo-dir
Setting the SGID bit to the /demo-dir directory

12. Uma vez que o SGID está definido, execute o comando abaixo para verificar o bit SGID adicionado ao diretório /demo-dir.

stat /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.

Verifying the SGID is set to the /demo-dir directory

13. Em seguida, volte para userA e crie outro arquivo chamado testA.txt (arbitrário) no diretório /demo-dir.

# Voltar para userA
su - userA
# Mudar de diretório
cd /demo-dir
# Criar um arquivo de texto
touch testA.txt

14. Uma vez criado, execute o comando ls abaixo para verificar a propriedade do novo arquivo (testA.txt).

ls -l 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.

Verifying permissions of the testA.txt file

15. Agora, crie um diretório /home para o userB para testar ainda mais a funcionalidade SGID.

mkdir /home/userB
chown userB:userB /home/userB

16. Mude para o userB e crie um arquivo chamado testB.txt (arbitrário) no mesmo diretório /demo-dir.

# Mude para o usuárioB
su - userB
# Mude de diretório
cd /demo-dir
# Crie um arquivo de texto
touch testB.txt
Switching to userB and creating the testB.txt file

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

ls -l testB.txt

Verifique a propriedade do arquivo textB.txt.

Checking the ownership of the textB.txt file

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.

# Troque para o root
sudo su
# Crie um diretório (compartilhado)
mkdir /shared-dir

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.

# Alterar permissões, definir Sticky Bit
chmod 1777 /shared-dir
# Visualizar as permissões do diretório
ls -ld /shared-dir

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.

Viewing permissions of the /shared-dir directory

3. Mude para userA e crie um arquivo chamado fileA.txt (arbitrário) no diretório /shared-dir:

# Mude para userA
su - userA
# Crie um arquivo de texto
touch /shared-dir/fileA.txt

4. Saia do usuárioA, mude para userB e crie outro arquivo chamado fileB.txt (arbitrário) no mesmo diretório /shared-dir.

# Sair do usuárioA
exit
# Mudar para o usuárioB
su - userB
# Criar um arquivo de texto
touch /shared-dir/fileB.txt

5. Agora, saia do usuárioB, mude para usuárioA e tente excluir o arquivo fileB.txt do usuárioB.

# Sair do usuárioB
exit
# Mudar para usuárioA
su - userA
# Excluir um arquivo de propriedade do usuárioB
rm /shared-dir/fileB.txt

Você receberá uma saída como a abaixo, já que apenas o proprietário do arquivo pode fazer alterações ou excluí-lo.

Attempting to delete a file (fileB.txt) owned by another user (userB)

6. Por fim, execute a seguinte lista de comandos (ls) todos os arquivos dentro do diretório compartilhado (/shared-dir).

ls /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.

Confirming the fileB.txt file still exists

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/