Por que util-linux runuser (su) fork?

2

Usando runuser do util-linux (um ponto de entrada diferente para su , que só opera se a partir da raiz), vê-se uma árvore de processos parecida com a seguinte:

[root] runuser -u username sometool
  \- [username] sometool

Qual é o propósito de manter esse processo pai ao invés de simplesmente descartar privilégios e exec ing o alvo?

    
por Charles Duffy 11.03.2016 / 22:24

2 respostas

3

Como você vê na manpage:

--session-command=command Same as -c , but do not create a new session (discouraged).

Portanto, a chamada padrão requer a criação de um novo processo, porque uma nova sessão precisa de um novo PID.

Além disso, o código de retorno depende do status de saída ou do sinal que matou o processo. Este último ponto também requer um processo que monitore o status do processo filho.

Acho que isso é devido ao design. Ao contrário de su , IMO, runuser é feito para ser usado em scripts (portanto, nunca solicite senha, identifique melhor o status de erro e também separe o tratamento de sinais (nova sessão) do chamador.

    
por 11.03.2016 / 22:55
2

What's the purpose of keeping this parent process around

Eu li create_watching_parent no código-fonte su-common.c . Parece que o pai fica por perto para poder fazer o seguinte:

  • o pai chama cleanup_pam depois que o filho sai
  • se a criança sair por causa de um sinal, o pai imprimirá (para stderr) a disposição da criança da mesma forma que uma casca faria.
  • se o pai receber um sinal SIGINT, SIGQUIT ou SIGTERM, o pai pegará o sinal e matará o filho com SIGTERM e SIGKILL, depois se matará com o mesmo sinal recebido. Eu acho que isso é feito de modo que seja simples para o usuário encerrar o comando em situações em que o filho se colocou em uma sessão diferente ou no pgrp.
por 12.03.2016 / 11:01

Tags