linux user namespace 和cgroup

本文深入探讨了用户命名空间(user namespace)的概念,解释了它如何使普通用户权限映射为root权限,并讨论了其在子命名空间中的限制与应用。同时,文章也解析了cgroup的工作原理,包括其如何通过控制族群和层级限制进程资源访问。

user namespace

用户命名空间 提供了普通权限映射root权限的能力,但这个root权限只是在子命名空间中的虚构,需要配合其他的命名空间。本身不具有操作父命名空间真实root资源的能力。
在这里插入图片描述
这里的source主要是文件系统资源,因为硬件资源应该是通过cgroup的机制限制的。
图中有点不准确,root映射的root的子user namespace是外部的普通进程。这里的普通是指uid为0但capabilities为空,可以读写很多root创建的文件。

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

chr.c

#include <unistd.h>
 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/ls
a.out    bin      lib      linuxrc  ns.c     sbin     usr
lier@lier-virtual-machine:~/qemu$ sudo ./chr
error 0 
ls: /etc/passwd: No such file or directory
lier@lier-virtual-machine:~/qemu$ unshare --user -r /bin/bash
root@lier-virtual-machine:~/qemu# ./chr
error 0 
ls: /etc/passwd: No such file or directory
root@lier-virtual-machine:~/qemu# exit
exit
lier@lier-virtual-machine:~/qemu$ ./chr
error -1 
-rw-r--r-- 1 root root 2287 Nov 14 10:12 /etc/passwd
lier@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建立配置项。新建目录下自动生成配置文件,与内核数据结构关联。也可以手动挂载在其他目录,用法相同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值