Como usar SUID, SGID e Sticky Bits em Linux

Conteúdo

Uma janela de terminal em um sistema Linux.

SUL, SGID e Sticky Bits são permissões especiais poderosas que você pode definir para executáveis ​​e diretórios no Linux. Vamos compartilhar os benefícios, e as possíveis desvantagens, para usá-los.

Já estão em uso

Integrar a segurança em um sistema operacional multiusuário apresenta vários dilemas. Pegue o conceito (pelo visto) senhas básicas, como um exemplo. Todos devem ser armazenados de forma que toda vez que alguém fizer login, o sistema pode comparar a senha que você digita com a cópia armazenada. Aparentemente, já que as senhas são as chaves do reino, deve ser protegido.

En Linux, as senhas armazenadas são protegidas de duas maneiras: são criptografados e apenas alguém com root Os privilégios podem entrar no arquivo que contém as senhas. Isso pode soar bem, mas apresenta um dilema: se apenas pessoas com root privilégios podem inserir senhas armazenadas, Como aqueles que não têm esse acesso mudam suas senhas??

Elevando seu status

Em geral, Os comandos e programas do Linux são executados com o mesmo conjunto de permissões que a pessoa que inicia o programa. Quando root execute o passwd comando mudar uma senha, corre com rootlicenças de. Isso significa que passwd O comando pode inserir livremente as senhas armazenadas no /etc/shadow procedimentos.

O ideal seria um esquema em que qualquer pessoa no sistema pudesse iniciar o passwd Programa, mas tem o passwd manter programa rootprivilégios elevados. Isso permitiria que qualquer pessoa alterasse sua própria senha.

O cenário acima é exatamente o que o bit Determine User ID faz (SUID) faz. Isso executar programas e comandos com as permissões do proprietário do arquivo, em vez das permissões da pessoa que inicia o programa.

Você está elevando o status do programa

Apesar disto, há outro dilema. A pessoa deve ser impedida de adulterar a senha de outra pessoa. Linux incorpora o SUID esquema que permite executar aplicativos com um conjunto de permissões temporariamente emprestadas, mas isso é apenas metade da história de segurança.

O mecanismo de controle que impede alguém de trabalhar com a senha de outra pessoa está incluído no passwd Programa, não o esquema de sistema operacional e SUID.

Programas executados com privilégios elevados podem apresentar riscos de segurança se não forem criados com uma mentalidade de “segurança desde o projeto”. Isso significa que a segurança vem em primeiro lugar e se baseia nisso.. Não escreva seu programa e depois tente dar a ele uma camada de segurança.

A maior vantagem do software de código aberto é você mesmo pode olhar o código-fonte ou consulte as avaliações de pares confiáveis. No código-fonte do passwd Programa, existem cheques, para que você possa ver se a pessoa que está executando o programa está root. Diferentes capacidades são possíveis se alguém root (ou alguém usando sudo).

Está é o código que detecta se alguém está root.

Um snippet de código-fonte de "passwd.c"

A seguir está um exemplo que leva em consideração. Devido a que root você pode mudar qualquer senha, o programa não precisa se preocupar com as verificações que realiza regularmente para ver quais senhas a pessoa tem permissão para alterar. Então, para root, isso pule essas verificações e saia da função de verificação.

Um snippet de código-fonte de "passwd.c".

Com os principais comandos e utilitários do Linux, você pode ter certeza de que eles têm segurança embutida e o código foi verificado frequentemente. De qualquer forma, há sempre a ameaça de explorações ainda desconhecidas. Apesar disto, patches ou atualizações aparecem rapidamente para combater quaisquer vulnerabilidades identificadas recentemente.

É um software de terceiros, especialmente qualquer outro que não seja de código aberto, você deve ter muito cuidado ao usar SUID com. Não estamos dizendo para não, mas, se isso acontecer, você deve garantir que não exponha seu sistema a riscos. Você não quer elevar os privilégios de um programa que não vai se autogovernar adequadamente e da pessoa que o executa.

Comandos do Linux que usam SUID

A seguir estão alguns dos comandos do Linux que usam o bit SUID para conceder privilégios elevados ao comando quando executado por um usuário normal:

