Почему скрипт shebang, запущенный как init=, имеет euid 0 при запуске из initrd, но не в других случаях?

Почему скрипт shebang, запущенный как init=, имеет euid 0 при запуске из initrd, но не в других случаях?

Я пытаюсь создать свой собственный скрипт инициализации PID 1, который будет вызываться из командной строки загрузки с помощью init=/myscript. Как заставить его работать на реальной файловой системе с любым ядром?

Когда он запущен в initrd, он работает нормально и может монтировать что-либо и т. д., но когда я использую его в своей файловой системе без initrd, он не может ничего монтировать, потому что:

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

Когда я запускаю любую команду, которая не удалась, она неизбежно выдает geteuid32(), который возвращает 1000. Почему? Как мне запуститься как euid 0?

решение1

initСпециального подхода к on не существует initrd, так что, должно быть, есть какая-то другая проблема.

Если запустить как root, то euidбудет соответствовано владельцу двоичного файла, если setuidбит установлен.

Проверьте право собственности на /bin/mount.

решение2

Используйте Sudo из непривилегированных аккаунтов

Ошибка сообщает вам, в чем проблема: вы используете «смертную» учетную запись с UID 1000, а не учетную запись root с UID 0, чтобы вызвать mount. Многие системные функции должны запускаться как root. Многие процессы, такие как initrd, запускаются как root, поэтому команды имеют достаточные привилегии для запуска. Однако, когда вы запускаете что-то из своей обычной учетной записи пользователя, вам нужновсилисудодля выполнения действий от имени другого пользователя.

Дляустанавливать, вы бы хотели назвать это так:

sudo mount /mnt/foo

Если флагом не указано иное -u, пользователь для команд sudo по умолчанию — root. Выполнение вашей команды через sudo должно решить описанную вами проблему, при условии, что учетная запись с UID 1000 правильно настроена в соответствующем/etc/sudoersили/etc/sudoers.dфайл.

Смотрите также

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

Связанный контент