Имитация chroot с unshare

13

Я пытаюсь написать загрузчик для минимального дистрибутива Linux.

Я хотел бы встроить в среду, похожую на chroot. Это должно упростить упаковку. Я не забочусь о безопасности в этом пункте. Загрузчик не должен требовать каких-либо нестандартных сторонних команд. Было бы здорово, если бы не было необходимости иметь права root.

Вот почему fakechroot (1) fakeroot (1) chroot (1) не совсем то, что я ищу.

Можно ли подделать / использовать unshare (1) и / bin / sh?

Rooties
источник
AFAICS, unshare(1)является довольно тонкой оболочкой для набора системных вызовов только для root, и (по крайней мере в Fedora 18) это не SUID, поэтому я очень сомневаюсь, что это будет работать для пользователей без полномочий root.
vonbrand
О, это позор. У меня сложилось впечатление, что unhare is setuid. Я думаю, я в порядке с тем, чтобы быть root.
Rooties
4
С выпуском нового ядра Linux 3.8 вы можете использовать функции пространства имен без полномочий root. Но это новинка: сначала нужно пространство имен uid, а unshare пока не поддерживает это. И ваши действия все равно будут ограничены.
BatchyX

Ответы:

5

Да. Если ваше ядро поддерживает пространства имен user_name (и они включены) , вы можете сначала «симулировать пользователя root», который затем получает право вызывать chroot(как настоящий пользователь root). (Который ранее требовалось ограничить только пользователем root из-за возможности повышения привилегий обычным пользователем (скажем, через двоичные файлы set-UID-root и пользовательские библиотеки в каталоге chroot).)

Вы можете попробовать это в вашей оболочке:

unshare --user --map-root-user --mount-proc --pid --fork
/sbin/chroot ......
su - user1
imz - Иван Захарящев
источник
нераспознанная опция '--map-root-user'
Zibri
1
@Zibri Это работает для меня теперь, когда unshareот Util-Linux-2.30.2-ALT1
ИМЗ - Иван Zakharyaschev
1

Просто установите пакет или установите fakeroot / fakechroot, поскольку они уже идеально подходят для этого. Посмотрите на cdebootstrap для вдохновения.

Tobu
источник