Por que um script shebang é executado como init= tem um euid de 0 quando executado a partir de um initrd, mas não de outra forma?

Por que um script shebang é executado como init= tem um euid de 0 quando executado a partir de um initrd, mas não de outra forma?

Estou tentando criar meu próprio script de inicialização PID 1, para ser chamado a partir do cmdline de inicialização com init=/myscript. Como posso fazê-lo funcionar em um sistema de arquivos real, com qualquer kernel?

Quando é executado em um initrd, ele funciona bem e pode montar coisas, etc. - mas quando eu o uso em meu sistema de arquivos sem um initrd, ele falha ao montar coisas, porque:

mount: only root can do that (effective UID is 1000)

Quando eu rastreio qualquer comando que falhe, ele inevitavelmente emite geteuid32() e retorna 1000. Por quê? Como posso executar como euid 0?

Responder1

Não há tratamento especial para initon initrd, então deve haver algum outro problema.

Se executado como root, euidcorresponderá ao proprietário do binário se o setuidbit estiver definido.

Verifique a propriedade em /bin/mount.

Responder2

Use Sudo de contas sem privilégios

O erro está dizendo qual é o problema: você está usando uma conta "mortal" com UID 1000, e não a conta root com UID 0, para chamar mount. Muitas funções do sistema precisam ser executadas como root. Muitos processos como o initrd são executados como root, portanto, os comandos têm privilégios suficientes para serem executados. No entanto, quando você executa coisas a partir de sua conta de usuário comum, você precisasuousudopara executar ações como um usuário diferente.

Paramontar, você gostaria de chamá-lo assim:

sudo mount /mnt/foo

A menos que especificado pelo -usinalizador, o usuário para comandos sudo usa como padrão root. Executar seu comando através do sudo deve resolver o problema que você descreveu, desde que a conta com UID 1000 esteja configurada corretamente no local apropriado/etc/sudoersou/etc/sudoers.darquivo.

Veja também

  • man 5 sudo
  • man 5 sudoers
  • man 8 visudo

informação relacionada