Почему не работает chroot? - PullRequest
       3

Почему не работает chroot?

0 голосов
/ 17 сентября 2010

Как альтернатива моему реальному вопросу: кто-нибудь знает простой инструмент командной строки для создания chroot-тюрьмы? Я думаю, что-то, что будет запускать команду и копировать все, что нужно для запуска в данный каталог. Я видел несколько инструкций для инструмента, но у него были файлы конфигурации, и он, похоже, ожидал, что я запусту его из X, и ни один из них не работает для моего случая.


А для реального вопроса:

Я пытаюсь построить chroot jail, и он не работает. Вот что я получаю, выполняя команду:

bcs@builder:~/dmd$ sudo strace sudo chroot /home/bcs/dmd/ /usr/bin/make -C src linux.mak 
...
chroot("/home/bcs/dmd/")                = 0
chdir("/")                              = 0
execve("/usr/bin/make", ["/usr/bin/make", "-C", "src", "-f", "linux.mak"], [/* 13 vars */]) = -1 ENOENT (No such file or directory)
write(2, "chroot: ", 8chroot: )                 = 8
write(2, "cannot run command `/usr/bin/mak"..., 34cannot run command `/usr/bin/make') = 34
write(2, ": No such file or directory", 27: No such file or directory) = 27
write(2, "\n", 1
)                       = 1
close(1)                                = 0
close(2)                                = 0
exit_group(127)                         = ?
bcs@builder:~/dmd$ ll /home/bcs/dmd/usr/bin/make
-rwxr-xr-x 1 bcs bcs 166112 Sep 17 00:41 /home/bcs/dmd/usr/bin/make*

кажется, что chroot не может найти make, хотя он должен быть там. Есть идеи, что мне не хватает?

Кстати: это на недавней версии Ubuntu.

Ответы [ 2 ]

3 голосов
/ 17 сентября 2010

Возможно, у вас нет загрузчика и / или общих библиотек, доступных для создания. Например, в моей системе (64-битный sid Debian) make нуждается в следующем:

$ ldd /usr/bin/make
    linux-vdso.so.1 =>  (0x00007fff95fff000)
    librt.so.1 => /lib/librt.so.1 (0x00007fc97d557000)
    libc.so.6 => /lib/libc.so.6 (0x00007fc97d1f6000)
    libpthread.so.0 => /lib/libpthread.so.0 (0x00007fc97cfd9000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fc97d761000)

Вам нужно, чтобы все эти файлы (или эквивалент для вашей марки) были доступны в вашем chroot.

1 голос
/ 23 октября 2012

Возможно, немного поздно, но вы просите такой скрипт .Например, вы можете проверить это с помощью:

mkchroot subdir /bin/sh /bin/ls
sudo chroot subdir /bin/sh

И у вас будет минимальная среда с sh и ls.Конечно, вы можете добавить больше исполняемых файлов, чтобы иметь более полный rootfs.

В основном это работает, но я тестирую его с mksquashfs и кажется, что он не видит libgcc_s.so.1.Он не динамически связан ни с какой другой библиотекой, поэтому скрипт его не видит, и я получаю эту ошибку.

libgcc_s.so.1 must be installed for pthread_cancel to work
...