Set-UID, ambiente e descritores

Seguir a autoridade de um processo, a interpretação pela shell e os recursos herdados.

TLDR

Perguntar sobre esta página

ChatGPTClaudePerplexityGrokGeminiCopiar e abrirDeepSeekCopiar e abrir

Ambiente e identidade

OperaçãoEfeito
fork()Cria um filho com cópia do ambiente; alterações no filho não mudam automaticamente o pai.
execve(caminho, argv, envp)Substitui o programa no mesmo processo e transmite o ambiente indicado em envp.
Executar um binário Set-UIDPode mudar o UID efetivo para o dono, conservando o UID real.

O UID real identifica normalmente quem iniciou o processo; o efetivo participa nas decisões de acesso. nosuid, no_new_privs e outras restrições podem impedir o efeito Set-UID. Linux ignora-o em scripts interpretados.

Passar environ a execve transmite o ambiente corrente. Uma lista de pares terminada por ponteiro nulo permite selecionar os valores. envp=NULL é aceite em Linux, mas não é uma forma portátil de transmitir ambiente vazio.

O carregador filtra certas variáveis, como LD_PRELOAD, em execução segura. O programa continua responsável pelas outras entradas externas que usa.

Em Linux com glibc atual, seteuid muda só o efetivo. Partindo de real 1000, efetivo 0 e guardado 0, seteuid(1000) conserva o 0 guardado e permite recuperação por seteuid(0). setuid(1000) com CAP_SETUID muda os três para 1000. Sem outra autoridade, já não permite recuperar 0. Verifica erros e trata grupos, capabilities e descritores separadamente.

PATH e shell

  • system("ls") invoca uma shell; PATH pode selecionar um executável numa pasta controlada pelo requerente.
  • Um caminho absoluto fixa o executável, mas a shell continua a interpretar caracteres. Em system("/bin/cat relatorio; printf MARCA"), o ; separa duas operações.
  • Na chamada direta a execve, relatorio; printf MARCA num elemento de argv é um único argumento. Não cria outra operação por interpretação da shell.
  • Ainda tens de autorizar o ficheiro, limitar opções e controlar o ambiente. O UID final de uma chamada por shell depende também da shell; algumas baixam privilégios.

Autoridade dos descritores

Uma abertura verifica a autoridade nesse momento. Baixar o UID não reaplica automaticamente essa decisão às escritas pelo descritor existente. Esta fuga de recurso é chamada capability leaking, sem implicar uma Linux capability.

Fecha descritores desnecessários antes de transferir controlo. Close-on-exec fecha no execve bem-sucedido, não ao baixar UID; o programa atual ainda pode usar o descritor antes disso. Quando possível, baixa privilégios antes de abrir recursos e verifica os erros.

No LOGBOOK, regista estado, operação, resultado e mecanismo. O navegador não reproduz processos e permissões POSIX; o guião exige o ambiente isolado docente e reposição da configuração alterada.

Seguir a fuga de autoridade.

À tua maneira

Aparência

Modo de cor
Tema
Cor de destaque

Leitura

Fonte de leitura

Álgebra, lógica e uma ideia de cada vez.

Código

Fonte do código

Navegação

Cursor de leitura, sem edição. h, j, k, l movem; / pesquisa nesta página. v seleciona caracteres; V seleciona linhas; y copia. Tab permite destacar ou comentar. Espaço ou Enter abre blocos recolhíveis. Nos cartões, h, j, k, l mudam o foco.

CSS personalizado

Ativa uma sugestão ou guarda o teu CSS. Só muda este navegador.

Usa --page, --text e --accent para acompanhar o tema.

Seletores e recuperação

.site-header, .prose, .course-card, [data-reading-history], [data-playground] e .page-actions.

Abre a aparência com a tecla vírgula ou no rodapé. Se o CSS esconder os controlos, abre esta página sem CSS personalizado.

Pesquisar

Escreve para pesquisar em todo o site.

para escolher · Enter para abrir · Esc para fechar

Copiar fórmula

A cópia automática não está disponível. Copia o LaTeX abaixo.

Pesquisar nesta página

Enter procura · n / N repetem · Esc cancela. Ctrl / Cmd K pesquisa todo o site.

Atalhos de teclado

Clica numa tecla para a mudar. Esc cancela. Backspace desativa.

PesquisarCtrl / Cmd K

Os atalhos não interferem enquanto escreves. Tab e Enter funcionam sempre.