2013-02-20 2 views
1

Я собираюсь скомпилировать для своей цели ARM на моем хосте Ubuntu.
http://www.raspberrypi.org/phpBB3/viewtopic.php?f=31&t=8478chroot или виртуальная тюрьма - для кросс-компиляции?

Выше ссылки заявляет использовать CHROOT & непосредственно скомпилировать программу в rootfile систему вашей цели на хосте.

Некоторые предлагают использовать виртуальную среду тюрьмы, такую ​​как scratchbox.
Setting up a cross-compilation environment for a specific target platform

https://en.wikipedia.org/wiki/Chroot

The chroot mechanism is not intended to defend against intentional tampering by privileged (root) users. On most systems, chroot contexts do not stack properly and chrooted programs with sufficient privileges may perform a second chroot to break out. To mitigate the risk of this security weakness, chrooted programs should relinquish root privileges as soon as practical after chrooting, or other mechanisms – such as FreeBSD Jails - should be used instead. Note that some systems, such as FreeBSD, take precautions to prevent the second chroot attack.[1] 
So i am investigating on it for few days here i am not able to understand what above statement means. 

1> Что точное преимущество виртуальная тюрьма окружающая среда над Chroot?

2> Может ли chroot влиять на все открытые терминалы или на конкретный терминал, на котором выполняется команда?

3> Что именно мы должны использовать для кросс-компиляции тюрьмы, как скребок или chroot.

+0

, пожалуйста, любой, кто хотел бы предложить по этой теме? – Katoch

+0

Я не знаю о виртуальной среде тюрьмы, но предостерегаю использовать chroot. chroot изменит вашу файловую систему, чтобы корень был изменен, освободив цепочку инструментов, чтобы явно установить пути к инструментам и т. д. Если вы забудете, что вы находитесь в среде chroot или делаете определенные ошибки и не выходите правильно, вы можете уничтожить вашу файловую систему. Это случилось со мной в среде сборки Portage. Вот почему вам нужно быть суперпользователем, чтобы ввести chroot. Обязательно создайте резервные копии своих критических файлов или экспериментируйте в окне разработчика, которое вы можете себе позволить. –

ответ

1

Википедия говорить о безопасности Chroot, потому что корневой часто сравнивают с sandbox(которые не обеспечивают корневые) или другие с целью обеспечения безопасности с изоляцией.
chroot()(это системный вызов UNIX) - это процесс изменения явного корневого каталога (/) другому, на который указывает системный вызов. Это означает, что если в изолированной среде исполняемой/реж/цель хочет получить доступ к загрузке /lib/ld-linux.so.2(жестко закодированный пути в исполняемом файле), реальный доступ будет происходить в /dir/target/lib/ld-linux.so.2
Так это означает, что каждый из файлов и библиотека необходимости программы для доступа необходимо иметь свой обычный реальный путь (с префиксом /) на путь chrooted (/ dir/target в этом примере). Если вы используете полную систему внутри chroot, вы, наконец, получите структуру каталогов, описанную в man hier, но префикс (для chrooted программ) с chrooted пути. Это также означает, что вы можете использовать разные двоичные файлы различной архитектуры (если ваш процессор поддерживает несколько, что обеспечивает некоторую изоляцию).

Как вы можете видеть, когда вы смотрите на Chroot, основная цель не смотрите, чтобы обеспечить безопасность, и она используется для других purposes переключения из initramfs корня в Linux с монтируемой корневой на диске (за исключением того, это process mount -o move).
Однако, как указано в Wikipedia article, некоторые реализации, такие как FreeBSD, обеспечивают определенный уровень безопасности: например, отключение возможности создания chroot внутри chroot. Википедия ошибочна, когда говорит, что chroot должен запускаться как root. Большинство систем сегодня имеют больше fine-grained mechanism, чем права пользователя/группы.

Тюнинг предназначен для обеспечения изоляции напрямую, что позволяет ограничить объем ОЗУ процессором, который может использовать процесс; отключение разделяемой памяти; ограничить разрешение ...
Некоторые реализации (например, с командой песочницы) не обеспечивают chroot. Тюки имеют приложения в Operating system–level virtualization или избегают повреждений оставшейся системы, когда testing special code.
Если вы примете пример команды sandbox, вы увидите, что он не может использовать альтернативную структуру корневого каталога самостоятельно.

http://www.raspberrypi.org/forums/viewtopic.php?f=31&t=8478 упоминает qemu-user, который, очевидно, должен тестировать программы, не помещая их на Rasberry Pi. Это отличается от виртуальных машин, поскольку здесь не виртуализировано аппаратное обеспечение: двоичные команды программы преобразуются в нативные, что означает, что системные вызовы обрабатываются так, как если бы программа запускалась изначально.
Приходится использовать другую структуру корневого каталога: некоторые имена общих имен файлов общих для всех распределений и архитектуры (например, /lib/ld-linux.so.2). Вы не можете смешивать несколько архитектур в один и тот же двоичный файл. Если вы замените общую библиотеку эквивалентом ARM, то файлы не будут использоваться для собственных исполняемых файлов. qemu-пользователь или вся целевая система должны быть скомпилированы статически по той же причине.

Я действительно предлагаю вам установить и настроить binfmt. Это позволит вам запускать программы, как если бы они имели одинаковую архитектуру вашей машины, автоматически запуская команду qemu-arm-static ...
Тогда вы можете захотеть скомпилировать программное обеспечение без кросс-компиляции, просто установив собственную руку компилятор внутри вашего chroot.