1.打印当前系统能力
# capsh --print
Current: =
Bounding set =cap_chown,
cap_dac_override,
cap_dac_read_search,
cap_fowner,
cap_fsetid,
cap_kill,
cap_setgid,
cap_setuid,
cap_setpcap,
cap_linux_immutable,
cap_net_bind_service,
cap_net_broadcast,
cap_net_admin,
cap_net_raw,
cap_ipc_lock,
cap_ipc_owner,
cap_sys_module,
cap_sys_rawio,
cap_sys_chroot,
cap_sys_ptrace,
cap_sys_pacct,
cap_sys_admin,
cap_sys_boot,
cap_sys_nice,
cap_sys_resource,
cap_sys_time,
cap_sys_tty_config,
cap_mknod,
cap_lease,
cap_audit_write,
cap_audit_control,
cap_setfcap,
cap_mac_override,
cap_mac_admin,
cap_syslog,
cap_wake_alarm,
cap_block_suspend,
cap_audit_read
Securebits: 00/0x0/1'b0secure-noroot: no (unlocked)
secure-no-suid-fixup: no (unlocked)
secure-keep-caps: no (unlocked)
uid=1000(ubuntu)
gid=1000(ubuntu)
groups=4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),116(lpadmin),126(sambashare),1000(ubuntu)2.ping能力测试# ping wwwww.baidu.com > /dev/null&
[1] 17640<1>.通过ping pid查看当前进程的能力
# grep Cap /proc/17640/status
CapInh: 0000000000000000
CapPrm: 0000000000003000
CapEff: 0000000000000000
CapBnd: 0000003fffffffff
CapAmb: 0000000000000000<2>.通过capsh命令解码当前进程能力:CapPrm: 0000000000003000
# capsh --decode=0000000000003000
0x0000000000003000=cap_net_admin,cap_net_rawping被赋予的能力为:cap_net_admin,cap_net_raw3.通过工具查看进程能力
<1>.通过strace查看ping能力
# sudo strace builddir/ping/ping -c 1 wwwww.baidu.com
capget({version=_LINUX_CAPABILITY_VERSION_3, pid=0}, NULL) = 0
capget({version=_LINUX_CAPABILITY_VERSION_3, pid=0}, {effective=0, permitted=1<<CAP_NET_ADMIN|1<<CAP_NET_RAW, inheritable=0}) = 0
capset({version=_LINUX_CAPABILITY_VERSION_3, pid=0}, {effective=1<<CAP_NET_RAW, permitted=1<<CAP_NET_ADMIN|1<<CAP_NET_RAW, inheritable=0}) = 0好好理解下这个公式:
P'(effective) = F(effective) ? P'(permitted) : P'(ambient)

   Capabilities的主要思想在于分割root用户的特权,即将root的特权分割成不同的能力,每种能力代表一定的特权操作。例如:能力CAP_SYS_MODULE表示用户能够加载(或卸载)内核模块的特权操作,而CAP_SETUID表示用户能够修改进程用户身份的特权操作。在Capbilities中系统将根据进程拥有的能力来进行特权操作的访问控制。
    在Capilities中,只有进程和可执行文件才具有能力,每个进程拥有三组能力集,分别称为cap_effective, cap_inheritable, cap_permitted(分别简记为:pE,pI,pP),其中cap_permitted表示进程所拥有的最大能力集;cap_effective表示进程当前可用的能力集,可以看做是cap_permitted的一个子集;而cap_inheitable则表示进程可以传递给其子进程的能力集。系统根据进程的cap_effective能力集进行访问控制,cap_effective为cap_permitted的子集,进程可以通过取消cap_effective中的某些能力来放弃进程的一些特权。可执行文件也拥有三组能力集,对应于进程的三组能力集,分别称为cap_effective, cap_allowed 和 cap_forced(分别简记为fE,fI,fP),其中,cap_allowed表示程序运行时可从原进程的cap_inheritable中集成的能力集,cap_forced表示运行文件时必须拥有才能完成其服务的能力集;而cap_effective则表示文件开始运行时可以使用的能力。 

