почему chroot php выводит синтаксические ошибки на стандартный вывод? - PullRequest
0 голосов
/ 20 октября 2019

при работе

chroot --userspec=nobody:nogroup / /bin/sh -c 'cd /; php -r \\'syntaxerror\\' '

синтаксические ошибки (по праву) печатаются в stderr, как и ожидалось. но если сделать

mkdir /jail /jail/bin /jail/lib /jail/lib64 /jail/usr /jail/etc /jail/etc/alternatives /jail/home /jail/tmp
chmod -R 0711 /jail
chmod -R 0733 /jail/tmp
chown -R root:root /jail
mount -o bind,ro /bin /jail/bin
mount -o bind,ro /lib /jail/lib
mount -o bind,ro /lib64 /jail/lib64
mount -o bind,ro /usr /jail/usr
mount -o bind,ro /etc/alternatives /jail/etc/alternatives

, а затем запустить php chrooted внутри тюрьмы, как

chroot --userspec=nobody:nogroup /jail /bin/sh -c 'cd /; php -r \\'syntaxerror\\' '

, то теперь внезапно php печатает синтаксическую ошибку в stdout вместо stderr! почему?

не думаю, что версия имеет значение, но я использую php 7.2.19, протестирован на Xubuntu 18.04, ядро ​​4.15.0-65-универсальное с chroot из GNU coreutils версии 8.28

Кстати, быстрый способ проверить, идет ли он в стандартный вывод или стандартный вывод, - это изменить его на:

chroot --userspec=nobody:nogroup /jail /bin/sh -c 'cd /; php -r \\'syntaxerror\\' | wc -c '

(wc -c считает количество байтов в стандартном выводе)

...