Setuid, Setgid e Bit Sticky explicou

Setuid, Setgid e Bit Sticky explicou
Linux tem 3 tipos de acesso a arquivos e diretórios: permissões de leitura, escrita e execução.

A leitura da permissão concede usuários acesso a arquivos de leitura enquanto escrevem permissões permitem que os usuários editem ou removam arquivos, as permissões de execução permitem que eles executem arquivos.

Essas permissões podem ser aplicadas com diferenças para o proprietário do arquivo, usuários pertencentes ao grupo do arquivo e todos os usuários (não o proprietário nem os usuários do grupo).

O bit setuid, Setgid e Sticky permitem implementar restrições ou privilégios adicionais sem alterar a tabela de permissões.

As permissões regulares do Linux foram explicadas profundamente nas permissões Linux explicadas, uma leitura recomendada antes de continuar com este tutorial. O tutorial atual se concentra no sinalizador setuid, setgid e pegajoso para "herdar" o proprietário do arquivo ou permissões de grupo a usuários com acesso restrito e impedir que usuários não privilegiados removam arquivos que eles não possuem.

Compreendendo o bit setuid:

A captura de tela a seguir mostra o conteúdo do diretório LinuxHintSetuid e as permissões de arquivo:

Como você pode ver, todos os arquivos pertencem ao usuário e ao grupo Linuxhint; o arquivo tutorial.TXT tem permissões de leitura e escrita para o proprietário, lendo permissões para usuários do mesmo grupo e sem permissões para outros usuários.

Se um usuário que não seja o proprietário do arquivo, que não pertence ao grupo, tenta ler o arquivo, ele falhará devido à falta de permissões para todos os usuários ou outros usuários.

A captura de tela a seguir mostra o usuário torvalds tentou sem sucesso acessar o tutorial.TXT arquivo.

Agora vamos supor o usuário Linuxhint quer manter o tutorial.TXT restrito ao permitir que os usuários o leiam apenas através de um aplicativo específico. Isso pode ser alcançado usando a bandeira setuid.

Em outras palavras, o usuário torvalds Não será capaz de ler o arquivo tutorial.TXT. Ainda assim, ele vai executar o leitor-de propriedade do usuário Linuxhint, herdando suas permissões durante o processo de execução. Isso é possível se o proprietário adicionar o setuid Bit na tabela de permissão do arquivo, instruindo o arquivo a ser sempre processado como pelo proprietário e com os privilégios do proprietário, mesmo que executados por outro usuário como torvalds.

OBSERVAÇÃO: Você pode usar o código C abaixo para reproduzir os seguintes exemplos. Compilar a corrida Código CC.C -ORer

Código do aplicativo do leitor:

#incluir
#include // para function ()
int main ()
char c [1000];
Arquivo *fptr;
if ((fptr = fopen ("tutorial.txt "," r ")) == null)
printf ("Erro! O arquivo não pode ser aberto.");
// o programa sai se o ponteiro do arquivo retornar nulo.
saída (1);

sono (5);
// lê texto até que a Newline seja encontrada
fScanf (fptr, "%[^\ n]", c);
printf ("Dados do arquivo: \ n%s", c);
fclose (FPTR);
retornar 0;

Antes de prosseguir, vamos ver o que acontece se o usuário Torvalds, quem tem permissões para executar o aplicativo leitor, executa o leitor Antes de Linuxhint aplica o sinalizador setuid.

Como você pode ver, Torvalds conseguiu executar o leitor, um programa C projetado para ler o tutorial.txt com a seguinte tabela de permissões, mas o leitor não concedia a ele acesso a tutorial.TXT porque torvalds não tem permissões para lê -lo.

Leitor A tabela de permissões é mostrada abaixo:

-rwxr-xr-x 1 linuxhint linuxhint leitor

Agora vamos ver o que acontece quando Linuxhint adiciona a bandeira setuid ao leitor Tabela de permissões em execução:

CHMOD U+S LEITOR

Se você correr ls -l , Você notará a tabela de permissões alterada e o nome do programa aparece em vermelho, alertando você sobre o possível risco. A nova tabela de permissões é assim:

-RWSR-XR-X

