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 root
licenç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 root
privilé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
.
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.
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 mary
grupo 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 “t
Os ”indicadores aparecem em letras maiúsculas, o bit executável (x
) não configurado.