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机制,以期对编写新的内核文件系统(通常是给分布式文件系统编写内核客户端)的场景有所帮助. 个人渊源 切入正文 ...
随机推荐
- codevs1906 最长递增子序列问题
题目描述 Description 给定正整数序列x1,..... , xn .(1)计算其最长递增子序列的长度s.(2)计算从给定的序列中最多可取出多少个长度为s的递增子序列.(3)如果允许在取出的 ...
- HDU_1010——小狗走迷宫DFS
Problem Description The doggie found a bone in an ancient maze, which fascinated him a lot. However, ...
- [LeetCode] 11. Container With Most Water My Submissions Question 解题思路
Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai). ...
- C++Memset误区
Memset的原型是void *memset(void *s, char ch, size_t n); Memset是按字节赋值的,对char以外的类型赋0(00000000) -1(11111111 ...
- powerdesigner 字段大小写转换\id 自增
转换:tools --> model options-->naming convention name code 自增: 在你所要设为自增型的键上(比如你的id)双击 ,弹出一个Colu ...
- ie浏览器中 overflow:hidden无作用的解决方案
原因: overflow:hidden失效 当父元素的直接子元素或者下级子元素的样式拥有position:relative属性时,父元素的overflow:hidden属性就会失效. 我在ie内发现子 ...
- http常见错误
100:继续 客户端应当继续发送请求.客户端应当继续发送请求的剩余部分,或者如果请求已经完成,忽略这个响应. 101: 转换协议 在发送完这个响应最后的空行后,服务器将会切换到在Upgrade 消 ...
- (转)iOS keychain API及其封装
一. Keychain API KeyChain中item的结构为: 1.增加keychain Item OSStatus SecItemAdd (CFDictionaryRef attributes ...
- 学习设计模式--观察者模式(C++)
1. 说说简单的函数回调 首先说说一种简单的函数回调机制(一种通过获取对象的指针来进行函数的调用方法)以下是代码演示--- 这是观察者(被回调)部分: class Observer { public: ...
- 内部类之.this&&.new
一..this 我们都知道this是指当前类中的对象本身,但是在内部类中需要指明外部类时,this不再起作用,那应该怎么做呢?下面,让我们看看: public class DotThis { void ...