图说Linux进程之二

以下内容已屏蔽图片优化访问速度
图说Linux进程



三、进程的权限


/* Objective and real subjective task credentials (COW): */
const struct cred __rcu *real_cred;


/* Effective (overridable) subjective task credentials (COW): */
const struct cred __rcu *cred;


[IMG]


[IMG]
如图的数据结构控制着Linux进程的权限。


uid是用户的id,一般是登陆或者su到的用户运行的进程的uid就是这个用户的id。


euid是effective user id,这个一般和uid是一样的,但是也有特殊情况,就是当执行文件的权限设置了set uid bit的时候。


[IMG]
假设一款游戏,Game,它的owner是Jerry,当Jerry玩这个游戏的时候,成功闯关,会将当前的通过的关卡写入Result文件,从而下次登录的时候,就可以接着上次的玩了。


他的朋友Tom觉得游戏不错,也想玩,于是Jerry将Game的权限扩大,不是自己group的,也可以运行r-x,于是Tom可以打开Game文件玩游戏了。


但是问题来了,当Tom成功闯过一关的时候,也需要将结果写入Result文件,可是这个文件对于Tom来说不可写,Tom发现自己白玩了。


当然一种方法是将Result文件权限放开,允许Tom写入。


还有一种方法是,对于程序Game设置set uid bit,这样Tom运行Game的时候,虽然uid还是Tom,但是euid设置成为Jerry,就可以写入Result文件了。


suid称为saved user id,当进程内部执行setuid系统调用的时候,才使用它。



fsuid保存uid或者euid,是用于真正审核访问文件的权限的。


同理group也有相应的四项。


一用户可以属于多个group,保存在group_info的结构中。


[IMG]


另外一个进程还会有capabilities,看过容器的同学终于见到了熟悉的东西。
可以给普通用户的进程一些权限做更高级的事情。


例如CHOWN, DAC_OVERRIDE, FSETID, FOWNER, MKNOD,NET_RAW, SETGID,  SETUID, SETFCAP,SETPCAP, NET_BIND_SERVICE, SYS_CHROOT, KILL, AUDIT_WRITE


这些都定义在capability.h中。


[IMG]


四、资源限制


[IMG]
在命令行,可以通过ulimit设置,在内核里面有相应的数据结构。


[IMG]
惨到卖总部的索尼再次碾压腾讯!一个部门赚1741亿,救了整个公司! 最高荣誉,终于被国产奶粉拿下! 艺人向左,脱口秀向右 揭秘煎饼摊的真实盈利情况:月入三万不是梦? 这耳机太变态了!不到200元!洗澡防水!金属充电仓自充电8次!不碰手机一键切歌&接电话!行车更安全!
好看吗?
总执行时间0.01260685920715332,文章查询时间0.0017979145050048828,分类查询时间0.009832143783569336,其他脚本7.43865966796875e-05,模板渲染0.0009024143218994141