Ubuntu chroot «Нет такого файла или каталога»

У меня есть веб-приложение, в котором я создаю несколько папок на своем сервере и помещаю туда исполняемые файлы. Затем я пытаюсь запустить их с помощью chroot, но получаю сообщение, что доступ там запрещен.
Я попытался chmod -R 777 blah blah...., и затем я получил сообщение, что папка или файл, который я вызываю (sudo chroot mydirectory myfile_inside_Mydirectory), не существует. Это происходит только тогда, когда я вызываю chroot для папок, созданных веб-сервером. Мое веб-приложение на php, и я использую:

shell_exec("cp -R /var/www/comp/prison/bin $dir");

shell_exec("cp -R /var/www/comp/prison/lib $dir");

shell_exec("cp /var/www/janitor.out $dir/janitor.out");

shell_exec("sudo chmod -R 777 $dir");

$process = proc_open("sudo chroot $dir janitor.out", $descriptorspec, $pipes);

sudo не нужен пароль.

3
задан 26 May 2012 в 23:29

2 ответа

Что это за файл janitor.out? Если он динамически связан, вам также понадобятся связанные библиотеки, которые, в свою очередь, могут также нуждаться в других библиотеках. Вы можете использовать программу ldd, чтобы проверить, какие общие библиотеки требуются. Например, выходные данные ldd /bin/ls:

    linux-vdso.so.1 =>  (0x00007fffac983000)
    libselinux.so.1 => /lib/libselinux.so.1 (0x00007f8adda8f000)
    librt.so.1 => /lib/librt.so.1 (0x00007f8add887000)
    libacl.so.1 => /lib/libacl.so.1 (0x00007f8add67e000)
    libc.so.6 => /lib/libc.so.6 (0x00007f8add2fb000)
    libdl.so.2 => /lib/libdl.so.2 (0x00007f8add0f7000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f8addccc000)
    libpthread.so.0 => /lib/libpthread.so.0 (0x00007f8adced9000)
    libattr.so.1 => /lib/libattr.so.1 (0x00007f8adccd4000)

И ldd /lib/libacl.so.1: linux-vdso.so.1 => (0x00007fffd462f000) libattr.so.1 => /lib/libattr.so. 1 (0x00007f4e348aa000) libc.so.6 => /lib/libc.so.6 (0x00007f4e34527000) /lib64/ld-linux-x86-64.so.2 (0x00007f4e34cd6000) Если одна из этих библиотек не выполняется, программа сообщит «Нет такого файла или каталога», даже если сама программа существует.


Правка: следующая более вероятная проблема в этом случае. Я сохраняю приведенный выше ответ, потому что он может быть полезен кому-то с таким же сообщением об ошибке.

Вы выполняете:

sudo chroot $dir janitor.out

Это заставит chroot искать janitor.out в $PATH (/ bin, / sbin, ...). Вам нужно поставить префикс janitor.out с косой чертой, чтобы запустить janitor.out, расположенный в корне вашего chroot:

sudo chroot $dir /janitor.out
0
ответ дан 26 May 2012 в 23:29

Ну, в конце концов я обнаружил, что скопировал необходимые библиотеки в неправильную папку, потому что когда я впервые тестировал chroot, я работал на 32-битной Ubuntu Machine, а мой сервер 64-битный. Итак, я скопировал необходимые библиотеки и bin / sh в соответствующие папки в моем каталоге, которые я хотел бы заключить в тюрьму, и это работало просто отлично. : D Спасибо вам всем!

0
ответ дан 26 May 2012 в 23:29

Другие вопросы по тегам:

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