kernel: glibc: prctl
@[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相关推荐
- 浏览器内核_测量时间:从Java到内核再到
浏览器内核 问题陈述 当您深入研究时,即使是最基本的问题也会变得很有趣. 今天,我想深入研究一下Java时间. 我们将从Java API的最基础知识开始,然后逐步向栈底移动:通过OpenJDK源代码g ...
- java内核_测量时间:从Java到内核再到
java内核 问题陈述 当您深入研究时,即使是最基本的问题也会变得很有趣. 今天,我想深入研究一下Java时间. 我们将从Java API的最基础知识开始,然后逐步降低堆栈:通过OpenJDK源代码g ...
- 测量时间:从Java到内核再到
问题陈述 当您深入研究时,即使是最基本的问题也会变得很有趣. 今天,我想深入研究一下Java时间. 我们将从Java API的最基础知识开始,然后逐步降低堆栈:通过OpenJDK源代码glibc一直到 ...
- 开源世界里的重要理念:上游优先(UpStream First)
title: 开源世界里的重要理念:上游优先(UpStream First) date: 2021-02-28 updated: 2021-02-28 categories: 开源 tags: 开源 ...
- fortran 编译器安装(转载)
在Linux操作系统安装盘中,一般自带有Fortran编译器,SuSe9.1以前为g77,Suse9.2以后为gfortran.但是,由于g77和gfortran编译的程序运行效率不高,一般情况下不会 ...
- 某乎大牛就系统原理问题撕逼全纪实
转自知乎答主:李方权,谢之易,侵删. 作为一名系统原理小白,免费上了一堂系统课. 起因:李回答了一个"为什么说雷电OS不是一款OS?MIUI是吗?"的问题,谢在下面有了自己的一个回 ...
- jvm源码分析之interrupt()
概述 线程的thread.interrupt()方法是中断线程.中断一个线程意味着在线程完成它的任务之前,停止它当前正在执行的操作. 如果线程堵塞在object.wait.Thread.join和Th ...
- 高考:三本,计算机专业的建议
文章目录 参考 简介 社会起跑线上的警告 勿上瘾游戏 交朋友 所有的事情 切莫消费贷 防骗 防被推销 凭条的重要性 要学会获取知识的途径 科学上网 字典的应用 图书馆 课程建议 通识教育 数学 英语 ...
- 统计代码执行时间时,System.currentTimeMillis()与System.nanoTime()哪个更适合?
目录 1.nanoTime是什么? 2.currentTimeMillis是什么? 3.nanoTime与currentTimeMillis在JDK中阐述 4.nanoTime与currentTime ...
最新文章
- 爬虫五 Beautifulsoup模块详细
- “速卖通”店铺3天销量破零运营技巧
- 斯坦福大学机器学习第五课正则化“
- python以缩进对齐的方式划分语句块_python以什么划分语句块
- SMT精密电阻对照表
- 4 int.parse方法调用问题和同行评审
- 基于 Generator 和 Iterator 的惰性列表
- python queue join,python3多线程通信方式,主要理解队列的join()和task_done()方法
- ACL访问控制 getfacl 、setfacl 命令
- python可不可以开发软件_python可以开发软件吗
- Chrome扩展程序应用商店方式一
- 基于html + css + js完成淘宝网首页效果
- 你在找mp3音频格式转换器有哪些吗?分享3个实用的软件
- Android仿支付宝9.5芝麻信用分仪表盘
- python 3维正态分布图_三维正态分布图
- 作为ARM Cortex-M家族的继承者 Cortex-M23与M33有哪五大特色?
- 阶乘、排列、组合 公式计算
- unity抠人像原理_PS 抠人像如何抠得干净?
- 计算机微课课件评比活动总结,优质课评比活动总结
- 用vue-cli3+vue-video-player写了个高佣联盟推广网站
热门文章
- 【分块入门】LOJ 数列分块入门 1 - 9 (学习更新……)
- (转)分享一下,我常去的中文技术网站
- 不用刷机的 MIUI?小米系统 APP 初体验
- 亲测生产环境一年多的真正免费的网管软件,功能强大无任何限制,公布个人电话欢迎吐槽...
- VMware Ubuntu创建共享文件夹
- Shell文本处理编写单行指令的诀窍
- Non-function value encountered for default slot. Prefer function slots for better performance.
- PPT修改柱状图成任意图片
- 【个人笔记】Python-Pandas写入Excel多个sheets
- Vue上传图片并预览(好)