Платформы: alt-kworkstation 10.3 (Обновленный до Sisyphus) Пакет: priv_wrapper 1.0.1-alt1 Шаги: Создать среду для окружения # mkdir /mnt/chroot # cp -R /bin /lib64 /usr /mnt/chroot Выполнить чрут # LD_PRELOAD=libpriv_wrapper.so PRIV_WRAPPER_CHROOT_DISABLE=1 chroot /mnt/chroot/ Ожидаемый результат: Команда не выполнилась, чрут отключен Результат: Команда выполняется успешно, зачрутился в /mnt/chroot/
Во-первых, PRIV_WRAPPER нужно явно включать, задавая переменную среды PRIV_WRAPPER=1, иначе он работать отказывается. Во-вторых, "отключение" вызова chroot не заставляет его падать, а превращает его в nop, то есть сброса привилегий не происходит, функция chroot просто возвращает 0 (успех). Возьмём пустой каталог: # find /var/empty/ /var/empty/ Попробуем сделать chroot в него: # chroot /var/empty echo foo chroot: failed to run command ‘echo’: No such file or directory Ну да, там нет команды echo, там нет НИЧЕГО. # PRIV_WRAPPER_CHROOT_DISABLE=1 PRIV_WRAPPER=1 LD_PRELOAD=/usr/lib64/libpriv_wrapper.so chroot /var/empty echo foo foo А так работает! Или даже так: # strace -e /chroot chroot /var/empty /bin/true chroot("/var/empty") = 0 chroot: failed to run command ‘/bin/true’: No such file or directory +++ exited with 127 +++ Системный вызов chroot выполнился успешно, упали. # PRIV_WRAPPER_CHROOT_DISABLE=1 PRIV_WRAPPER=1 LD_PRELOAD=/usr/lib64/libpriv_wrapper.so strace -e /chroot chroot /var/empty /bin/true +++ exited with 0 +++ Системный вызов chroot даже не вызывался, команда успешно отработала в родительском окружении. Как и задумывалось.