当前位置:嗨网首页>书籍在线阅读

15-改变用户ID对进程能力的影响

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

39.6 改变用户ID对进程能力的影响

为了与用户ID在0与非0之间切换的传统含义保持兼容,在改变进程的用户ID(使用setuid()等)时,内核会完成下列操作。

1. 如果真实用户ID、有效用户ID或saved set-user-ID之前的值为0,那么修改了用户ID之后,所有这三个ID的值都会变成非0,并且进程的许可和有效能力集会被清除(即所有的能力都被永久地删除了)。

2. 如果有效用户ID从0变成了非0,那么有效能力集会被清除(即有效能力被删除了,但那些位于许可集中的能力会被再次提升)。

3. 如果有效用户ID从非0变成了0,那么许可能力集会被复制到有效能力集中(即所有的许可能力变成了有效)。

4. 如果文件系统用户ID从0变成了非0,那么会从有效能力集中清除这些文件相关的能力:CAP_CHOWN、CAP_DAC_OVERRIDE、CAP_DAC_READ_SEARCH、CAP_FOWNER、CAP_FSETID、CAP_LINUX_IMMUTABLE(自Linux 2.6.30起)、CAP_MAC_OVERRIDE和CAP_MKNOD(自Linux 2.6.30起)。相应地,如果文件系统用户ID从非0变成了0,那么上面这些能力中所有在许可集中被启用的能力会在有效集中被启用。完成这些操作之后,对Linux特有的文件系统用户ID的操作的传统语义将会得到保持。