@[TOC

参考

https://man7.org/linux/man-pages/man2/prctl.2.html

简介

#include <sys/prctl.h>
int prctl(int option, unsigned long arg2, unsigned long arg3, unsigned long arg4, unsigned long arg5);
最终调用的是内核的
kernel/sys.c:SYSCALL_DEFINE5(prctl, int, option, unsigned long, arg2, unsigned long, arg3,

PR_CAP_AMBIENT_RAISE

使用时需要注意的问题;
如果是非root用户执行的程序需要特殊的权限才能执行。kernel代码会从下面多个设置选项做检查。

如果碰到EPERM错误
if (arg2 == PR_CAP_AMBIENT_RAISE &&
(!cap_raised(current_cred()->cap_permitted, arg3) || //看允许集里是否有
!cap_raised(current_cred()->cap_inheritable, //看继承集里是否有
arg3) ||
issecure(SECURE_NO_CAP_AMBIENT_RAISE))) // 看对应的安全位是否被disable
return -EPERM;

SECURE_NO_CAP_AMBIENT_RAISE

commit 746bf6d64275be0c65b0631d8a72b16f1454cfa1
Author: Andy Lutomirski luto@kernel.org
Date: Fri Sep 4 15:42:51 2015 -0700

capabilities: add a securebit to disable PR_CAP_AMBIENT_RAISEPer Andrew Morgan's request, add a securebit to allow admins to disable
PR_CAP_AMBIENT_RAISE.  This securebit will prevent processes from adding
capabilities to their ambient set.For simplicity, this disables PR_CAP_AMBIENT_RAISE entirely rather than
just disabling setting previously cleared bits.

注意事项

需要注意的是,如果需要设置多个能力,需要单个执行不能合并执行。
if(prctl(PR_CAP_AMBIENT, PR_CAP_AMBIENT_RAISE, CAP_NET_RAW,0, 0)!=0)
if(prctl(PR_CAP_AMBIENT, PR_CAP_AMBIENT_RAISE, CAP_NET_ADMIN, 0, 0)!=0)

if(prctl(PR_CAP_AMBIENT, PR_CAP_AMBIENT_RAISE, CAP_NET_RAW|CAP_NET_ADMIN,0, 0)!=0) ;; 这个执行会有问题。

prctl 相关的单元测试

tools/testing/selftests/syscall_user_dispatch/sud_test.c

kernel: glibc: prctl相关推荐

  1. 浏览器内核_测量时间:从Java到内核再到

    浏览器内核 问题陈述 当您深入研究时,即使是最基本的问题也会变得很有趣. 今天,我想深入研究一下Java时间. 我们将从Java API的最基础知识开始,然后逐步向栈底移动:通过OpenJDK源代码g ...

  2. java内核_测量时间:从Java到内核再到

    java内核 问题陈述 当您深入研究时,即使是最基本的问题也会变得很有趣. 今天,我想深入研究一下Java时间. 我们将从Java API的最基础知识开始,然后逐步降低堆栈:通过OpenJDK源代码g ...

  3. 测量时间:从Java到内核再到

    问题陈述 当您深入研究时,即使是最基本的问题也会变得很有趣. 今天,我想深入研究一下Java时间. 我们将从Java API的最基础知识开始,然后逐步降低堆栈:通过OpenJDK源代码glibc一直到 ...

  4. 开源世界里的重要理念:上游优先(UpStream First)

    title: 开源世界里的重要理念:上游优先(UpStream First) date: 2021-02-28 updated: 2021-02-28 categories: 开源 tags: 开源 ...

  5. fortran 编译器安装(转载)

    在Linux操作系统安装盘中,一般自带有Fortran编译器,SuSe9.1以前为g77,Suse9.2以后为gfortran.但是,由于g77和gfortran编译的程序运行效率不高,一般情况下不会 ...

  6. 某乎大牛就系统原理问题撕逼全纪实

    转自知乎答主:李方权,谢之易,侵删. 作为一名系统原理小白,免费上了一堂系统课. 起因:李回答了一个"为什么说雷电OS不是一款OS?MIUI是吗?"的问题,谢在下面有了自己的一个回 ...

  7. jvm源码分析之interrupt()

    概述 线程的thread.interrupt()方法是中断线程.中断一个线程意味着在线程完成它的任务之前,停止它当前正在执行的操作. 如果线程堵塞在object.wait.Thread.join和Th ...

  8. 高考:三本,计算机专业的建议

    文章目录 参考 简介 社会起跑线上的警告 勿上瘾游戏 交朋友 所有的事情 切莫消费贷 防骗 防被推销 凭条的重要性 要学会获取知识的途径 科学上网 字典的应用 图书馆 课程建议 通识教育 数学 英语 ...

  9. 统计代码执行时间时,System.currentTimeMillis()与System.nanoTime()哪个更适合?

    目录 1.nanoTime是什么? 2.currentTimeMillis是什么? 3.nanoTime与currentTimeMillis在JDK中阐述 4.nanoTime与currentTime ...

最新文章

  1. 爬虫五 Beautifulsoup模块详细
  2. “速卖通”店铺3天销量破零运营技巧
  3. 斯坦福大学机器学习第五课正则化“
  4. python以缩进对齐的方式划分语句块_python以什么划分语句块
  5. SMT精密电阻对照表
  6. 4 int.parse方法调用问题和同行评审
  7. 基于 Generator 和 Iterator 的惰性列表
  8. python queue join,python3多线程通信方式,主要理解队列的join()和task_done()方法
  9. ACL访问控制 getfacl 、setfacl 命令
  10. python可不可以开发软件_python可以开发软件吗
  11. Chrome扩展程序应用商店方式一
  12. 基于html + css + js完成淘宝网首页效果
  13. 你在找mp3音频格式转换器有哪些吗?分享3个实用的软件
  14. Android仿支付宝9.5芝麻信用分仪表盘
  15. python 3维正态分布图_三维正态分布图
  16. 作为ARM Cortex-M家族的继承者 Cortex-M23与M33有哪五大特色?
  17. 阶乘、排列、组合 公式计算
  18. unity抠人像原理_PS 抠人像如何抠得干净?
  19. 计算机微课课件评比活动总结,优质课评比活动总结
  20. 用vue-cli3+vue-video-player写了个高佣联盟推广网站

热门文章

  1. 【分块入门】LOJ 数列分块入门 1 - 9 (学习更新……)
  2. (转)分享一下,我常去的中文技术网站
  3. 不用刷机的 MIUI?小米系统 APP 初体验
  4. 亲测生产环境一年多的真正免费的网管软件,功能强大无任何限制,公布个人电话欢迎吐槽...
  5. VMware Ubuntu创建共享文件夹
  6. Shell文本处理编写单行指令的诀窍
  7. Non-function value encountered for default slot. Prefer function slots for better performance.
  8. PPT修改柱状图成任意图片
  9. 【个人笔记】Python-Pandas写入Excel多个sheets
  10. Vue上传图片并预览(好)