Como o bit pegajoso funciona?

148

SUID

O bit adesivo aplicado aos programas executáveis ​​que sinalizam o sistema para manter uma imagem do programa na memória após a conclusão da execução do programa.

Mas não sei o que está armazenado na memória. E como eu posso vê-los, neste caso.?

acaso
fonte
Aqui está um bom tutorial com exemplos e explicações trabalhados. A chave para entender isso é o sistema octal envolvido. Tutorial do Linux Sticky Bits com exemplos trabalhados .
CMP

Respostas:

193

Esta é provavelmente uma das minhas coisas mais irritantes que as pessoas estragam o tempo todo. O bit SUID / GUID e o sticky-bit são duas coisas completamente diferentes.

Se você fizer um, man chmodpoderá ler sobre o SUID e os bits pegajosos. A página do manual também está disponível aqui .

fundo

excerto

As letras rwxXst selecionam bits do modo de arquivo para os usuários afetados: leitura (r), gravação (w), execução (ou pesquisa de diretórios) (x), execução / pesquisa somente se o arquivo for um diretório ou já tiver permissão de execução para alguns usuários. usuário (X), defina o ID do usuário ou grupo nas execuções , sinalizador de exclusão restrito ou bit adesivo (t) .

SUID / GUID

O que a página de manual acima está tentando dizer é que a posição que o x ocupa na rwxrwxrwx para o usuário octal (1º grupo de rwx) e o grupo octal (2º grupo de rwx) pode assumir um estado adicional em que x se torna um s. Quando isso ocorre, esse arquivo, quando executado (se for um programa e não apenas um script de shell), será executado com as permissões do proprietário ou do grupo do arquivo.

Portanto, se o arquivo pertencer à raiz e o bit SUID estiver ativado, o programa será executado como raiz. Mesmo se você executá-lo como um usuário comum. O mesmo se aplica ao bit GUID.

excerto

Bits SETUID E SETGID

O chmod limpa o bit set-group-ID de um arquivo regular se o ID do grupo do arquivo não corresponder ao ID do grupo efetivo do usuário ou a um dos IDs de grupo suplementares do usuário, a menos que o usuário tenha privilégios apropriados. Restrições adicionais podem fazer com que os bits set-user-ID e set-group-ID do MODE ou RFILE sejam ignorados. Esse comportamento depende da diretiva e da funcionalidade da chamada do sistema chmod subjacente. Em caso de dúvida, verifique o comportamento do sistema subjacente.

O chmod preserva os bits set-user-ID e set-group-ID de um diretório, a menos que você especifique explicitamente o contrário. Você pode definir ou limpar os bits com modos simbólicos como u + se eg, e pode definir (mas não limpar) os bits com um modo numérico.

Exemplos SUID / GUID

no suid / guid - apenas os bits rwxr-xr-x estão definidos.

$ ls -lt b.pl
-rwxr-xr-x 1 root root 179 Jan  9 01:01 b.pl

bit executável do suid e do usuário ativado (letras minúsculas) - os bits rwsr-xrx estão definidos.

$ chmod u+s b.pl 
$ ls -lt b.pl 
-rwsr-xr-x 1 root root 179 Jan  9 01:01 b.pl

bit ativado por suid e executável desativado (S maiúsculo) - os bits rwSr-xr-x estão definidos.

$ chmod u-x b.pl
$ ls -lt b.pl 
-rwSr-xr-x 1 root root 179 Jan  9 01:01 b.pl

bit executável do guid & group ativado (letras minúsculas) - os bits rwxr-sr-x estão definidos.

$ chmod g+s b.pl
$  ls -lt b.pl 
-rwxr-sr-x 1 root root 179 Jan  9 01:01 b.pl

bit guid ativado e executável desativado (S maiúsculo) - os bits rwxr-Sr-x estão definidos.

$ chmod g-x b.pl
$  ls -lt b.pl 
-rwxr-Sr-x 1 root root 179 Jan  9 01:01 b.pl

pedaço pegajoso

O bit adesivo, por outro lado, é indicado como t, como no /tmpdiretório:

$ ls -l /|grep tmp
drwxrwxrwt. 168 root root 28672 Jun 14 08:36 tmp

Esse bit deveria sempre ser chamado de "bit de exclusão restrito", pois é isso que ele realmente conota. Quando esse bit de modo está ativado, ele cria um diretório para que os usuários possam excluir apenas arquivos e diretórios dentro dos quais são proprietários.

excerto

BANDEIRA DE EXCLUSÃO RESTRITA OU BOCADO PEGAJOSO