O novo S Destacei em Blue Shows que o arquivo tem o sinalizador setuid; Toda vez que o arquivo é executado, o processo pertence ao proprietário do arquivo independentemente de quem executa o programa. Como o proprietário executará o arquivo antes do sistema, a execução herdará as permissões do proprietário. É por isso que agora, depois Linuxhint Adicionado a bandeira setuid, o usuário torvalds Deve ser capaz de ler o tutorial.txt através do leitor.

OBSERVAÇÃO: Torvalds pode executar o leitor Porque todos os usuários têm direitos de execução; se Linuxhint Remove as permissões de execução para todos os usuários, torvalds Não será capaz de executá -lo.

O setuid Flag define o arquivo como pelo proprietário, e o usuário que o executa herdará as permissões do proprietário, mas o Setuid não define quem pode executar o arquivo.

Como você pode ver, Torvalds conseguiu ler “Dados do arquivo:

Você não deve ser capaz de ler isso ”.

Se, embora o Torvalds executar o script, eu execute o seguinte comando PS, você verá uma diferença entre o usuário real (Ruser) e o usuário eficaz (usuário) do processo 4332 (leitor).

PS -AO PID, UID, RUSER, Usuário, Rgroup, Egroup, Comando

A captura de tela acima mostra apesar do verdadeiro usuário em execução leitor é torvalds ou outro usuário, o arquivo é sempre processado como por Linuxhint, com suas permissões, e é por isso que os torvalds podem ver o arquivo apenas através do aplicativo.

O sinalizador setuid pode ser removido em execução:

chmod u-s

Compreendendo o bit Setgid:

O SetGid é semelhante ao setuid, mas, em vez de alterar o usuário que processa o arquivo, substitui o grupo eficaz para o grupo de filas, concedendo acesso de acordo com as permissões do grupo.

Se o Bit Setgid for aplicado a um diretório, todos os arquivos criados no diretório pertencem ao grupo do diretório.

A captura de tela a seguir mostra que o Torvalds não tem permissão para ler o tutorial.txt, apenas o proprietário e o grupo podem ler o arquivo. Mesmo com um leitor, Torvalds não conseguem ler o arquivo porque ele não tem permissões, e nenhum bit setuid foi adicionado.

Vamos ver o que acontece depois que o Linuxhint adiciona SetGid:

CHMOD G+S LEITOR


-rwxr-sr-x: Como você pode ver na tabela de permissão, agora o S está na coluna do grupo, o que significa que quando o programa é executado, ele sempre será executado com seus próprios privilégios de grupo.

Então, vamos ver o que acontece quando Torvalds tenta acessar o tutorial.txt novamente usando o leitor:

Torvalds conseguiu ler o tutorial.TXT; Vamos ver o que o comando PS mostra no processo do leitor:

PS -AO PID, UID, RUSER, Usuário, Rgroup, Egroup, Comando

Como você pode ver no processo 6713, o usuário executando o arquivo é Torvalds, mas o grupo eficaz é Linuxhint, o grupo do arquivo; É por isso que o Torvalds poderia acessar o tutorial.txt com permissões de grupo do leitor.

O bit Setgid pode ser removido em execução:

chmod g-s

Compreendendo a parte pegajosa:

Outro bit de permissão é o bit pegajoso, que, se definido, impede que usuários não privilegiados removam conteúdo. Se o bit pegajoso for aplicado, apenas o proprietário ou a raiz podem remover arquivos, mas nem todos os usuários, mesmo que tenham permissões de escrita.

O exemplo a seguir mostra que o usuário Linuxhint adiciona a parte pegajosa ao diretório atual:

chmod +t .

drwxr-xr-t: Como você pode ver agora, há um T no final da tabela de permissões do LinuxHintSetuid diretório. Isso significa que os usuários não podem remover arquivos que não possuem no diretório, mesmo que tenham permissões de escrita.

A captura de tela a seguir mostra permissões para um arquivo chamado “algo”Sob o diretório LinuxHintSetuid Com a parte pegajosa especial:

Como você pode ver, apesar de terem permissões de escrita no diretório e no arquivo, os torvalds não podem remover o arquivo algo:

Espero que você tenha encontrado este tutorial sobre Setuid, Setgid e Sticky Bit útil. Continue seguindo Linuxhint para mais dicas e tutoriais do Linux.