一、Capabilities能力
Capabilities主要分割root用户的特权,即将root的特权分割成不同的能力,每种能力代表一定的特权操作。
CAP_NET_ADMIN:允许执行网络管理任务
CAP_NET_RAW:允许使用原始套接字
# sudo setcap cap_net_raw,cap_net_admin=eip /usr/bin/dumpcap//获取赋予的单一网络能力
# sudo getcap /usr/bin/dumpcap
/usr/bin/dumpcap = cap_net_admin,cap_net_raw+eip# wireshark# man capabilities1.Linux内核从2.2版本开始,就加进的Capabilities的概念与机制,并随着版本升高逐步得到改进。
在linux中,root权限被分割成一下29中能力:
CAP_CHOWN:修改文件属主的权限
CAP_DAC_OVERRIDE:忽略文件的DAC访问限制
CAP_DAC_READ_SEARCH:忽略文件读及目录搜索的DAC访问限制
CAP_FOWNER:忽略文件属主ID必须和进程用户ID相匹配的限制
CAP_FSETID:允许设置文件的setuid位
CAP_KILL:允许对不属于自己的进程发送信号
CAP_SETGID:允许改变进程的组ID
CAP_SETUID:允许改变进程的用户ID
CAP_SETPCAP:允许向其他进程转移能力以及删除其他进程的能力
CAP_LINUX_IMMUTABLE:允许修改文件的IMMUTABLE和APPEND属性标志
CAP_NET_BIND_SERVICE:允许绑定到小于1024的端口
CAP_NET_BROADCAST:允许网络广播和多播访问
CAP_NET_ADMIN:允许执行网络管理任务
CAP_NET_RAW:允许使用原始套接字
CAP_IPC_LOCK:允许锁定共享内存片段
CAP_IPC_OWNER:忽略IPC所有权检查
CAP_SYS_MODULE:允许插入和删除内核模块
CAP_SYS_RAWIO:允许直接访问/devport,/dev/mem,/dev/kmem及原始块设备
CAP_SYS_CHROOT:允许使用chroot()系统调用
CAP_SYS_PTRACE:允许跟踪任何进程
CAP_SYS_PACCT:允许执行进程的BSD式审计
CAP_SYS_ADMIN:允许执行系统管理任务,如加载或卸载文件系统、设置磁盘配额等
CAP_SYS_BOOT:允许重新启动系统
CAP_SYS_NICE:允许提升优先级及设置其他进程的优先级
CAP_SYS_RESOURCE:忽略资源限制
CAP_SYS_TIME:允许改变系统时钟
CAP_SYS_TTY_CONFIG:允许配置TTY设备
CAP_MKNOD:允许使用mknod()系统调用
CAP_LEASE:允许修改文件锁的FL_LEASE标志Android中Capability定义位于kernel/include/uapi/linux/capability.h文件。

2.capability可以作用在进程上(受限),也可以作用在程序文件上,它与sudo不同,sudo只针对用户/程序/文件的概述,即sudo可以配置某个用户可以执行某个命令,可以更改某个文件,而capability是让某个程序拥有某种能力,例如:

capability让/tmp/testkill程序可以kill掉其它进程,但它不能mount设备节点到目录,也不能重启系统,因为我们只指定了它kill的能力,即使程序有问题也不会超出能力范围.

3.每个进程有三个和能力有关的位图:inheritable(I),permitted(P)和effective(E),对应进程描述符task_struct(include/linux/sched.h)里面的cap_effective, cap_inheritable, cap_permitted,所以我们可以查看/proc/PID/status来查看进程的能力.

4.cap_effective:当一个进程要进行某个特权操作时,操作系统会检查cap_effective的对应位是否有效,而不再是检查进程的有效UID是否为0.

例如,如果一个进程要设置系统的时钟,Linux的内核就会检查cap_effective的CAP_SYS_TIME位(第25位)是否有效.

5.cap_permitted:表示进程能够使用的能力,在cap_permitted中可以包含cap_effective中没有的能力,这些能力是被进程自己临时放弃的,也可以说cap_effective是cap_permitted的一个子集.

6.cap_inheritable:表示能够被当前进程执行的程序继承的能力.

2.capability可以作用在进程上(受限),也可以作用在程序文件上,它与sudo不同,sudo只针对用户/程序/文件的概述,即sudo可以配置某个用户可以执行某个命令,可以更改某个文件,而capability是让某个程序拥有某种能力,例如:

capability让/tmp/testkill程序可以kill掉其它进程,但它不能mount设备节点到目录,也不能重启系统,因为我们只指定了它kill的能力,即使程序有问题也不会超出能力范围.

3.每个进程有三个和能力有关的位图:inheritable(I),permitted(P)和effective(E),对应进程描述符task_struct(include/linux/sched.h)里面的cap_effective, cap_inheritable, cap_permitted,所以我们可以查看/proc/PID/status来查看进程的能力.

4.cap_effective:当一个进程要进行某个特权操作时,操作系统会检查cap_effective的对应位是否有效,而不再是检查进程的有效UID是否为0.

例如,如果一个进程要设置系统的时钟,Linux的内核就会检查cap_effective的CAP_SYS_TIME位(第25位)是否有效.

5.cap_permitted:表示进程能够使用的能力,在cap_permitted中可以包含cap_effective中没有的能力,这些能力是被进程自己临时放弃的,也可以说cap_effective是cap_permitted的一个子集.

6.cap_inheritable:表示能够被当前进程执行的程序继承的能力.

