É possível executar um programa no início do espaço do usuário com privilégios não-root?

1

Estou executando um programa a partir do script init no início do espaço do usuário, antes que a raiz principal fs seja montada.

É possível executar um aplicativo aqui sem privilégios de root?

O problema óbvio é que não há "usuários" como este ponto inicial no processo de inicialização.

    
por Duke Dougal 02.12.2016 / 04:42

1 resposta

2

Is it possible to run an application here without root privileges?

Claro que é. Assumindo que o linux foi compilado com suporte a MULTIUSER;)

The obvious issue being that there is no "users" as this very early point in the boot process.

Bem, sim, se você tentar colocar su ou sudo no initramfs, precisará adicionar muitos arquivos de configuração ( /etc/passwd , /etc/groups , /etc/shadow e assim por diante). Mas essas complexidades não são inerentes ao Linux. Afinal, o UID é apenas um número, por isso é muito fácil criar um programa de brinquedos que possa descartar privilégios de root se esse for seu objetivo:

#include <stdlib.h>
#include <unistd.h>
int main(int argc, char** argv)
{
  setuid(atoi(argv[1]));
  execvp(argv[2], argv+2);
}

Se você compila como toysu , ele pode ser invocado assim:

toysu 1234 touch /tmp/example

em que 1234 é o UID a ser usado e o restante é o comando a ser executado. Note que ele não funcionará a menos que você seja root para começar, então prefixe esse comando com sudo para testá-lo de um sistema normal.

    
por 02.12.2016 / 06:11