при работе
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
считает количество байтов в стандартном выводе)