Linux的capability深入分析(1)
一)概述:
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <sys/types.h>
- #include <unistd.h>
- #undef _POSIX_SOURCE
- #include <sys/capability.h>
- extern int errno;
- void whoami(void)
- {
- printf("uid=%i euid=%i gid=%i\n", getuid(), geteuid(), getgid());
- }
- void listCaps()
- {
- cap_t caps = cap_get_proc();
- ssize_t y = 0;
- printf("The process %d was give capabilities %s\n",(int) getpid(), cap_to_text(caps, &y));
- fflush(0);
- cap_free(caps);
- }
- int main(int argc, char **argv)
- {
- int stat;
- whoami();
- stat = setuid(geteuid());
- pid_t parentPid = getpid();
- if(!parentPid)
- return 1;
- cap_t caps = cap_init();
- cap_value_t capList[5] ={ CAP_NET_RAW, CAP_NET_BIND_SERVICE , CAP_SETUID, CAP_SETGID,CAP_SETPCAP } ;
- unsigned num_caps = 5;
- cap_set_flag(caps, CAP_EFFECTIVE, num_caps, capList, CAP_SET);
- cap_set_flag(caps, CAP_INHERITABLE, num_caps, capList, CAP_SET);
- cap_set_flag(caps, CAP_PERMITTED, num_caps, capList, CAP_SET);
- if (cap_set_proc(caps)) {
- perror("capset()");
- return EXIT_FAILURE;
- }
- listCaps();
- printf("dropping caps\n");
- cap_clear(caps); // resetting caps storage
- if (cap_set_proc(caps)) {
- perror("capset()");
- return EXIT_FAILURE;
- }
- listCaps();
- cap_free(caps);
- return 0;
- }
- #undef _POSIX_SOURCE
- #include <stdlib.h>
- #include <stdio.h>
- #include <sys/types.h>
- #include <unistd.h>
- #include <linux/capability.h>
- #include <errno.h>
- int main()
- {
- struct __user_cap_header_struct cap_header_data;
- cap_user_header_t cap_header = &cap_header_data;
- struct __user_cap_data_struct cap_data_data;
- cap_user_data_t cap_data = &cap_data_data;
- cap_header->pid = getpid();
- cap_header->version = _LINUX_CAPABILITY_VERSION_1;
- if (capget(cap_header, cap_data) < 0) {
- perror("Failed capget");
- exit(1);
- }
- printf("Cap data 0x%x, 0x%x, 0x%x\n", cap_data->effective,cap_data->permitted, cap_data->inheritable);
- }
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <sys/types.h>
- #include <unistd.h>
- #undef _POSIX_SOURCE
- #include <sys/capability.h>
- extern int errno;
- void whoami(void)
- {
- printf("uid=%i euid=%i gid=%i\n", getuid(), geteuid(), getgid());
- }
- void listCaps()
- {
- cap_t caps = cap_get_proc();
- ssize_t y = 0;
- printf("The process %d was give capabilities %s\n",(int) getpid(), cap_to_text(caps, &y));
- fflush(0);
- cap_free(caps);
- }
- int main(int argc, char **argv)
- {
- int stat;
- whoami();
- stat = setuid(geteuid());
- pid_t parentPid = getpid();
- if(!parentPid)
- return 1;
- cap_t caps = cap_init();
- cap_value_t capList[5] ={ CAP_NET_RAW, CAP_NET_BIND_SERVICE , CAP_SETUID, CAP_SETGID,CAP_SETPCAP } ;
- unsigned num_caps = 5;
- cap_set_flag(caps, CAP_EFFECTIVE, num_caps, capList, CAP_SET);
- cap_set_flag(caps, CAP_INHERITABLE, num_caps, capList, CAP_SET);
- cap_set_flag(caps, CAP_PERMITTED, num_caps, capList, CAP_SET);
- if (cap_set_proc(caps)) {
- perror("capset()");
- return EXIT_FAILURE;
- }
- listCaps();
- cap_free(caps);
- struct __user_cap_header_struct cap_header_data;
- cap_user_header_t cap_header = &cap_header_data;
- struct __user_cap_data_struct cap_data_data;
- cap_user_data_t cap_data = &cap_data_data;
- cap_header->pid = getpid();
- cap_header->version = _LINUX_CAPABILITY_VERSION_1;
- if (capget(cap_header, cap_data) < 0) {
- perror("Failed capget");
- exit(1);
- }
- printf("Cap data 0x%x, 0x%x, 0x%x\n", cap_data->effective,cap_data->permitted, cap_data->inheritable);
- sleep(60);
- return 0;
- }
Linux的capability深入分析(1)的更多相关文章
- Linux的capability深入分析
Linux的capability深入分析详见:http://blog.csdn.net/u014338577/article/details/48791953 lxd中对容器能力的限制: 普通用户不能 ...
- Linux的capability深入分析(2)【转】
转自:https://blog.csdn.net/wangpengqi/article/details/9821231 rpm -ql libcap-2.16-5.2.el6.i686 /lib/l ...
- Linux的capability深入分析(1)【转】
转自:https://blog.csdn.net/wangpengqi/article/details/9821227 一)概述: )从2.1版开始,Linux内核有了能力(capability)的概 ...
- (转) Linux的capability深入分析(2)
一)capability的工具介绍 在我们的试验环境是RHEL6,libcap-2.16软件包中包含了相关的capability设置及查看工作,如下: rpm -ql libcap-2.16- ...
- Linux select 机制深入分析
Linux select 机制深入分析 作为IO复用的实现方式.select是提高了抽象和batch处理的级别,不是传统方式那样堵塞在真正IO读写的系统调用上.而是堵塞在sele ...
- 转载:linux capability深入分析
转至http://www.cnblogs.com/iamfy/archive/2012/09/20/2694977.html 一)概述: 1)从2.1版开始,Linux内核有了能力(capabili ...
- Linux能力(capability)机制的继承
1.Linux能力机制概述 在以往的UNIX系统上,为了做进程的权限检查,把进程分为两类:特权进程(有效用户ID是0)和非特权进程(有效用户ID是非0).特权进程可以通过内核所有的权限检查,而非特权进 ...
- 给linux安全模块LSM添加可链式调用模块(一)
前些日子接了个外包的活,了解了一下Linux安全模块,发现了安全模块中的一些问题. 关于linux安全模块LSM在此就不多说了,大家google下就明白了. 这里主要介绍的是如何修改这个模块,使它可链 ...
- Linux VFS机制简析(一)
Linux VFS机制简析(一) 本文主要基于Linux内核文档,简单分析Linux VFS机制,以期对编写新的内核文件系统(通常是给分布式文件系统编写内核客户端)的场景有所帮助. 个人渊源 切入正文 ...
随机推荐
- POJ_1321——棋盘问题,回溯+剪枝
Description 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子 ...
- 使用strace查看C语言级别的php源码
XCACHE XCache 是一个开源的 opcode 缓存器/优化器, 这意味着他能够提高您服务器上的 PHP 性能. 他通过把编译 PHP 后的数据缓冲到共享内存从而避免重复的编译过程, 能够直接 ...
- 第一个ServiceStack程序
1. https://github.com/ServiceStack/ServiceStack/wiki/Create-your-first-webservice 2. http://tech.pro ...
- MySQL事务处理2
MySQL5.X 都已经发布好久了,但是还有很多人认为MySQL是不支持事务处理的,这不得不怪他们是孤陋寡闻的,其实,只要你的MySQL版本支持BDB或 InnoDB表类型,那么你的MySQL就具有事 ...
- JavaScript 去除数组重复成员
[...new Set(array)] 运用 Set结构不会添加重复的值 和...解构 function dedupe(array) { return Array.from(new Set(array ...
- (转)三星i9500/Galaxy S4 刷基带教程
一.手机基带是什么? 三星手机的基带用通俗的话来说就是手机中的一个负责信号调节并进行传输给系统的电路设置,基带的好坏直接影响到在同等信号强度下,手机的获取信号的能力. 二.为什么要刷基带? 常说的基带 ...
- URL中的空格字符如何编码
URL encoding the space character: + or %20? 简单理解: ‘?’前的路径中的空格必须为’20%’ ‘?’后的参数中空格可以被编码成’+’(正常情况),然而有时 ...
- 如何用SVN进行个人版本管理
事实上SVN的确是我用过的最好的源码管理工具,虽然我用过的这类工具并不多,只有VSS.CVS和SVN,其它像PVCS. TeamSource.ClearCase之类的只有耳闻,因为它们都是商业产品,并 ...
- VMware上实现LVS负载均衡(NAT)
本文LVS的实现方式採用NAT模式.关于NAT的拓扑图请參照我的上一篇文章.本文纯粹实验.NAT在生产环境中不推荐使用.原因是Load Balancereasy成为瓶颈! 1.VMware9上安装Ce ...
- Tomcat架构以及理解sever.xml
Tomcat架构图 当用户在地址栏输入访问地址后,首先识别访问协议(假设为http),那么通过针对于http协议传输的Connector连接器,连接到tomcat的服务中,连接后开始检测Engine下 ...