名称

seccomp_rule_add, seccomp_rule_add_exact - Add a seccomp filter rule

简介

       #include <seccomp.h>typedef void * scmp_filter_ctx;int SCMP_SYS(syscall_name);struct scmp_arg_cmp SCMP_CMP(unsigned int arg,enum scmp_compare op, ...);struct scmp_arg_cmp SCMP_A0(enum scmp_compare op, ...);struct scmp_arg_cmp SCMP_A1(enum scmp_compare op, ...);struct scmp_arg_cmp SCMP_A2(enum scmp_compare op, ...);struct scmp_arg_cmp SCMP_A3(enum scmp_compare op, ...);struct scmp_arg_cmp SCMP_A4(enum scmp_compare op, ...);struct scmp_arg_cmp SCMP_A5(enum scmp_compare op, ...);struct scmp_arg_cmp SCMP_CMP64(unsigned int arg,enum scmp_compare op, ...);struct scmp_arg_cmp SCMP_A0_64(enum scmp_compare op, ...);struct scmp_arg_cmp SCMP_A1_64(enum scmp_compare op, ...);struct scmp_arg_cmp SCMP_A2_64(enum scmp_compare op, ...);struct scmp_arg_cmp SCMP_A3_64(enum scmp_compare op, ...);struct scmp_arg_cmp SCMP_A4_64(enum scmp_compare op, ...);struct scmp_arg_cmp SCMP_A5_64(enum scmp_compare op, ...);struct scmp_arg_cmp SCMP_CMP32(unsigned int arg,enum scmp_compare op, ...);struct scmp_arg_cmp SCMP_A0_32(enum scmp_compare op, ...);struct scmp_arg_cmp SCMP_A1_32(enum scmp_compare op, ...);struct scmp_arg_cmp SCMP_A2_32(enum scmp_compare op, ...);struct scmp_arg_cmp SCMP_A3_32(enum scmp_compare op, ...);struct scmp_arg_cmp SCMP_A4_32(enum scmp_compare op, ...);struct scmp_arg_cmp SCMP_A5_32(enum scmp_compare op, ...);int seccomp_rule_add(scmp_filter_ctx ctx, uint32_t action,int syscall, unsigned int arg_cnt, ...);int seccomp_rule_add_exact(scmp_filter_ctx ctx, uint32_t action,int syscall, unsigned int arg_cnt, ...);int seccomp_rule_add_array(scmp_filter_ctx ctx,uint32_t action, int syscall,unsigned int arg_cnt,const struct scmp_arg_cmp *arg_array);int seccomp_rule_add_exact_array(scmp_filter_ctx ctx,uint32_t action, int syscall,unsigned int arg_cnt,const struct scmp_arg_cmp *arg_array);Link with -lseccomp.

描述

seccomp_rule_add(),
seccomp_rule_add_array(),
seccomp_rule_add_exact(),
seccomp_rule_add_exact_array()

这四个函数都会向当前seccomp过滤器添加新的过滤规则。
seccomp_rule_add()seccomp_rule_add_array()这两个函数会“尽最大努力”添加指定的规则,但由于体系结构的特殊性,可能会稍微更改规则。(例如:
多路复用系统调用的内部重写,如x86上的socket和ipc函数).seccomp_rule_add_exact()seccomp_rule_add_exact_array()
函数将尝试完全按照指定的方式添加规则,这样它在不同的体系结构上的行为可能会有所不同。虽然seccomp_rule_add()seccomp_rule_add_array()不能保证一个精确的过滤规则集,但是两个函数无论体系结构如何变化,都能保证相同的行为。

在使用seccomp_load(3)将整个过滤器加载到内核中之前,新添加的过滤器规则不会生效。

SCMP_CMP(), SCMP_CMP64(), SCMP_A{0-5}(), 和 SCMP_A{0-5}_64()
等宏会生成一个scmp-arg-cmp结构,以用于上述函数。 SCMP_CMP()SCMP_CMP64() 两个宏允许调用者指定任意参数以及比较运算符、64位掩码和64位基准值,其中SCMP_A{0-5}() 和 SCMP_A{0-5}_64()宏是特定于某个参数的。

SCMP_CMP32()SCMP_A{0-5}_32() 两个宏与上面的变量类似,但它们采用32位掩码和32位基准值。

建议开发人员尽可能避免使用scmp_cmp()SCMP_A{0-5}()宏,并避免使用显式的32位或64位的变体。因为这有助于消除因负基准值而产生的不必要符号扩展而引起的问题。

虽然可以直接使用标准的 __NR_syscall 值指定系统调用值,但是为了确保跨多个体系结构的正确操作,强烈建议使用scmp_sys()宏。请参阅下面的示例部分。

从Linux v4.8开始,可能需要创建一个系统调用值为-1的规则,以允许跟踪程序跳过一个系统调用;为了创建一个具有系统调用值为 -1 的规则,必须首先设置 SCMP_FLTATR_API_TSKIP属性。有关更多信息,请参阅seccomp_attr_set(3)。

