gpt4 book ai didi

linux - 如何为沙盒禁用 Linux 进程的套接字创建?

转载 作者:IT王子 更新时间:2023-10-29 00:10:21 31 4
gpt4 key购买 nike

我正在考虑对 Linux 进程进行沙箱化的几种选择。使用 clone()CLONE_NEWNET(等)是其中一种选择。 CLONE_NEWNET 确保沙盒进程无法建立或接受真实的网络连接。但我想为该进程完全禁用套接字,甚至 bind()ing 到 0.0.0.0 上的任何端口,并绑定(bind)到 Unix doman 套接字(甚至是匿名的).我想这样做是为了防止进程通过绑定(bind)到数千个端口而使用过多的内核资源。我该怎么做?

一般来说,我对许多沙盒方法感兴趣(即 Linux 内核提供的方法和 ptrace() 强制执行的方法),但在这个问题中我只对套接字感兴趣沙盒方法的创建方面(因此,如果您建议沙盒方法,还请解释如何防止使用它创建套接字),我对需要内核修补或涉及加载不属于内核模块的方法不感兴趣Ubuntu Lucid 默认二进制内核包,否则会影响系统上的每个进程。

最佳答案

ptrace似乎是最明显的工具,但除此之外……

util-linux[-ng] 有一个命令 unshare ,它使用内核的 clone / unshare 接口(interface)。如果通过 unshare -n 运行新进程(或 clone(CLONE_NEWNET) ),它创建的任何网络套接字都在不同的命名空间中。这并没有解决内核资源问题,但它确实将进程沙盒化。

Linux 内核也支持seccomp , 用 prctl(PR_SET_SECCOMP, 1) 输入的模式这会阻止进程(好吧,线程,真的)调用除 read 以外的任何系统调用。 , write , exit , 和 sigreturn .这是一个非常有效的沙箱,但难以与未修改的代码一起使用。

您可以定义一个不允许 socket 的 SELinux 域/bind/ETC。调用,并执行到该类型的动态转换。这(显然)需要一个具有积极执行 SELinux 策略的系统。 (AppArmor 和 TOMOYO 可能有类似的事情,但我对它们都不是很熟悉。)

关于linux - 如何为沙盒禁用 Linux 进程的套接字创建?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4410447/

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