在Linux命名空间中创建进程

pyspaces的Python项目详细描述


通过glibc与纯python一起使用linux名称空间

LicenseLatest VersionDownloadsDocs

讨论: reddithabrahabr

目标

有很多漂亮的工具 dockerrocketvagga写在《去与锈》, 但在python中没有。我想那是因为没有简单的工作方法 使用python中的linux名称空间:

  • 你可以使用asylum- 一个看起来死气沉沉的项目,其代码基不在 像github这样的主流集线器
  • 或者你可以使用 python-libvirt 具有大抽象层的绑定
  • 或者只使用带有cTypes的本地glibc库
  • 否则,请选择subprocess.popen–您的选择

我想改变这一点:我想创建到glibc的本地python绑定 与python multiprocessing.process的接口。

你可以看看 python-nsenter也是 看起来棒极了。

pps:庇护所作者的新项目- butter

示例

第一个简单的例子:

importosfrompyspacesimportContainerdefexecute(argv):os.execvp(argv[0],argv)cmd="mount -t proc proc /proc; ps ax"c=Container(target=execute,args=(('bash','-c',cmd),),uid_map='0 1000 1',newpid=True,newuser=True,newns=True)c.start()print("PID of child created by clone() is %ld\n"%c.pid)c.join()print("Child returned: pid %s, status %s"%(c.pid,c.exitcode))

输出:

PID of child created by clone() is 15978

PID TTY      STAT   TIME COMMAND
1   pts/19   S+     0:00 bash -c mount -t proc proc /proc; ps ax
3   pts/19   R+     0:00 ps ax

Child returned: pid 15978, status 0

cli

space execute -v --pid --mnt --user --uid 1000 --gid 1000 bash -c 'mount -t proc /proc; ps ax'
space chroot --pid --uid '0 1000 1' ~/.local/share/lxc/ubuntu/rootfs/ /bin/ls /home/
space inject --net --mnt 19840 bash

注意:如果要执行的程序是动态链接的,并且 chroot环境中的/lib中不存在动态链接器- 您将得到以下错误:“oserror:[errno 2]没有这样的文件或 目录”。你需要所有其他文件动态链接程序 取决于,包括共享库和任何必需的 新根目录中的configuration/tables/etc。 src

安全性

阅读this article

更改日志

待办事项

  • [X]命名空间:克隆和容器
  • [X]cli
  • [X]chroot
  • [X]设置和注入
  • []C组
  • []配置管理:Apparmor&Selinux
  • []能力
  • []安装
  • []网络
  • []将cli移动到单独的包中
  • []加载项
  • []容器列表
  • []支持LXC、VAGGA、Rocket、Docker等…
  • []…
  • []一个工具来统治所有人!!1

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
如何在java中调用Paint组件方法   多层次POM中的java覆盖依赖项/插件管理   java模式识别   JavaSpringMVC+Log4j2定义了Log4j2。未标识非类路径位置中的属性文件   java我们如何将IntelliJ IDEA中的maven和gradle项目与源代码浏览支持集成?   Maven mvn exec:java在Windows上工作,但不是Ubuntu 20   java在Jaxb2Marshaller上使用带有packagesToScan属性的JAXBElement时没有端点适配器   java删除方法和节点   java如何为某些场景创建正则表达式模式   java如何通过gridView中的intent()传递ArrayList数据。setOnItemClickListener()   java UnsupportedClassVersionError 1.7/1.5   java为什么JVM参数是http。tomcat servlet没有使用proxyHost?   java将ArrayList从字母顺序排序到最频繁/最不频繁   java动态字段列表迭代   java如何将字节转换为位?   hadoop java。mapreduce作业中的lang.NullPointerException   javasocketIO无法与Android中的LocationListener一起使用   java在卸载时清除内部存储   java池回收错误2个精灵同时碰撞到一个精灵