上下文过滤器 ctx 是调用seccomp_init(3)返回的值。

有效动作值如下:

SCMP_ACT_KILL

当线程调用与筛选规则匹配的系统调用时,线程将被终止。

SCMP_ACT_KILL_PROCESS

当进程调用与筛选规则匹配的系统调用时,进程将被终止。

SCMP_ACT_TRAP

当线程调用与筛选规则匹配的系统调用时,线程将会抛出一个SIGSYS信号。

SCMP_ACT_ERRNO(uint16_t errno)

当线程调用与筛选规则匹配的系统调用时,它将收到errno的一个返回值。

SCMP_ACT_TRACE(uint16_t msg_num)

如果线程正在被跟踪,并且跟踪进程时在对ptrace(2)的调用中指定了PTRACE_O_TRACESECCOMP选项,则将会通过 PTRACE_EVENT_SECCOMP通知跟踪进程,并且可以使用PTRACE_GETEVENTMSG 选项检索msg_num中提供的值。

SCMP_ACT_LOG

如果seccomp筛选器与筛选器规则匹配,则它不会对调用系统调用的线程产生任何影响,但系统调用会被记录到日志。

SCMP_ACT_ALLOW

如果seccomp筛选器与筛选器规则匹配,则它不会对调用系统调用的线程产生任何影响。

有效比较操作值如下:

SCMP_CMP_NE

参数值不等于基准值时匹配,例如:

SCMP_CMP( arg , SCMP_CMP_NE , datum )

SCMP_CMP_LT

参数值小于基准值时匹配,例如:

SCMP_CMP( arg , SCMP_CMP_LT , datum )

SCMP_CMP_LE

参数值小于或等于基准值时匹配,例如:
SCMP_CMP( arg , SCMP_CMP_LE , datum )

SCMP_CMP_EQ

参数值等于基准值时匹配,例如:
SCMP_CMP( arg , SCMP_CMP_EQ , datum )

SCMP_CMP_GE

参数值大于或等于基准值时匹配,例如:
SCMP_CMP( arg , SCMP_CMP_GE , datum )

SCMP_CMP_GT

参数值大于基准值时匹配,例如:
SCMP_CMP( arg , SCMP_CMP_GT , datum )

SCMP_CMP_MASKED_EQ

当掩码参数值等于掩码基准值时匹配,例如:
SCMP_CMP( arg , SCMP_CMP_MASKED_EQ , mask , datum )

返回值

seccomp_rule_add(), seccomp_rule_add_array(), seccomp_rule_add_exact(), 和seccomp_rule_add_exact_array() 函数成功时返回零,失败时返回负的errno值。

示例

    #include <fcntl.h>#include <seccomp.h>#include <sys/stat.h>#include <sys/types.h>#include <stddef.h>#define BUF_SIZE    256int main(int argc, char *argv[]){int rc = -1;scmp_filter_ctx ctx;struct scmp_arg_cmp arg_cmp[] = { SCMP_A0(SCMP_CMP_EQ, 2) };int fd;unsigned char buf[BUF_SIZE];ctx = seccomp_init(SCMP_ACT_KILL);if (ctx == NULL)goto out;/* ... */fd = open("file.txt", 0);/* ... */rc = seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(close), 0);if (rc < 0)goto out;rc = seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(exit_group), 0);if (rc < 0)goto out;rc = seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(exit), 0);if (rc < 0)goto out;rc = seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(read), 3,SCMP_A0(SCMP_CMP_EQ, fd),SCMP_A1(SCMP_CMP_EQ, (scmp_datum_t)buf),SCMP_A2(SCMP_CMP_LE, BUF_SIZE));if (rc < 0)goto out;rc = seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(write), 1,SCMP_CMP(0, SCMP_CMP_EQ, fd));if (rc < 0)goto out;rc = seccomp_rule_add_array(ctx, SCMP_ACT_ALLOW, SCMP_SYS(write), 1,arg_cmp);if (rc < 0)goto out;rc = seccomp_load(ctx);if (rc < 0)goto out;/* ... */out:seccomp_release(ctx);return -rc;}

注意

虽然可以独立于内核生成seccomp过滤器,但是需要内核支持来加载和执行libseccomp生成的seccomp过滤器。
libseccomp项目站点(包含更多信息和源代码存储库)位于https://github.com/seccomp/libseccomp。此工具以及libseccomp库目前正在开发中,请在项目站点或直接向作者报告任何错误。

其他参考

seccomp_syscall_resolve_name_rewrite(3), seccomp_syscall_priority(3),
seccomp_load(3), seccomp_attr_set(3)

出处:本文来源

