是否可以启动新进程,使其无法生成新进程(不受信任的代码)?
另外,我如何启动一个进程,以便它无法对文件和一般任何设备进行任何输入/输出?
答案1
这听起来像是一份工作强制访问控制像系统一样SELinux或者应用装甲。
这篇关于 SELinux 的文章将使您了解此类系统的强大功能以及制定此类政策所需的工具。
请注意,您希望限制对所有文件的访问可能会适得其反。在 Unix 中,“一切都是文件”,因此完全阻止所有文件访问将阻止您的程序启动。更有效的方法可能是完全限制文件写入或仅限制到特定目录,并将程序可以合法读取的文件类别列入白名单。
另一种选择是使用chroot或者监狱。借助这些操作系统功能,您无需阻止文件 I/O 或程序执行,只需构建一个受限环境,其中不存在任何敏感内容可供不受信任的程序读取、写入或执行。您的程序只能对您放入“盒子”中的文件进行操作。
答案2
如果您的系统使用pam
,请创建一些专用的不受信任的用户,然后查看/etc/security/limits.conf
:
#Each line describes a limit for a user in the form:
#<domain> <type> <item> <value>
#
#Where:
#<domain> can be:
# - an user name
# - a group name, with @group syntax
[...]
#
#<type> can have the two values:
# - "soft" for enforcing the soft limits
# - "hard" for enforcing hard limits
#
#<item> can be one of the following:
# - core - limits the core file size (KB)
# - data - max data size (KB)
# - fsize - maximum filesize (KB)
# - memlock - max locked-in-memory address space (KB)
# - nofile - max number of open files
# - rss - max resident set size (KB)
# - stack - max stack size (KB)
# - cpu - max CPU time (MIN)
# - nproc - max number of processes
# - as - address space limit (KB)
# - maxlogins - max number of logins for this user
# - maxsyslogins - max number of logins on the system
# - priority - the priority to run user process with
# - locks - max number of file locks the user can hold
# - sigpending - max number of pending signals
# - msgqueue - max memory used by POSIX message queues (bytes)
# - nice - max nice priority allowed to raise to values: [-20, 19]
# - rtprio - max realtime priority
你正在专门寻找nproc
也许nofile
。不过,我怀疑任何程序都可以与user hard nofile 0
.更好地调整文件系统权限,以便您的专用用户无法访问您不希望其访问的任何内容。
免责声明:我自己从未使用过。 (我的意思是这些pam
东西。创建一个专用的不受信任的用户不会是坏事。)