¿Por qué un script shebang que se ejecuta como init= tiene un euid de 0 cuando se ejecuta desde un initrd, pero no en otro caso?

¿Por qué un script shebang que se ejecuta como init= tiene un euid de 0 cuando se ejecuta desde un initrd, pero no en otro caso?

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 initon initrd, por lo que debe haber algún otro problema.

Si se ejecuta como root, euidcoincidirá con el propietario del binario si el setuidbit 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 -ubandera, 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

información relacionada