安全计算模式 seccomp_rule_add(3) 规则 使用文档相关推荐

  1. 计算机文档设置,优学府计算机教你如何设置word文档样式

    我们之前讲解过excel如何设置样式,从而通过设置得到自己想要的独特风格.而对于word文档来说样式的设置显得更为重要,可以突出文章内容的主次,通常情况下我们只是对文字加粗.对齐方式调整.字号调整等方 ...

  2. poi word转html 根号,二次根式计算题-20210402033540.docx-原创力文档

    文档编制序号:[KKIDT-LLE0828-LLETD298-POI08] 文档编制序号:[KKIDT-LLE0828-LLETD298-POI08] 二次根式计算题 二次根式50道典型计算题 6. ...

  3. [转]搜索引擎的文档相关性计算和检索模型(BM25/TF-IDF)

    搜索引擎的检索模型-查询与文档的相关度计算 1. 检索模型概述 搜索结果排序时搜索引擎最核心的部分,很大程度度上决定了搜索引擎的质量好坏及用户满意度.实际搜索结果排序的因子有很多,但最主要的两个因素是 ...

  4. DOCTYPE是什么鬼?文档模式又是什么鬼?

    !DOCTYPE !DOCTYPE是什么: 在所有 HTML 文档中规定 DOCTYPE 是非常重要的,这样浏览器就能了解预期的文档类型, 告诉浏览器要通过哪一种规范(文档类型定义 DTD)解析文档( ...

  5. emacs latex_使用Emacs Org模式轻松创建LaTeX文档

    emacs latex LaTeX是一个功能强大的系统,尤其是用于编写科学和技术文档的系统. 但是在LaTeX中编写文档可能会造成混乱,因为您需要了解很多命令,并且文本中充满了反斜杠,花括号和其他语法 ...

  6. html 浏览器文档模式,调整:浏览器模式lE8十文档模式8是怎样操作

    本文将讨论IE8浏览器如何确定用以渲染网站的文档模式,如怪异模式(又称IE5模式)和标准模式(更多资料,英文:http://en.wikipedia.org/wiki/Quirks_mode).该内容 ...

  7. 【浏览器】浏览器模式与文档模式区别

    浏览器模式下的影响: 简单来说,"浏览器模式"影响的是浏览器的版本及IE的条件注释, "浏览器模式"会影响服务器端对浏览器版本的判断,主要表现在展现,对CSS影 ...

  8. Doctype作用? 严格模式与混杂模式如何区分?它们有何意义?Doctype文档类型?

    Doctype作用? 严格模式与混杂模式如何区分?它们有何意义?Doctype文档类型? 一.Doctype作用? 二.严格模式与混杂模式如何区分? 三.它们有何意义? 四.Doctype文档类型? ...

  9. IE文档模式的切换,Quirks模式

    使用文档类型DocType.这样可以避免使用Quirks模式 如:使用IE7文档模式 方法: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 ...

最新文章

  1. 企业级自动化运维方案设计及Saltstack、Ansible等5种工具比较分析--云平台技术栈08...
  2. php上传过滤,编写PHP脚本过滤用户上传的图片_PHP
  3. CVE-2014-4113_Win32k提权漏洞学习笔记
  4. iOS之深入解析数组遍历的底层原理和性能分析
  5. 机器学习(part2)--线性方程组的列表达
  6. 申万一级行业日指数_基金收评 | 指数震荡走弱,军工股成两市主线!后期行情如何?...
  7. 键值存储之外,Redis还有这些用法
  8. Scala中的while循环
  9. [css] font-style的属性有Italic和oblique,两者有什么区别呢
  10. 重构,体现一个工程师的基本素养和底蕴(细节篇)
  11. pytorch .item_60分钟入门PyTorch,官方教程教授第一个深度学习模型(附链接)
  12. termux apache php,要啥自行车之Termux:将我们的(Android)安卓手机打造成全能的服务器...
  13. 【转载】通往性能优化的天堂-地狱 JOIN方法说明
  14. 如何保持session一致性?
  15. matlab xaxislocation,x轴和y轴位置
  16. ListView和条目点击事件、条目长按事件
  17. 百度云的产品及使用场景分析
  18. CTeX 自动化学报模板使用
  19. 天津大学计算机学院院长及副院长,于瑞国
  20. 算法学习:高精度加法//c++

热门文章

  1. 【java项目】飞机大战
  2. 先来先服务算法、运行时间最短者优先算法和最高响应比优先调度算法_CPU的调度器scheduler...
  3. 益智小游戏点灯(迷你世界lua脚本)
  4. [杂谈] 机器学习与优化算法的对比
  5. Spring JPA整合QueryDSL
  6. Flexsim AGV
  7. 有哪些好用的高考志愿填报APP
  8. SVN 如何把一个项目的版本回退到指定版本?
  9. 博杰声学测试软件,音频分析仪 - Audio Precision 官方网站 - 声学和音频测试公认的标准...
  10. linux下c的串口收发