linux capability

一 capability集:

能力                                               作用                                                                                                        危险

CAP_AUDIT_CONTROL:         Control kernel auditing
CAP_AUDIT_READ:                 Read the audit log via a multicast netlink socket
CAP_AUDIT_WRITE:               Write records to kernel audit log
CAP_BLOCK_SUSPEND:       Can prevent the system from suspending

CAP_CHOWN:                        Change file user and group                                                                      Yes
CAP_DAC_OVERRIDE:         Bypass file permission checks                                                                Yes
CAP_DAC_READ_SEARCH: Read all files and directories                                                                    Yes
CAP_FOWNER:                      Perform operations on files owned by other users such as chmod, chattr or utime             Yes
CAP_FSETID:                         Keep suid and guid permissions when modifying a file                             Yes
CAP_IPC_LOCK:                    Lock memory (mlock, mlockall, mmap, shmctl)                       

CAP_IPC_OWNER:                Bypass shared memory permission checks                                             Yes
CAP_KILL:                               Send signals to any process

CAP_LEASE:                          Establish leases on any file
CAP_LINUX_IMMUTABLE:    Make files immutable and remove ability append to file using chattr
CAP_MAC_ADMIN:                Perform MAC administration (for Smack LSM)                                           Yes
CAP_MAC_OVERRIDE:        Override MAC (for Smack LSM)                                                                 Yes
CAP_MKNOD:                        Create files using mknod()
CAP_NET_ADMIN:                Perform network administration such as configuring interfaces or routing tables                   Yes
CAP_NET_BIND_SERVICE: Bind socket to privileged port (< 1024)
CAP_NET_BROADCAST:     Make socket broadcasts and listen to multicasts
CAP_NET_RAW:                    Use RAW and PACKET sockets
CAP_SETGID:                        Change to any Group ID
CAP_SETFCAP:                     Set file capabilities                                                                                        Yes
CAP_SETPCAP:                     Set capabilities if file capabilities not present
CAP_SETUID:                        Change to any User ID
CAP_SYS_ADMIN:                Perform privileged system administration operations such as mount, swapon, sethostname and keyctl.This capability in particular, can be used in                                                                 multiple ways to gain additional privileges.                                           Yes
CAP_SYS_BOOT:                 Can reboot and kexec_load
CAP_SYS_CHROOT:           Can chroot
CAP_SYS_MODULE:           Can load and unload kernel modules
CAP_SYS_NICE:                  Change process priority levels and scheduling class (e.g. to real-time)
CAP_SYS_PACCT:              Can use acct

CAP_SYS_PTRACE:            ptrace any process                                                                                         Yes
CAP_SYS_RAWIO:               Perform I/O port operations and access /proc/kcore. Override zero mmap restrictions.
CAP_SYS_RESOURCE:      Set or override resource limits
CAP_SYS_TIME:                  Can set the system clock and real-time hardware clock
CAP_SYS_TTY_CONFIG:   Can hang up the current tty
CAP_SYSLOG:                    Can configure the behavior of printk() to affect the kernel’s syslog
CAP_WAKE_ALARM:          Can trigger something to wake the system

注意:不能版本内核可能会有些差异,有些是后面才增加的。

二 能力的传递

子进程capabilities 获得能力的方式有两种:
a.从父进程继承;
b.从file capabilities,如果可执行文件设置了,和setuid和setgid类似可获得比父进程更大的能力集,file capabilities保存在XATTR中;

通过fork或clone创建的子进程:

permitted, effective 和 inheritable capabilities 跟父进程保持一致

通过exec启动的进程:

a.如果设置了file capabilities,则子进程能力为:
/*
* pP' = (X & fP) | (pI & fI)
*/
new->cap_permitted.cap[i] =
(new->cap_bset.cap[i] & permitted) |
(new->cap_inheritable.cap[i] & inheritable); 
其中permitted和inheritable从file capabilities读取。
         如果设置了file effective capability,则:
if (effective)
new->cap_effective = new->cap_permitted;
else
cap_clear(new->cap_effective);

b.如果没有设置file capabilities, 则从父进程继承能力的规则为:
   父进程为root,则继承到的能力为:
if (new->euid == 0 || new->uid == 0) {
/* pP' = (cap_bset & ~0) | (pI & ~0) */
new->cap_permitted = cap_combine(old->cap_bset,
old->cap_inheritable);
}
即cap_bset | cap_inheritable;
   如果父进程为非root,则子进程失去所有能力。
关于能力继承,不能版本内核处理也许会有所差异,这里只是v3.3.8的处理规则,具体的可以查看内核源代码:
prepare_binprm()---------->security_bprm_set_creds()------------->cap_bprm_set_creds()

file capabilities 的开启:
a.确保kernel支持;
b.设置执行文件:setcap cap_sys_nice+pe myapp
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值