Тестируйте bash if conditions в терминале [closed]

На самом деле перенаправление не происходит внутри chroot. > /tmp/testобрабатывается любой оболочкой, которую вы используете. Если вы на самом деле передали > /tmp/testвchroot, тогда он будет передан в echo, и вы увидите

this is a test > /tmp/test

на своем терминале. Ваша оболочка, конечно же, не получает chrooted, так что вполне нормально открывать /tmp/test. Затем оболочка execзапускает исполняемый файл chroot, который вызывает системный вызов chroot, а затем execв echo, который, наконец, пишет в файл fd.При этом исходный файловый дескриптор, открытый вашей (un chrooted) оболочкой, никогда не изменяется, поэтому ваш chrooted echoможет писать в него. .

Это преднамеренная функция. Процессу вне chrootразрешено открывать файлы, а затем его chrooted-потомки могут получить доступ только к тем файлам за пределами chroot, которые родительский процесс соизволил передать им.

Если вы хотите, чтобы перенаправление происходило внутриchroot, вам нужно создать оболочку, которая знает, как его интерпретировать:

chroot $dir bash -c "echo this is a test > /tmp/test"

Теперь порядок операций следующий: fork(со стандартным вводом, выводом и выводом по умолчанию), execchroot, chroot(теперь внутри chroot), execbash(знает как обрабатывать перенаправление), fork(подробности реализации bash), open file, exececho(с новым стандартным выводом).

0
04.04.2016, 12:01
0 ответов

Теги

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