Как делает использование chroot qemu для перекрестной работы сред компиляции?

Необходимо изменить umask, чтобы измениться, как новые файлы создаются в домашней папке. Это обычно делается путем редактирования сценария запуска оболочки, здесь существует довольно хороший обзор

Что касается изменения всех полномочий в Вашей домашней папке к 700, я задаюсь вопросом, как это влияло бы на сервисы, работающие под сервисными учетными записями, которые должны сконфигурировать информацию от Вашей домашней папки... Можно закончить, препятствуют тому, чтобы эти сервисы читали конфигурационные файлы, которых они требуют.

3
20.08.2014, 00:39
1 ответ

Linux имеет механизм, позволяющий регистрировать плагины так, чтобы ядро вызывало программу-интерпретатор, когда ему дано указание выполнить файл: binfmt_misc. Немного упрощая ситуацию, когда исполняемый файл выполняется, ядро считывает первые несколько байт и идет следующим образом:

  • Начинается ли он с четырех байт \x7fELF, за которым следует корректно выглядящий заголовок ELF? Если да, то используйте загрузчик ELF внутри ядра, чтобы загрузить программу и выполнить ее.
  • Начинается ли он с двух байт #! (shebang)? Если да, то прочитайте первую строку, разберите, что после #! и выполните это, передавая путь к исполняемому файлу в качестве аргумента.
  • Начинается ли он с одного из магических значений, зарегистрированных через механизм binfmt_misc? Если да, выполните зарегистрированный интерпретатор.

Для запуска двоичных файлов с внешней архитектурой через Qemu, волшебные значения, соответствующие заголовку ELF с каждой поддерживаемой архитектурой, регистрируются через механизм binfmt_misc. Вы можете увидеть, что поддерживается, перечислив каталог /proc/sys/fs/binfmt_misc/ (который является специальной файловой системой, представляющей текущий набор зарегистрированных в ядре интерпретаторов binfmt_misc). Например:

cat /proc/sys/fs/binfmt_misc/qemu-arm
enabled
interpreter /usr/bin/qemu-arm-static
flags: 
offset 0
magic 7f454c4601010100000000000000000002002800
mask ffffffffffffff00fffffffffffffffffeffffff

Итак, если исполняемый файл /somewhere/foo начинается с указанных магических байтов, то при запуске /somewhere/foo arg1 arg2 ядро вызовет /usr/bin/qemu-arm-static /somewhere/foo arg1 arg2.

Для работы этого механизма нет необходимости использовать chroot, исполняемый файл может быть где угодно. Для работы динамических исполняемых файлов удобно использовать chroot: динамические исполняемые файлы содержат абсолютный путь к своему загрузчику, поэтому если вы запустите, например, ARM исполняемый файл, то он будет ожидать загрузчика, находящегося в /lib. Если загрузчик на самом деле находится в /different-arch-root-to-be, то для того, чтобы исполняемый файл нашел загрузчик, необходимо наличие chroot в этом каталоге.

3
27.01.2020, 21:23

Теги

Похожие вопросы