如何禁用针对Linux进程的套接字创建?

如何禁用针对Linux进程的套接字创建?,第1张

概述我正在考虑几个沙盒化 Linux选项.使用clone()与CLONE_NEWNET(等)是选项之一. CLONE_NEWNET确保沙盒进程无法建立或接受真正的网络连接.但是我想完全禁用这个进程的套接字,甚至绑定()到0.0.0.0上的任何端口,并绑定到Unix doman套接字(甚至匿名).我想这样做,以防止进程通过绑定到数千个端口使用太多的内核资源.我怎么做? 一般来说,我对许多沙盒方法感兴趣( 我正在考虑几个沙盒化 Linux选项.使用clone()与CLONE_NEWNET(等)是选项之一. CLONE_NEWNET确保沙盒进程无法建立或接受真正的网络连接.但是我想完全禁用这个进程的套接字,甚至绑定()到0.0.0.0上的任何端口,并绑定到Unix doman套接字(甚至匿名).我想这样做,以防止进程通过绑定到数千个端口使用太多的内核资源.我怎么做?

一般来说,我对许多沙盒方法感兴趣(即由linux内核提供的那些方法和由ptrace()强制执行的方法),但在这个问题中,我只对沙盒方法的套接字创建方面感兴趣(所以如果你建议使用沙盒方法,还请解释如何使用它来阻止套接字创建),而对于需要内核补丁或涉及加载不属于Ubuntu LucID默认二进制内核软件包的内核模块的方法,我并不感兴趣这将影响系统上的每个进程.

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

util-linux [-ng]有一个命令unshare,它使用内核的clone/unshare接口.如果您通过unshare -n(或克隆(CLONE_NEWNET))运行新进程,则其创建的任何网络套接字都在不同的命名空间中.这不能解决内核资源问题,但是它会将进程沙箱化.

linux内核还支持seccomp,一种使用prctl(PR_SET_SECCOMP,1)输入的模式,它阻止进程(以及线程,真的)调用除read,write,exit和sigreturn之外的任何系统调用.这是一个非常有效的沙箱,但很难使用未修改的代码.

您可以定义一个不允许socket / bind / etc的SElinux域.调用并执行到该类型的动态转换.这(显然)需要一个具有积极执行SElinux策略的系统. (可能与AppArmor和TOMOYO类似的东西是可能的,但我不太熟悉任何一个.)

总结

以上是内存溢出为你收集整理的如何禁用针对Linux进程的套接字创建?全部内容,希望文章能够帮你解决如何禁用针对Linux进程的套接字创建?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1048459.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存