栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Linux capability (一)2021-09-30

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Linux capability (一)2021-09-30

1. man capabilities

        capabilities(7) - Linux manual pagehttps://man7.org/linux/man-pages/man7/capabilities.7.html1.1 Capabilities 

为了执行权限检查,传统的UNIX实现将进程分为两类:特权 进程(其有效用户ID为0,称为超级用户或root),以及非特权进程(其有效UID为非零)。
特权进程绕过所有内核权限检查,而无特权的进程则根据进程的凭据(通常是:有效的UID,有效的GID和补充组列表)接受完全的权限检查。
从内核2.2开始,Linux将传统上与超级用户相关联的特权划分为不同的capability, 可以独立地启用和禁用这些功能。功能是每个线程的属性。
 

1.2 全面实施功能需要: (在内核2.6.24之前,仅满足前两个要求;从内核2.6.24开始,所有这三个要求都得到满足)
对于所有特权操作,内核必须检查线程在其有效集中是否具有所需的功能。
内核必须提供系统调用,以允许更改和检索线程的功能集。
文件系统必须支持将功能附加到可执行文件,以便进程在执行文件时获得那些功能。

1.3 Transformation of capabilities during execve()

Note: 属性ambient仅在kernel 4.3后支持。

P'(ambient) = (file is privileged  (uid of P)) ? 0 : P(ambient)		
	//如果用户是 root 用户(uid of P),那么执行 execve() 后线程的 Ambient 集合是空集;如果是普通            
    用户,那么执行 execve() 后线程的 Ambient 集合将会继承执行 execve() 前线程的 Ambient 集合。
P'(permitted) = (P(inheritable) & F(inheritable)) | (F(permitted) & P(bounding))) | P'(ambient)
P'(effective)   = F(effective) ? P'(permitted) : P'(ambient)       euid ???
P'(inheritable) = P(inheritable) [i.e., unchanged]
P'(bounding) = P(bounding) [i.e., unchanged]


Note: 属性ambient仅在kernel 4.3后支持。

1.4 Capability list

0:CAP_CHOWN:修改文件属主的权限
1:CAP_DAC_OVERRIDE:忽略文件的DAC访问限制


2:CAP_DAC_READ_SEARCH:忽略文件读及目录搜索的DAC访问限制  
    比如:普通用户shadow文件也能read

3:CAP_FOWNER:忽略文件属主ID必须和进程用户ID相匹配的限制
    (以最后操作的UID,覆盖文件的先前的UID)
4:CAP_FSETID:允许设置文件的setuid位
    起因是当文件被修改后,会清除掉文件的setuid/setgid位,而设定CAP_FSETID后将保证setuid/setgid位不被清除.但这对chown函数无用

5:CAP_KILL:允许对不属于自己的进程发送信号

6:CAP_SETGID:允许改变进程的组ID
    (设定程序允许普通用户使用setgid函数,这与文件的setgid权限位无关)

7:CAP_SETUID:允许改变进程的用户ID
    (设定程序允许普通用户使用setuid函数,这也文件的setuid权限位无关)

8:CAP_SETPCAP:允许向其他进程转移能力以及删除其他进程的能力
     (允许向其它进程转移能力以及删除其它进程的任意能力)
事实上只有init进程可以设定其它进程的能力,而其它程序无权对进程授权,root用户也不能对其它进程的能力进行修改,只能对当前进程通过cap_set_proc等函数进行修改,而子进程也会继承这种能力.
所以即使使用了CAP_SETPCAP能力,也不会起到真正的作用.

9:CAP_LINUX_IMMUTABLE:允许修改文件的IMMUTABLE和APPEND属性标志
    注意,这里只能对自己的文件授权(immutable/append-only)权限,对于其它用户的权限LINUX_IMMUTABLE不起作用(root除外),如下:

10:CAP_NET_BIND_SERVICE:允许绑定到小于1024的端口
11: CAP_NET_BROADCAST:允许网络广播和多播访问
    事实上它并没有被应用,普通用户也可以使用ping -b 192.168.0.255也发送广播包
12: CAP_NET_ADMIN:允许执行网络管理任务:接口,防火墙和路由等
13: CAP_NET_RAW:允许使用原始套接字.socket(PF_INET, SOCK_RAW, IPPROTO_ICMP) ping/tcpdump/iftop

14:CAP_IPC_LOCK:允许锁定共享内存片段
15:CAP_IPC_OWNER:忽略IPC所有权检查

16:CAP_SYS_MODULE:允许插入和删除内核模块
17:CAP_SYS_RAWIO:允许直接访问/devport,/dev/mem,/dev/kmem及原始块设备

18:CAP_SYS_CHROOT:允许使用chroot()系统调用
19:CAP_SYS_PTRACE:允许跟踪任何进程  strace -p 1
CAP_SYS_PACCT:允许执行进程的BSD式审计

21:CAP_SYS_ADMIN:允许执行系统管理任务,如加载或卸载文件系统、设置磁盘配额等    mount swapon swapoff


22: CAP_SYS_BOOT:允许重新启动系统 (允许普通用使用reboot()函数)
    这里我们无法用reboot命令来做测试,因为reboot命令做了判断,只允许root(UID=0)的用户可以使用.
23: CAP_SYS_NICE:允许提升优先级及设置其他进程的优先级
24: CAP_SYS_RESOURCE:忽略资源限制
    普通用户不能用setrlimit()来突破ulimit的限制
25: CAP_SYS_TIME:允许改变系统时钟
26: CAP_SYS_TTY_CONFIG:允许配置TTY设备. 用vhangup()函数来挂起当前的tty
27: CAP_MKNOD:允许使用mknod()系统调用.普通用户不能用mknod()来创建设备文件
28: CAP_LEASE:允许修改文件锁的FL_LEASE标志
    系统调用fcntl()可以用于租借锁,此时采用的函数原型如下
29: CAP_SETFCAP 31 (允许在指定的程序上授权能力给其它程序)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/289871.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号