linux setcap指令,linux setcap/getcap

Linux是一种安全操做系统,它给普通用户尽量低的权限,而把所有的系统权限赋予一个单一的账户--root。root账户用来管理系统、安装软件、管理账户、运行某些服务、安装/卸载文件系统、管理用户、安装软件等。另外,普通用户的不少操做也须要root权限,这经过setuid实现。api

这种依赖单一账户执行特权操做的方式加大了系统的面临风险,而须要root权限的程序可能只是为了一个单一的操做,例如:绑定到特权端口、打开一个

只有root权限能够访问的文件。某些程序可能有安全漏洞,而若是程序不是以root的权限运行,其存在的漏洞就不可能对系统形成什么威胁。安全

从2.1版开始,内核开发人员在Linux内核中加入了能力(capability)的概念。其目标是消除须要执行某些操做的程序对root账户的依赖。从2.2版本的内核开始,这些代基本可使用了,虽然还存在一些问题,可是方向是正确的。网络

2.Linux内核能力详解ui

传统UNIX的信任状模型很是简单,就是“超级用户对普通用户”模型。在这种模型中,一个进程要么什么都能作,要么几乎什么也不能作,这取决于进程

的UID。若是一个进程须要执行绑定到私有端口、加载/卸载内核模块以及管理文件系统等操做时,就须要彻底的root权限。很显然这样作对系统安全存在很

大的威胁。UNIX系统中的SUID问题就是由这种信任状模型形成的。例如,一个普通用户须要使用ping命令。这是一个SUID命令,会以root的权

限运行。而实际上这个程序只是须要RAW套接字创建必要ICMP数据包,除此以外的其它root权限对这个程序都是没有必要的。若是程序编写很差,就可能

被攻击者利用,得到系统的控制权。操作系统

使用能力(capability)能够减少这种风险。系统管理员为了系统的安全能够剥夺root用户的能力,这样即便root用户也将没法进行某些

操做。而这个过程又是不可逆的,也就是说若是一种能力被删除,除非从新启动系统,不然即便root用户也没法从新添加被删除的能力。.net

3.权限说明

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则表示文件开始运行时可使用的能力。

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标志blog

cap_chown=eip是将chown的能力以cap_effective(e),cap_inheritable(i),cap_permitted(p)三种位图的方式受权给相关的程序文件.进程

从Linux中第一次启动Wireshark的时候,可能会以为奇怪,为何看不到任何一个网卡,好比eth0之类的。这是由于,直接访问这些设备须要 root权限。而后,我就用root权限去用了。固然,这是一个很差的作法。好比Gentoo中就会提示:WIRESHARK CONTAINS OVER ONE POINT FIVE MILLION LINES OF SOURCE CODE. DO NOT RUN THEM AS ROOT.ip

那怎么办呢?Wireshark的leader Gerald Combs指出,如今多数Linux发行版都开始实现对raw网络设备使用文件系统权限(能力) ,能够用这个途径从普通用户启动Wireshark。

4.具体步骤:

1).安装setcap。setcap 是libcap2-bin包的一部分,通常来讲,这个包默认会已经装好。

sudo apt-get install libcap2-bin

2).建立Wireshark组。这一步在安装Wireshark的时候,也会完成。

# groupadd -g wireshark

# usermod -a -G wireshark

# chgrp wireshark /usr/bin/dumpcap

# chmod 4750 /usr/bin/dumpcap

3).赋予权限。

#setcap cap_net_raw,cap_net_admin=eip /usr/bin/dumpcap 完成。

可使用 getcap /usr/bin/dumpcap验证,输出应当是:/usr/bin/dumpcap = cap_net_admin,cap_net_raw+eip

如今就能够从本身的普通用户启动Wireshark抓包了

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值