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机制,以期对编写新的内核文件系统(通常是给分布式文件系统编写内核客户端)的场景有所帮助. 个人渊源 切入正文 ...
随机推荐
- C# 同步/并发队列ConcurrentQueue (表示线程安全的先进先出 (FIFO) 集合)
http://msdn.microsoft.com/zh-cn/library/dd267265(v=vs.110).aspx static void Main(string[] args) { // ...
- HDU5266---pog loves szh III (线段树+LCA)
题意:N个点的有向树, Q次询问, 每次询问区间[L, R]内所有点的LCA. 大致做法:线段树每个点保存它的孩子的LCA值, 对于每一次询问只需要 在线段树查询即可. #include <bi ...
- HDU 5505 - BestCoder Round #60 - GT and numbers
题目链接 : http://bestcoder.hdu.edu.cn/contests/contest_chineseproblem.php?cid=641&pid=1002 思路 : N有若 ...
- CF-Mr. Kitayuta's Colorful Graph
B. Mr. Kitayuta's Colorful Graph time limit per test 1 second memory limit per test 256 megabytes in ...
- Scala-变量、常量和懒加载
package com.mengyao.scala.function /** * Scala的变量声明和使用(可变类型和值类型) * * @author mengyao */object Test0 ...
- phpstorm xdebug调试设置样式
由于本人比较喜欢白底的phpstorm开发环境,所以XDEBUG断点调试,F8时默认是没有背景色的,phpstorm中的设置方式如下 files -> settings -> Editor ...
- (3)选择元素——(16)延伸阅读(Further reading)
The topic of selectors and traversal methods will be explored in more detail in Chapter 9. A complet ...
- ini文件解析c库(iniparser)
一.交叉编译ini解析库 1.官方网站http://ndevilla.free.fr/iniparser 下载iniparser-3.1.tar.gz 2.解压 tar -zxvf iniparser ...
- Vim 自动文件头注释与模板定义
Vim 自动文件头注释与模板定义 在vim的配置文件.vimrc添加一些配置可以实现创建新文件时自动添加文件头注释,输入特定命令可以生成模板. 使用方法 插入模式输入模式输入seqlogic[Ente ...
- MVC 5 下,应用log4net收集异常信息
1.安装log4net. 首先在VS中通过nuget安装logenet,我用的是VS2013,截屏如下: