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机制,以期对编写新的内核文件系统(通常是给分布式文件系统编写内核客户端)的场景有所帮助. 个人渊源 切入正文 ...
随机推荐
- codeforces 277.5 div2 F:组合计数类dp
题目大意: 求一个 n*n的 (0,1)矩阵,每行每列都只有两个1 的方案数 且该矩阵的前m行已知 分析: 这个题跟牡丹江区域赛的D题有些类似,都是有关矩阵的行列的覆盖问题 牡丹江D是求概率,这个题是 ...
- Java Hibernate 之连接池详解
Hibernate支持第三方的连接池,官方推荐的连接池是C3P0,Proxool,以及DBCP.在配置连接池时需要注意的有三点: 一.Apche的DBCP在Hibernate2中受支持,但在Hiber ...
- linux命令-查看当前目录下所有文件的大小:“ll -h”
//ll -h 命令只会显示文件的大小,而文件夹及其子目录或文件的大小不会显示.[root@hadoop01 soft]# ll -h total 2.1G -rw-r--r--. 1 root ro ...
- Python进阶(面向对象编程基础)(三)
6.类属性和实例属性名字冲突怎么办 修改类属性会导致所有实例访问到的类属性全部都受影响,但是,如果在实例变量上修改类属性会发生什么问题呢? class Person(object): address ...
- AngularJs学习笔记6——四大特性之依赖注入
压缩工具:YUI-compressor 为了优化网页功能,对一些脚本文件进行压缩,比如:删除所有的注释和空格等,简化形参.但是AngularJs模块中可以声明多种组件,如控制器.指令.过滤器.服务等. ...
- 基于live555的视频直播 DM368IPNC RTSP分析
因需要,从个人的理解顺序和需求角度对live555的分析与开发整理,包含RTSP Server与RTSP Client.如何直播H.264流与JPEG流等,均进行了探讨,对live555的初学者有一定 ...
- [iOS] App引导页的简单实现 (Swift 2)
转载请注明出处:http://www.jianshu.com/p/024dd2d6e6e6# 已更新至 Xcode7.2.Swift2.1 在第一次打开App或者App更新后通常用引导页来展示产品特性 ...
- USB HID Report Descriptor 报告描述符详解
Report descriptors are composed of pieces of information. Each piece of information is called an Ite ...
- css让div水平垂直居中
示例1: .div1{ width:200px; height:300px; border:1px solid #000; position: relative; } .div2{ width: 40 ...
- linux一键安装vncserver脚本
title: linux一键安装vncserver脚本 date: 2016-04-11 14:32:04 tags: --- linux多数情况下是作为服务器使用的,管理员一般也喜欢使用命令行来管理 ...