Estoy intentando crear mi propio script de inicio PID 1, para llamarlo desde la línea de cmd de inicio con init=/myscript. ¿Cómo puedo hacer que funcione en un sistema de archivos real, con cualquier kernel?
Cuando se ejecuta en un initrd, funciona bien y puede montar cosas, etc., pero cuando lo uso en mi sistema de archivos sin un initrd, no puede montar cosas porque:
mount: only root can do that (effective UID is 1000)
Cuando descarto cualquier comando que falla, inevitablemente emite geteuid32() y devuelve 1000. ¿Por qué? ¿Cómo puedo ejecutar como euid 0?
Respuesta1
No existe un tratamiento especial para init
on initrd
, por lo que debe haber algún otro problema.
Si se ejecuta como root
, euid
coincidirá con el propietario del binario si el setuid
bit está establecido.
Verifique la propiedad en /bin/mount
.
Respuesta2
Utilice Sudo desde cuentas sin privilegios
El error te dice cuál es el problema: estás usando una cuenta "mortal" con UID 1000, no la cuenta raíz con UID 0, para llamar al montaje. Muchas funciones del sistema deben ejecutarse como root. Muchos procesos como initrd se ejecutan como root, por lo que los comandos tienen privilegios suficientes para ejecutarse. Sin embargo, cuando ejecuta cosas desde su cuenta de usuario habitual, necesitasuosudopara realizar acciones como un usuario diferente.
Paramontar, querrás llamarlo así:
sudo mount /mnt/foo
A menos que lo especifique la -u
bandera, el usuario de los comandos sudo por defecto es root. Ejecutar su comando a través de sudo debería resolver el problema que ha descrito, siempre que la cuenta con UID 1000 esté configurada correctamente en el lugar apropiado./etc/sudoerso/etc/sudoers.darchivo.
Ver también
man 5 sudo
man 5 sudoers
man 8 visudo