`
mmdev
  • 浏览: 12950982 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

[进程]capget()/capset() -- 获得/设置进程的权能

 
阅读更多

原型

引用
#undef _POSIX_SOURCE
#include <sys/capability.h>
int capget(cap_user_header_t hdrp, cap_user_data_t datap);
int capset(cap_user_header_t hdrp, const cap_user_data_t datap);


说明
capget() 用来获得进程的权能;capset() 用来设置进程权能。

相关的数据结构:

引用
#define _LINUX_CAPABILITY_VERSION_10x19980330
#define _LINUX_CAPABILITY_U32S_1 1

#define _LINUX_CAPABILITY_VERSION_20x20071026
#define _LINUX_CAPABILITY_U32S_2 2

typedef struct __user_cap_header_struct {
__u32 version;
int pid;
} *cap_user_header_t;

typedef struct __user_cap_data_struct {
__u32 effective;
__u32 permitted;
__u32 inheritable;
} *cap_user_data_t;


一般的,32 位系统要在程序中使用 _LINUX_CAPABILITY_VERSION_1 这个宏,而 64 位系统使用 _LINUX_CAPABILITY_VERSION_2 宏。
__user_cap_header_struct 结构体里:
version 就是上面的两个宏中的一个。
pid 为进程的 PID。

下面是这两个函数的简单用法代码:

引用
#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);
}


注意,在 man 手册里使用 #include <sys/capability.h> 头文件。实际上,现在已经改为 #include <linux/capability.h>。

在普通用户时运行:

引用
$ ./capgset
Cap data 0x0, 0x0, 0x0

换为 root 用户时运行:

引用
#./capgset
Cap data 0xffffffff, 0xffffffff, 0x0
分享到:
评论

相关推荐

    在linux平台下的嵌入式可以执行进程

    push到linux开发的终端中,根据自己需要可以讲终端做server端或者是client端,pc连接,测试wifi吞吐量

    论文研究-基于主体的扩展权能技术研究与实现.pdf

    权能作为一种基于主体的访问控制手段,其实现方式灵活多样,使用方便。权能的概念很早就已经提出,已经成为分布式操作系统中的一种基本访问控制机制。通过对主体行为的限制,权能技术能方便地达到限制主体作用范围的...

    基于PAM的用户权能分配实现源码

    基于PAM的用户权能分配实现源码,包括脚本文件,c程序实现。

    论文研究 - 内部移民与增强妇女权能:孟加拉国达卡市女性服装工人研究

    本研究旨在探讨内部人口迁移作为人口统计过程对增强妇女权能的影响。 进行混合方法设计以进行本研究。 通过简单的随机抽样,选择了过去十年内从农村地区迁移到首都孟加拉国的一百三十六名妇女(136名)作为样本。 ...

    能源权能合约的对冲模型

    我们从在恒定绝对风险规避(CARA)-正态设置下开发的分析模型中得出这些合约中的封闭式最优套期保值头寸和最优均值-方差折衷。 我们从数学上证明了量化合约的使用可以使LSE降低其收入波动。 此外,我们的模型为将...

    受限环境下基于权能的访问控制研究

    针对资源受限环境对认证和访问控制提出的轻载性、灵活性、基于局部条件的访问策略和端到端的安全性等特殊要求进行了分析和研究,基于拥有证明(proof-of-possession,PoP)安全机制并通过构造PoP权能令牌,提出了一...

    系统内核同步

    有关linux操作系统系统的内核同步机制分析

    深入分析Linux内核源码.chm

    4.7 进程的权能 4.8 内核同步 第五章进程调度 5.1 Linux时间系统 5.2 时钟中断 5.3 Linux的调度程序-Schedule( ) 5.4 进程切换 第六章 Linux内存管理 6.1 Linux的内存管理概述 6.2 Linux内存管理的初始化 6.3 内存...

    LINUX编程白皮书 (全集)

    11.1 怎样得到Linux内核源码 117 11.2 内核源码的编排 117 11.3 从何处看起 118 第12章 Linux数据结构 120 附录A 有用的Web和FTP站点 138 附录B 词汇表 139 第二部分 Linux内核模块编程指南 致谢 前言 第1章 Hello, ...

    Linux编程从入门到精通

    11.1 怎样得到Linux内核源码 117 11.2 内核源码的编排 117 11.3 从何处看起 118 第12章 Linux数据结构 120 附录A 有用的Web和FTP站点 138 附录B 词汇表 139 第二部分 Linux内核模块编程指南 致谢 前言 第1章 Hello, ...

    多域物联网中基于区块链和权能的访问控制机制.pdf

    #资源达人分享计划#

    Linux编程白皮书

    11.1 怎样得到Linux内核源码 117 11.2 内核源码的编排 117 11.3 从何处看起 118 第12章 Linux数据结构 120 附录A 有用的Web和FTP站点 138 附录B 词汇表 139 第二部分 Linux内核模块编程指南 致谢 前言 第1章 Hello, ...

    LINUX编程白皮书

    11.1 怎样得到Linux内核源码 117 11.2 内核源码的编排 117 11.3 从何处看起 118 第12章 Linux数据结构 120 附录A 有用的Web和FTP站点 138 附录B 词汇表 139 第二部分 Linux内核模块编程指南 致谢 前言 第1章 ...

    linux编程白皮书

    11.1 怎样得到Linux内核源码 117 11.2 内核源码的编排 117 11.3 从何处看起 118 第12章 Linux数据结构 120 附录A 有用的Web和FTP站点 138 附录B 词汇表 139 第二部分 Linux内核模块编程指南 致谢 前言 第1章 Hello, ...

    Linux编程资料

    11.1 怎样得到Linux内核源码 117 11.2 内核源码的编排 117 11.3 从何处看起 118 第12章 Linux数据结构 120 附录A 有用的Web和FTP站点 138 附录B 词汇表 139 第二部分 Linux内核模块编程指南 致谢 前言 第1章 Hello, ...

    深入分析Linux内核源码

    4.7 进程的权能 4.8 内核同步 4.8.1信号量 4.8.2原子操作 4.8.3 自旋锁、读写自旋锁和大读者自旋锁 4.9 本章小节 第五章进程调度 5.1 Linux时间系统 5.1.1 时钟硬件 5.1.2 时钟运作机制 5.1.3 Linux...

Global site tag (gtag.js) - Google Analytics