在Linux命名空间中创建进程
pyspaces的Python项目详细描述
通过glibc与纯python一起使用linux名称空间
目标
有很多漂亮的工具 docker, rocket和 vagga写在《去与锈》, 但在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