gpt4 book ai didi

system - 在 Linux 上加载一个程序需要多少个文件?

转载 作者:行者123 更新时间:2023-12-01 15:24:17 25 4
gpt4 key购买 nike

(目前假设的)情况是我的系统的用户将获得一大块 C 代码,并且需要我的系统在 chroot 中编译和运行它。即时生成的沙箱,我希望尽可能减少沙箱中的文件。我只愿意使用编译器和链接器设置(例如,静态链接我期望能够找到的所有内容)并对代码可以期望使用的内容做一些适度的限制(例如,它们不能使用任意库)。

问题是我可以获得沙箱的简单程度。显然我需要可执行文件,但是 ELF 加载程序和用于系统调用的 .so 呢?我可以丢弃它们中的任何一个吗?我还需要其他东西吗?

最佳答案

除了可执行文件之外,您不需要任何东西来运行静态链接的 hello world。当然,您还需要 很多 来编译它。

您可以很容易地对此进行测试,我使用以下简单的 C 代码进行了测试:

#include <stdio.h>
int main() {
puts("Hello, world\n");
return 0;
}

用 gcc -static 编译它。然后创建一个新目录(我称之为“chroot-dir”),将输出(“hello”)移动到其中。所以 chroot 中的唯一文件现在是可执行文件。然后运行 ​​chroot chroot-dir ./hello,你会得到 Hello, world

注意有些东西是不能静态编译的。例如,如果您的程序进行身份验证(通过 PAM),则 PAM 模块始终是动态加载的。另请注意,某些调用需要/etc 中的各种文件;任何 getpw* 和 getgr* 函数、域名解析函数等都需要 nsswitch.conf(和一些共享对象,可能还有更多的配置文件,有时甚至更多的可执行文件,具体取决于配置的查找方法。) /etc/hosts/etc/services/etc/protocols 可能对任何网络都非常有用.

找出程序使用哪些文件的一种简单方法是在 strace 下运行它。当然,您必须首先信任该程序。

关于system - 在 Linux 上加载一个程序需要多少个文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2785767/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com