博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux user namespace 和cgroup
阅读量:2344 次
发布时间:2019-05-10

本文共 1603 字,大约阅读时间需要 5 分钟。

user namespace

用户命名空间 提供了普通权限映射root权限的能力,但这个root权限只是在子命名空间中的虚构,需要配合其他的命名空间。本身不具有操作父命名空间真实root资源的能力。

我个人感觉应该是利用chroot来进行切换根目录后进行利用。

在这里插入图片描述

这里的source主要是文件系统资源,因为硬件资源应该是通过cgroup的机制限制的。
图中有点不准确,root映射的root的子user namespace是外部的普通进程。这里的普通是指uid为0但capabilities为空,可以读写很多root创建的文件。

正常用户都需要在user ns中映射自己的用户,不映射默认uid = 65534。映射之后存在文件资源访问限制的机制,如上图。user ns提供了上层构建内核系统的能力。

chr.c

#include 
int main(){char *argv[ ]={"ls", "-al", "/etc/passwd", NULL};char *envp[ ]={"PATH=/bin", NULL}; int ret = chroot("./newroot");printf("error %d \n",ret);chdir("/");execve("/bin/ls", argv, envp);}

gcc chr.c -o chr

lier@lier-virtual-machine:~/qemu$ sudo chroot newroot/ /bin/lsa.out    bin      lib      linuxrc  ns.c     sbin     usrlier@lier-virtual-machine:~/qemu$ sudo ./chrerror 0 ls: /etc/passwd: No such file or directorylier@lier-virtual-machine:~/qemu$ unshare --user -r /bin/bashroot@lier-virtual-machine:~/qemu# ./chrerror 0 ls: /etc/passwd: No such file or directoryroot@lier-virtual-machine:~/qemu# exitexitlier@lier-virtual-machine:~/qemu$ ./chrerror -1 -rw-r--r-- 1 root root 2287 Nov 14 10:12 /etc/passwdlier@lier-virtual-machine:~/qemu$

可以看到,成功的利用映射的root切换根目录。命令找不到参数,因为新的目录里缺少一个参数。

小结

user命名空间应该就是基于用户账户的权限隔离方式。同一个文件在不同的命名空间读到的内容可能不同,要么就干脆不能读。某用户启动的进程启父命名空间拥有子命名空间的所有权限。主要是针对子命名空间的root账户而言,因为父命名空间中的root账户创建的内容,本层的其他账户本身不可写。

子命名空间中能不能执行可执行文件,完全取决于可执行文件可执行属性其他组的标志是否允许。

cgroup

在这里插入图片描述

cgroup 通过控制族群、层级的概念限制进程对资源的访问。

进程task_struct 和 cgroup存在多对多的概念,通过struct css_set结构联系。

每个cgroup存在susys子系统,用来描述被限制的资源。

cgroup文件系统

在这里插入图片描述

cgroup文件系统提供用户态配置cgroup内核的能力,系统默认挂载在/sys/fs/cgroup文件加下,通过mkdir建立配置项。新建目录下自动生成配置文件,与内核数据结构关联。也可以手动挂载在其他目录,用法相同。

转载地址:http://knjvb.baihongyu.com/

你可能感兴趣的文章
费雪耶兹(Fisher–Yates) 也被称作高纳德( Knuth)随机置乱算法
查看>>
C/C++中变量的存储位置
查看>>
C++中四种强制类型转换区别详解
查看>>
linux gdb的详细用法 运行与断点
查看>>
删除vector中重复元素
查看>>
和为s的连续正数序列
查看>>
什么是Redis?什么是nosql?NoSQL数据库的四大分类
查看>>
为什么说Redis是单线程的以及Redis为什么这么快!
查看>>
redis的过期健删除策略以及内存淘汰机制
查看>>
map 如何使用结构体作为自定义键值
查看>>
Mysql几种索引类型的区别及适用情况
查看>>
Redis持久化的两种方式
查看>>
判断一个数组,是否可以分成两个数组之和相等的数组
查看>>
背包问题
查看>>
结构体变量之间的比较和赋值原理
查看>>
C++ const修饰函数、函数参数、函数返回值
查看>>
将单链表的每k个节点之间逆序
查看>>
删除链表中重复的节点——重复节点不保留
查看>>
2018腾讯校招编程题——最重要的城市
查看>>
删除链表中重复的节点——重复节点保留一个
查看>>