Linux内核之capabilities能力相关推荐

  1. 首本深入讲解Linux内核观测技术BPF的书上市!

    新书速递 导读:BPF通过一种软件定义的方式,将内核的行为和数据暴露给用户空间,开发者可以通过在用户空间编写BPF程序,加载到内核空间执行,进而实现对内核行为的灵活管理和控制. 在计算机系统中,包过滤 ...

  2. Go 如何利用 Linux 内核的负载均衡能力?

    在测试 HTTP 服务时,如果该进程我们忘记关闭,而重新尝试启动一个新的服务进程,那么将会遇到类似以下的错误信息: $ go run main.go listen tcp :8000: bind: a ...

  3. Go 如何利用 Linux 内核的负载均衡能力

    在测试 HTTP 服务时,如果该进程我们忘记关闭,而重新尝试启动一个新的服务进程,那么将会遇到类似以下的错误信息: $ go run main.go listen tcp :8000: bind: a ...

  4. 修改Linux内核参数提高服务器并发能力

    1.参数设置 查看相关的参数 sysctl -a|grep tcp_keepalive net.ipv4.tcp_keepalive_intvl = 30 net.ipv4.tcp_keepalive ...

  5. linux内核(4.17.10)配置项详解(x86)

    64-bit kernel--支持64位 General setup--通用设置 Cross-compiler tool prefix--交叉编译工具前缀 Local version-append t ...

  6. linux内核网络协议栈--监控和调优:接收数据(十五)

    译者序 本文翻译自 2016 年的一篇英文博客 Monitoring and Tuning the Linux Networking Stack: Receiving Data.如果能看懂英文,建议阅 ...

  7. Linux 内核安全模块学习总结

    Linux安全模块(LSM) LSM是Linux Secrity Module的简称,即linux安全模块.其是一种轻量级通用访 问控制框架,适合于多种访问控制模型在它上面以内核可加载模块的形实现.用 ...

  8. Linux内核:VFIO 内核文档 (实例,API,bus驱动API)

    <ARM SMMU原理与IOMMU技术("VT-d" DMA.I/O虚拟化.内存虚拟化)> <提升KVM异构虚拟机启动效率:透传(pass-through).DM ...

  9. 嵌入式Linux内核配置、裁剪与编译浅析(ARM版)

    第一部分Linux内核裁减 (1)安装新内核: i)将新内核copy到/usr/src下并解压: #tar -zxvf linux-2.6.38.4.tar.gz ii) 将名为linux的符号链接删 ...

最新文章

  1. Intel不挤牙膏了!10nm性能参数公布:提升43%
  2. [MySQL FAQ]系列 -- 为何innodb表select count(*)很慢
  3. nacos集群的ap cp切换_配置中心Nacos
  4. 一名创业者浴火涅磐的自白——对话阿里云MVP孙琦
  5. XML具有哪些特点?相对于HTML的优势
  6. 隐藏ribbon按钮
  7. cassandra 3.x官方文档(5)---探测器
  8. docker安装informix
  9. 计量经济学第六版伍德里奇计算机答案,求伍德里奇计量经济学答案第六版
  10. 数据库管理系统属于计算机应用,数据库管理系统属于应用软件吗?
  11. 某著名IT公司招聘Axapta/Navision(MBS)顾问
  12. html表格怎么设置间距,HTML表格间距怎么设置
  13. python bookmark_Python PyQT-网络浏览器|书签
  14. AIDL简单实用新手教程(AIDL 包含回调,耗时处理,in out inout oneway使用、打包jar等内容) 附demo下载
  15. 钉钉API考勤打卡记录获取并存入数据库(python)
  16. 【数据库修复】Mallox勒索病毒家族的数据库文件可100%修复
  17. 【opencv】 使用at和ptr指针访问像素的区别
  18. 图像处理课程大设计--汽车牌照自动识别
  19. 郑州高新技术企业认定八大硬性条件是什么?
  20. mysql 查看所有的函数_mysql查看所有存储过程,函数,视图,触发器,表

热门文章

  1. 拯救天使 (BFS)
  2. 1. BeeGo 介绍与项目的创建,启动
  3. 为什么前端H5工程师工资那么高?
  4. 【风马一族_C】进制转化
  5. HTML页面显示透视效果,《前端每日实战》第176号作品:用透视图表现 HTML、CSS 和 JS 的关系...
  6. jdk13不能显示中文_JDK 13都发布了!你还在用JDK7吗?
  7. 模糊逻辑学习--建立Mamdani系统(GUI)
  8. csdn博客图片复制不过来怎么办?如何转载?
  9. linux link path walk,python之os.walk()与os.path.walk()
  10. vba 修改文本文档 指定行_再说For Each循环——无论Python还是VBA都要看