O sinalizador de exclusão restrita ou bit adesivo é um bit único, cuja interpretação depende do tipo de arquivo. Para diretórios,
impede que usuários sem privilégios removam ou renomeiem um arquivo no diretório, a menos que sejam proprietários do arquivo ou diretório; isso é chamado de sinalizador de exclusão restrita para o diretório e é comumente encontrado em diretórios graváveis ​​em todo o mundo como / tmp. Para arquivos regulares em alguns sistemas mais antigos, o bit salva a imagem de texto do programa no dispositivo de troca, para que seja carregado mais rapidamente quando executado; isso é chamado de bit pegajoso.

slm
fonte
43
Na verdade, o bit pegajoso podia ser aplicado anteriormente aos executáveis, o que fazia com que eles permanecessem em troca após o primeiro carregamento. Isso poderia economizar muito uso desnecessário de disco / rede (NFS) e CPU para programas muito usados. No entanto, nem o Linux, nem a maioria dos sistemas Unix (todos?) Suportam isso por mais tempo (ele foi removido do kernel). É "pegajoso", porque o executável ficou preso no swap. Além disso, foi usado para diretórios como você descreve.
Baard Kopperud
4
Na verdade, "muito usado ou muito grande" seria uma descrição melhor. Lembre-se de que minha faculdade tinha o navegador Netscape como "pegajoso" em seu computador HP-UX em 1995. Programas pequenos que eram usados ​​com muita frequência (por exemplo, comandos do sistema executados com frequência pelo cron) e programas grandes (por exemplo, Netscape) eram os principais candidatos a serem "pegajosos". Nos dois casos, recarregá-los constantemente do disco / NFS seria um desperdício.
Baard Kopperud
8
Os programas de bits fixos deveriam permanecer residentes na RAM, não na troca (carregar uma imagem de um arquivo de troca não é muito mais rápido do que carregá-la de um disco do sistema de arquivos). Destina-se a comandos essenciais no nível do SO, como ls. Obviamente, apenas o superusuário pode definir o bit em um arquivo. Tornou-se menos importante depois que a memória virtual e as bibliotecas compartilhadas foram introduzidas, especialmente quando os pagers se tornaram mais inteligentes e podem decidir dinamicamente quais páginas manter residente.
21813 Alexis
4
E como a propriedade sticky não fazia sentido para um diretório, a mesma parte da máscara de permissões foi posteriormente interpretada para modificar a semântica tradicional de criação de arquivos dos diretórios.
21813 Alexis
5
@alexis: Originalmente, os programas de bit pegajoso eram mantidos no espaço de troca. Isso foi muito mais rápido que a leitura do sistema de arquivos, porque a leitura de imagens de arquivos de troca era um setor contíguo e, portanto, podia ser lida principalmente de forma assíncrona. Com os primeiros sistemas de arquivos, não havia "durações de execução" do setor e a maioria dos drivers de sistema de arquivos lia um setor por vez, mesmo que os setores fossem consecutivos. O resultado em um PDP-40 foi que programas pegajosos pareciam carregar instantaneamente enquanto programas não pegajosos levavam o segundo ou o habitual. Eu acho que tínhamos apenas edaderência.
wallyk
8

"O bit adesivo aplicado aos programas executáveis ​​sinalizando o sistema para manter uma imagem do programa na memória após a execução do programa."

Eu acho que é uma informação bastante obsoleta, hoje os Unixes modernos ignoram isso. No Linux, o sticky bit é relevante apenas para diretórios. Veja aqui e o artigo bastante informativo da Wikipedia .

De qualquer forma, nesse antigo comportamento, a imagem (apenas o "código", não os dados) era mantida apenas na memória virtual - normalmente trocada, não na memória real, para executá-la mais rapidamente na próxima vez.

leonbloy
fonte
3

O que são bits fixos?

Um bit fixo é um bit de permissão definido em um diretório que permite que apenas o proprietário do arquivo nesse diretório ou o usuário raiz exclua ou renomeie o arquivo. Nenhum outro usuário tem os privilégios necessários para excluir o arquivo criado por outro usuário.

Essa é uma medida de segurança para evitar a exclusão de pastas críticas e seu conteúdo (subdiretórios e arquivos), embora outros usuários tenham permissões totais.

chandrakumar.M
fonte
1
Isso não está certo: en.wikipedia.org/wiki/Sticky_bit
AB
7
@AB Parece-me bastante preciso, quase a ponto de parafrasear o início do artigo da Wikpedia que você cita. O que há de errado com isso?
roaima
Eu diria que a resposta está incompleta. "Sticky" também indica que o executável seria mantido no espaço de troca para que ele fosse executado mais rapidamente. Agora, isso é história antiga, mas em sistemas de arquivos mais antigos, os drivers costumavam ler um setor por vez, mesmo que os setores fossem consecutivos. Isso fez com que os executáveis ​​não pegajosos fossem lentos, a viscosidade fazia muito sentido naquele momento.
GhostCode