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 init
on initrd
, então deve haver algum outro problema.
Se executado como root
, euid
corresponderá ao proprietário do binário se o setuid
bit 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 -u
sinalizador, 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