Вам не нужно ничего, кроме исполняемого файла, для запуска статически связанного мира приветствия. Вам, конечно, понадобится лот больше, чтобы скомпилировать его.
Вы можете проверить это довольно легко, я сделал это с помощью следующего тривиального кода C:
#include <stdio.h>
int main() {
puts("Hello, world\n");
return 0;
}
скомпилируйте его с помощью gcc -static. Затем создайте новый каталог (я назвал его «chroot-dir»), переместите вывод («привет») в него. Таким образом, единственный файл в chroot - это исполняемый файл. Затем запустите chroot chroot-dir ./hello
, и вы получите Hello, world .
Обратите внимание, что есть некоторые вещи, которые не могут быть скомпилированы статически. Например, если ваша программа выполняет аутентификацию (через PAM), модули PAM всегда загружаются динамически. Также обратите внимание, что различные файлы в / etc необходимы для определенных вызовов; любая из функций getpw * и getgr *, функций разрешения имен доменов и т. д. потребует nsswitch.conf
(и некоторые общие объекты, и, возможно, больше файлов конфигурации, а иногда и больше исполняемых файлов, в зависимости от настроенных методов поиска.) /etc/hosts
, /etc/services
и /etc/protocols
, вероятно, будут весьма полезны для любой сети.
Один простой способ выяснить, какие файлы использует программа, - запустить ее под strace. Конечно, сначала вы должны доверять программе.