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

Já se encontrou em uma situação em que precisava realizar 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 bilhete para dominar os pontos mais finos das permissões especiais no Linux – Bit Pegajoso, Identificação de Usuário Definida (SUID) e Identificação de Grupo Definida (SGID). Essas permissões especiais oferecem um nível mais alto 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 geralmente determinam a capacidade de um usuário ler, escrever ou executar um arquivo com base em suas permissões e as de seu grupo. No entanto, existem 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á uma 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-usuario (arbitrário) e atribua uma senha (passwd).

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

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

stat /usr/bin/cat

Anote 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, concedendo 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 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.

? Observação: o uso do SUID deve ser feito com cautela, pois pode potencialmente introduzir riscos de segurança se não implementado corretamente. Certifique-se de aplicar o 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 ao rechecar 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 seguinte comando cat para testar a permissão do usuário atualmente logado para acessar o arquivo /etc/shadow. Este arquivo é um arquivo de sistema crítico que armazena senhas de usuário criptografadas e informações relacionadas, que 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 é verdadeiro para todos os arquivos.

cat /etc/shadow

A mensagem abaixo aparece porque 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 trocar (su) para o novo usuário (A-usuario), e tente acessar o arquivo /etc/shadow novamente.

Desta vez, o comando cat será executado com as permissões do proprietário do arquivo (geralmente root) ao invés das permissões do usuário que executou o comando.

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

Como você temporariamente concedeu permissão ao A-usuario 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-usuario) 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 do Linux (SGID)

Executar arquivos com permissões especiais no Linux via SUID funciona bem. Mas e se você visar fluxos de trabalho colaborativos, onde múltiplos usuários colaboram em projetos? Tipicamente, você deve garantir que os arquivos recém-criados herdem a propriedade do grupo do diretório pai.

Ao enfrentar esse cenário, o SGID se mostra um fator decisivo. Este recurso poderoso simplifica a gestão de recursos compartilhados e melhora os fluxos de trabalho baseados em grupo em ambientes Linux.

Para ver como funciona o SGID, você criará um grupo, adicionará usuários a ele, definirá permissão SGID em um diretório e testará sua funcionalidade da seguinte forma:

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 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 produzem saída, o que se aplica a todo este 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 que o SGID estiver definido, 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 o usuário userA.

mkdir /home/userA
chown userA:userA /home/userA

9. Execute os seguintes comandos para trocar (su) para o 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 durante todo este tutorial), mas você verificará as permissões do arquivo na etapa seguinte.

# 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 novos arquivos no diretório /demo-dir herdem a propriedade do grupo do diretório, um bit SGID deve ser definido no diretório, o que você cobrirá nos seguintes passos.

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 do usuárioA
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 que você adicionou ao diretório /demo-dir.

stat /demo-dir

Como mostrado abaixo, você notará que o bit SUID 2 é 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 funcionar conforme o 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 do 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ário B
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 Acesso Restrito)

A habilitação de fluxos de trabalho colaborativos em diretórios Linux promove o trabalho em equipe e colaboração contínua. Mas quando é necessário estabelecer um ambiente seguro para gerenciar arquivos de forma eficaz, as permissões do Bit de Acesso Restrito fazem o truque.

Ao definir as permissões do Bit de Acesso Restrito, você está basicamente colocando as “chaves do castelo” nas mãos do proprietário do arquivo, proprietário do diretório ou usuário root. Isso 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 Acesso Restrito, você deve primeiro criar um diretório compartilhado com as seguintes etapas:

1. Faça login como usuário root e crie um diretório (compartilhado) (mkdir) onde vários usuários podem criar arquivos.

# Troque para 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ão de gravação 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 última parte 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. Troque para userA e crie um arquivo chamado fileA.txt (arbitrário) no diretório /shared-dir:

# Troque 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
# Trocar 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 o usuárioA
su - userA
# Excluir um arquivo pertencente ao usuárioB
rm /shared-dir/fileB.txt

Você receberá uma saída como a mostrada abaixo, pois 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) para listar todos os arquivos dentro do diretório compartilhado (/shared-dir).

ls /shared-dir/

Se as permissões do Sticky Bit estiverem funcionando, você verá que o arquivo fileB.txt criado pelo usuárioB está seguro e não foi excluído.

Confirming the fileB.txt file still exists

Conclusão

Ao concluir esta exploração das permissões especiais no Linux, você desbloqueou um conjunto robusto de ferramentas: o SUID, SGID e Bit Pegajoso (Sticky Bit). Armado com esse conhecimento, agora você pode ajustar o controle de acesso e proteger seus arquivos com precisão.

Mas não pare por aqui! Que tal tentar configurar um diretório compartilhado com SGID e experimentar como os arquivos herdam a propriedade do grupo? O mundo Linux está ao seu alcance, e a cada empreendimento, você dominará a arte de proteger seu sistema com maestria!

Source:
https://adamtheautomator.com/special-permissions-in-linux/