Bug 51599

Summary: Не отключает вызов chroot, команда выполняется успешно
Product: Sisyphus Reporter: obidinog <obidinog>
Component: priv_wrapperAssignee: Evgeny Sinelnikov <sin>
Status: CLOSED NOTABUG QA Contact: qa-sisyphus
Severity: normal    
Priority: P5 CC: iv, sin
Version: unstable   
Hardware: x86_64   
OS: Linux   

Description obidinog@basealt.ru 2024-09-30 15:32:46 MSK
Платформы:
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/
Comment 1 Ivan A. Melnikov 2024-10-01 09:03:56 MSK
Во-первых, 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 даже не вызывался, команда успешно отработала в родительском окружении. Как и задумывалось.