如何禁用套接字创build的Linux进程,沙盒?

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

一般来说,我对许多沙盒方法感兴趣(也就是那些由Linux内核提供的方法和由ptrace()执行的方法),但在这个问题中,我只关心沙箱方法的套接字创build方面(如果你build议一个沙盒的方法,也请解释如何防止套接字的创build),我不感兴趣的方法需要内核修补或涉及加载一个内核模块不属于Ubuntu Lucid默认二进制内核包,或这会影响系统上的每个进程。

Solutions Collecting From Web of "如何禁用套接字创build的Linux进程,沙盒?"

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

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

Linux内核还支持seccomp ,这是一种使用prctl(PR_SET_SECCOMP, 1)进入的模式prctl(PR_SET_SECCOMP, 1)它阻止进程(确实是线程)调用除readwriteexitsigreturn以外的任何系统调用。 这是一个非常有效的沙盒,但很难与未经修改的代码一起使用。

你可以定义一个不允许socket / bind / etc的SELinux域。 调用,并执行到该类型的动态转换。 这(显然)需要一个主动执行SELinux策略的系统。 (AppArmor和TOMOYO可能有类似的情况,但我不太了解它们。)

看看systrace – 不限于套接字,而是一个通用的系统调用策略生成器/执行器。 引用:

GNU / Linux端口完成,Marius Eriksen主动维护内核补丁。 可以在不使用ptrace后端进行内核更改的情况下运行。

Disclamer – 我从来没有在Linux上试过。

尝试seccomp(请参阅prctl手册页),它可以将进程限制为仅访问prctl调用时打开的套接字。

您可能对“ sydbox ”沙箱或“ pinktrace ”库感兴趣:

http://www.diigo.com/user/wierzowiecki/sydbox

如果您的主要目标是限制一些良性进程P打开的套接字的数量应用于良性输入,那么setrlimit(RLIMIT_NOFILE, ...)将执行您想要的大约。

然而,如果假设P是恶意的而不是良性的,或者如果你想要在面对潜在的恶意投入时如何表现P的强有力的保证,那么你可能是不幸运的:也就是说,充其量现在可用的工具,你可以为攻击者创建一个障碍课程。

(也就是说,如果一个障碍课程适合你,那么你可以在sandboxing.org上找到更多的好点子,或者通过sandboxing-talk@lists.sandboxing.org发送问题给友好的人。 )