ls -l / bin / su
ls -l / bin / ping
ls -l / bin / mount
ls -l / bin / umount
ls -l / usr / bin / passwd

Observe que os nomes dos arquivos são destacados em vermelho, indicando que o bit SUID está definido.

As permissões em um arquivo ou diretório são geralmente representadas por três grupos de três caracteres: rwx. Isso significa ler, escrita e execução. Se os cartões estiverem presentes, essa permissão foi concedida. Se um script (-) em vez de uma carta está presente, Apesar disto, essa permissão não foi dada.

Existem três grupos dessas permissões (de esquerda a direita): para o proprietário do arquivo, para membros do grupo de arquivo e para outros. Quando o SUID bit é definido como um arquivo, uma “s” representa a permissão de execução do proprietário.

Se ele SUID bit é definido como um arquivo que não tem recursos executáveis, uma “S” letra maiúscula indica isso.

Vamos ver um exemplo. Usuário regular dave escreva o passwd comando:

senha

a passwd comandos de comando dave para sua nova senha. Podemos usar o ps comando para ver os detalhes dos processos em execução.

Usaremos ps com grep em uma janela de terminal diferente e procure o passwd processo. Também usaremos o -e (cada procedimento) e -f (formato completo) opções com ps.

Nós escrevemos o seguinte comando:

ps -e -f | grep passwd

Duas linhas são relatadas, o segundo dos quais é o grep procedimento procurando comandos com a string “senha” neles. Apesar disto, é a primeira linha que nos interessa, porque é o da passwd processo dave jogado fora.

Podemos ver o passwd O procedimento é executado da mesma forma que se root Eu tinha jogado isso.

Configuração de bit SUID

É fácil mudar o SUID um pouco com chmod. a u+s modo simbólico define o SUID pequeno e o u-s modo simbólico limpa o SUID pequeno.

Para ilustrar alguns dos conceitos de bit SUID, criamos um pequeno programa chamado htg. Ele está no diretório raiz do dave Nome do usuário, e não tem o SUID conjunto de bits. Quando você corre, mostra IDs de usuário reais e eficazes (UID).

Real UID pertence à pessoa que lançou o programa. O ID efetivo é a conta com a qual o programa se comporta como se o tivesse iniciado.

Nós escrevemos o seguinte:

ls -lh htg
./htg

Quando executamos a cópia local do programa, vemos que os IDs reais e efetivos são configurados em dave. Então, está se comportando como um programa normal deveria.

Vamos copiar no /usr/local/bin diretório para outros usarem.

Nós escrevemos o seguinte, usando chmod para configurar o SUID pedaço, e depois verifique se foi configurado:

sudo cp htg / usr / local / bin
sudo chmod u + s / usr / local / bin / htg
ls -hl / usr / local / bin / htg

Então, o programa é copiado e o bit SUID é definido. Nós iremos executá-lo novamente, mas desta vez vamos executar a cópia no /usr/local/bin Arquivo:

htg

Ainda quando dave começou o programa, o ID efetivo é definido no root Nome do usuário. Portanto sim mary inicie o programa, ocorre o mesmo, como é mostrado a seguir:

htg

O id real é mary, e o ID efetivo é root. O programa é executado com as permissões do usuário root.

RELACIONADO: Como usar o comando chmod no Linux

El bit SGID

O conjunto de ID de grupo (SGID) bit é muito semelhante a SUID pequeno. Quando o SGID bit é definido como um arquivo executável, o grupo efetivo é definido como o grupo de arquivos. O procedimento é executado com as permissões dos membros do grupo do arquivo, em vez das permissões da pessoa que o iniciou.

Nós ajustamos nosso htg programa para mostrar também o grupo efetivo. Vamos mudar o grupo de htg programa para ser um usuário marygrupo padrão, mary. Também usaremos o u-s e g+s modos simbólicos com chown para remover o SUID bit e determinar o SGID.

Para faze-lo, nós escrevemos o seguinte:

raiz sudo chown:maria / usr / local / bin / htg
sudo chmod u-s,g + s / usr / local / bin / htg
ls -lh / usr / local / bin / htg

Você pode ver o SGID bit denotado por “s” em permissões de grupo. Ao mesmo tempo, observe que o grupo está configurado para mary e o nome do arquivo agora está destacado em amarelo.

