chown
на самом деле возвращает ноль при запуске под fakeroot
. Таким образом, согласно errno(3)
:
Его значение имеет значение только в том случае, если возвращаемое значение вызова указывает на ошибку (т.е. -1 от большинства системных вызовов; -1 или NULL от большинства библиотечных функций); функции, которая преуспела, разрешается изменять errno.
Значение в errno
не является значимым, и chown
на самом деле не завершился неудачей.
Как уже обсуждалось в комментариях, вывод strace
содержит EPERM и нефейковые uid/gid, как и ожидалось, поскольку strace
трассирует ниже библиотеки fakeroot LD_PRELOAD
. Печать uid/gid из программы показывает правильный (faked) вывод.
Con ssh puede ejecutar el script en un sistema remoto y reenviar su salida a su máquina segura local:
ssh regularuser@inesecure.host "/path/to/the/script/on/remotehost.sh" > /file/on/your/local/system.txt
La raíz tiene todos los privilegios en la máquina, por lo que no hay forma de proteger la salida estándar de la raíz.
Si los datos solo tuvieran que transitar por la máquina (p. a través de una interfaz de red ), una solución sería cifrarlo en la fuente, pero dado que los datos se generan en la misma máquina, el usuario raíz puede modificar fácilmente el script para recuperar los datos sin cifrar.
Como regla general, si no confía en una máquina, no ejecute nada en ella.
Además, hay una contradicción en la oración "Este script genera datos muy confidenciales en la salida estándar" --si se trata de datos muy confidenciales, no debe volcarlos en la salida estándar, a menos que sea el único usuario en la máquina.