Antes de executar o programa, vamos estabelecer quais grupos dave e mary pertence. Nós vamos usar o id comando com o -G opção (grupos), para imprimir todos os IDs de grupo. Subseqüentemente, vamos executar o htg programa como dave.

Nós escrevemos os seguintes comandos:

id -G dave
id -G maria
htg

O ID de grupo padrão para mary isto é 1001, e o grupo efetivo do htg programa é 1001. Então, mesmo quando foi lançado por dave, é executado com as permissões dos membros no mary grupo. É o mesmo como se dave tinha se juntado ao mary grupo.

Vamos aplicar o SGID bit para um diretório. Primeiro, vamos criar um diretório chamado “trabalho” e mais tarde mudaremos seu grupo para “geek”. Mais tarde iremos configurar o SGID bit no diretório.

Quando usamos ls para verificar a configuração do diretório, nós também usaremos o -d (diretório) para que possamos ver os detalhes do diretório, não é o seu conteúdo.

Nós escrevemos os seguintes comandos:

sudo mkdir trabalho
sudo chown dave:trabalho geek
sudo chmod g + s trabalho
ls -lh -d trabalho

a SGID Bit e grupo estão definidos “geek”. Isso afetará os itens criados no work diretório.

Escrevemos o seguinte para entrar no work diretório, crie um diretório chamado “demonstração” e verifique suas propriedades:

trabalho de cd
demonstração mkdir
ls -lh -d demo

a SGID pouco e grupo “geek” são aplicados automaticamente ao diretório “demonstração”.

Vamos escrever o seguinte para criar um arquivo com o touch comando e verifique suas propriedades:

toque em útil.sh
ls -lh útil.sh

O grupo do novo arquivo é automaticamente definido como “geek”.

RELACIONADO: Como usar o comando chown no Linux

A parte pegajosa

A parte pegajosa recebe o nome de seu objetivo histórico. Quando configurado em um executável, instrui o sistema operacional que as partes de texto do executável devem ser mantidas em troca, o que acelera sua reutilização. En Linux, sticky bit afeta apenas um diretório; configurá-lo para um arquivo não faria sentido.

Quando você define a ponta de cola em um diretório, as pessoas só podem remover arquivos que pertencem a elas dentro desse diretório. Eles não podem remover arquivos que pertencem a outra pessoa, não importa a combinação de permissões de arquivo definida nos arquivos.

Isso permite que você crie um diretório que todos, e os processos que começam, pode usar como armazenamento de arquivo compartilhado. Os arquivos estão protegidos porque, novamente, ninguém pode deletar os arquivos de outra pessoa.

Vamos criar um diretório chamado “compartilhado”. Nós vamos usar o o+t modo simbólico com chmod para determinar o sticky bit nesse diretório. Mais tarde, veremos as permissões nesse diretório, assim como o /tmp e /var/tmp diretórios.

Nós escrevemos os seguintes comandos:

mkdir compartilhado
sudo chmod o + t compartilhado
ls -lh -d compartilhado
ls -lh -d / tmp
ls -lh -d / var / tmp

Se o sticky bit estiver definido, o bit executável de “de outros” conjunto de permissões de arquivo está definido como “t”. O nome do arquivo também é destacado em azul.

a /tmp e /var/tmp As pastas são dois exemplos de diretórios que têm todas as permissões de arquivo definidas para o proprietário, o grupo e outros (é por isso que eles são destacados em verde). Eles são usados ​​como locais compartilhados para arquivos temporários.

Com essas permissões, qualquer um deveria, teoricamente, ser capaz de fazer qualquer coisa. Apesar disto, sticky bit os substitui e ninguém pode remover um arquivo que não pertence a eles.

Lembretes

O próximo é uma lista de verificação rápida do que cobrimos anteriormente para referência futura.:

  • SUID só funciona em arquivos.
  • Pode aplicar SGID para diretórios e arquivos.
  • Você só pode aplicar o sticky bit aos diretórios.
  • Se ele “s“,”g“, o “tOs ”indicadores aparecem em letras maiúsculas, o bit executável (x) não configurado.

Assine a nossa newsletter

Nós não enviaremos SPAM para você. Nós odiamos isso tanto quanto você.