kubernetes apparmor 语法

网友投稿 355 2022-09-14

kubernetes apparmor 语法

kubernetes apparmor 语法 tags: apparmor,安全

文章目录

​​1. 简介​​​​2. 注释​​​​3. Include Rules​​​​4. Child profiles​​​​5. Hats​​​​6. Capability Rules​​​​7. Network Rules​​​​8. File rules​​

​​9. 文件通配​​​​9.1 文件通配示例​​​​9.2 文件权限​​​​9.3 执行权限​​​​9.4 AppArmor 文件标签​​

​​10. Rule 修饰符​​

上一篇:​​kubernetes apparmor 入门​​

1. 简介

配置文件以配置文件名称开头,后跟可选标志字段,然后是开头​​{​​​后跟配置文件规则,并以结束​​}​​结束如果配置文件名称不以/开头,则应在前面加上关键字配置文件. 例如:

{ # profile contents } /usr/bin/firefox flags=(complain) { # profile contents } profile /usr/bin/ { # profile contents } profile user1 { # profile contents }

配置文件名称可以包含文件规则通配符,以允许它们应用于多个可执行文件。

2. 注释

# Comment 1 # Comment 2 profile example { # comment 3 # comment 4 /home/foo rw, # comment at the end of a file rule }

3. Include Rules

#include #include “a/relative/path/file” include

#包含与评论规则冲突并优先。#和​​include​​不能与空格分开,否则将被视为注释

# include is a comment #include

4. Child profiles

配置文件可以包含子配置文件。子配置文件可用于以特殊方式限制应用程序,或者当您希望子在系统上不受限制,但在从父调用时被限制。例如:

{ /path/to/child1 cx -> child1, /path/to/child2 cx, /path/to/* cx, # for * matching child3 will transition to child3, # child4, child5, ... will transition to /path/to/child* # if matching child profile does not exist will fail /another/path/to/* cx -> child1, # send all matching execs to child1 profile child1 { } profile /path/to/child2 { } profile /path/to/child3 { } # generic fall back profile profile /path/to/child* { } }

5. Hats

​​Hats​​​ 是一个特殊的子配置文件,可以与 ​​change_hat API​​​ 调用一起使用。要表示帽子,请在帽子名称前加上​​^​​,不要有空格。例如:

{ ^hat { } }

6. Capability Rules

​​AppArmor​​ 支持粗粒度访问 Linux 的 POSIX 风格的功能(请参阅“man 功能”),并且功能规则用于允许访问这些功能。例如,删除权限的 setuid 应用程序可能需要.

{ capability setuid, capability setgid, }

7. Network Rules

​​AppArmor​​ 目前支持通过网络规则对网络进行粗粒度访问。例如,网络守护程序可能需要:

{ network inet dgram, network inet stream, }

或者数据包分析器可能需要:

{ network raw, network packet, }

8. File rules

文件规则控制文件的访问方式,并且只出现在配置文件中。它们由路径名、权限集组成,并以逗号结尾。它们可以先写权限,也可以先写路径名,尽管约定是先列出路径。有效的路径名总是以/开头。例如:

{ /path/to/file rw, # file rule beginning with a pathname (convention) rw /path/to/file2, # file rule beginning with permissions /path/to/file3 # file rule split over multiple lines rw, }

文件规则可以包含允许匹配多个文件的特殊通配符

9. 文件通配

AppArmor 使用类似于 bash shell 使用的文件通配语法。通配符不是标准的完整正则表达式语法,而是使用一些称为通配符的字符。AppArmor 通配符的语义与 bash 的语义略有不同。

​​*​​ - 在目录级别匹配零个或多个字符。当将路径视为字符串时,它将匹配除/之外的每个字符

这将匹配点文件(文件名以.开头),特殊点文件除外。和…,如果它紧跟在目录 / 例如之后。/目录/*这将不匹配空目录字符串,例如。/目录//pcre 等价于 ([^/\000]*)

​​**​​ - 在多个目录级别上匹配 0 个或多个字符。

这将匹配点文件(文件名以.开头),特殊点文件除外。和…,如果它紧跟在目录 / 例如之后。/目录/**pcre 等价于 ([^\000]*)

​​?​​ - 匹配不是/的单个字符

pcre 等价于 [^/]

​​{}​​ - 替代 - 可以匹配的替代字符串的逗号分隔列表。允许使用空字符串,这意味着空字符串是可行的替代方案

pcre 等价于 (|)

​​[]​​ - 字符类

与 pcre 语法相同

​​[^]​​ - 反转字符类

与 pcre 语法相同

交替嵌套表达式(从 AppArmor 2.3 开始):

转义字符​​\*​​将字符表示为# \001

以下是对当前文件通配的建议添加,当前未实施:

​​{*^}​​​ - 一个类似于 * 的 glob,具有不允许匹配的事物的交替样式列表。例如。​​/etc/{*^shadow}​​ 与允许 ​​/etc/*​​ 匹配的所有内容相同,除了 ​​/etc/shadow​​ 例如。​​/etc/{*^shadow,passwd}​​ 与 ​​/etc/*​​ - ​​/etc/{shadow,passwd}​​ 相同,例如。​​/etc/{*^*shadow}​​ 与 ​​/etc/*​​ 相同 - ​​/etc/*shadow *​​ 请注意,不允许使用空的替代条目,即。​​{*^shadow,}​​{^} - 类似于 ** 的 glob 不允许匹配具有交替样式列表的事物,例如。​​/etc/{**^shadow}​​ 与 /etc/ 匹配 - ​​/etc/shadow​​ 例如。​​/etc/{**^shadow,passwd}​​ 与 ​​/etc/** - /etc/{shadow,passwd}​​ 相同,例如。​​/etc/{**^*shadow}​​ 与 ​​/etc/**​​ 相同 - ​​/etc/*shadow *​​ 请注意,不允许使用空的替代条目,即。​​{*^shadow,}​​

9.1 文件通配示例

/dir/file - match a specific file/dir/* - match any files in a directory (including dot files)/dir/a* - match any file in a directory starting with 'a'/dir/*.png - match any file in a directory ending with '.png'/dir/[^.]* - 匹配一个目录中除点文件以外的任何文件/dir/ - match a directory/dir/*/ - match any directory within /dir//dir/a*/ - match any directory within /dir/ starting with a/dir/*a/ - match any directory within /dir/ ending with a/dir/** - 匹配/dir/中或之下的任何文件或目录/dir/**/ - 匹配 /dir/ 中或之下的任何目录/dir/**[^/] - 匹配/dir/目录中或之下的任何文件/dir{,1,2}/** - match any file or directory in

9.2 文件权限

支持以下文件权限:

r - 读w - 写a - 附加(由 w 暗示)x - 执行

ux - 执行无限制(保留环境) - 警告:只应在非常特殊的情况下使用Ux - 无限制执行(清理环境)px - 在特定配置文件下执行(保留环境) - 警告:仅应在特殊情况下使用Px - 在特定配置文件下执行(清理环境)pix - 为 px,但如果找不到目标配置文件,则回退到继承当前配置文件Pix - 作为 Px,但如果找不到目标配置文件,则回退到继承当前配置文件pux - 作为 px 但如果找不到目标配置文件则回退到执行 unconfinedPux - 作为 Px,但如果找不到目标配置文件,则回退到执行 unconfinedix - 执行并继承当前配置文件cx - 执行并转换到子配置文件(保护环境)Cx - 执行并转换到子配置文件(清理环境)cix - 作为 cx,但如果找不到目标配置文件,则回退到继承当前配置文件Cix - 作为 Cx,但如果找不到目标配置文件,则回退到继承当前配置文件cux - 作为 cx 但如果找不到目标配置文件则回退到执行 unconfinedCux - 与 Cx 相同,但如果未找到目标配置文件,则回退到执行 unconfined

m - 内存映射可执行文件k - 锁定(需要 r 或 w,AppArmor 2.1 及更高版本)l - 链接

​​owner​​ 关键字可以用作限定词,使权限以拥有文件为条件(进程 fsuid == 文件的 uid)。

owner /foo rw,

以下内容正在开发中:

创建(由 w 暗示)删除(由 w 暗示)chown - 更改所有权(由 w 暗示)chmod - 改变模式(由 w 暗示)

创建和/或删除文件的权限是:

/foo/bar w,

复制文件的权限是:

/foo/src r, /foo/dst w,

移动文件的权限是:

/foo/src rw, /foo/dst w,

9.3 执行权限

AppArmor 区分文件执行的不同方式。因为在执行文件时会创建一个新进程,所以可以说该进程在执行过程中转换到另一个(可能相同)配置文件。 基本执行权限是:

​​ix​​ - 新进程应该在当前配置文件下运行​​cx​​ - 新进程应在与可执行文件名称匹配的子配置文件下运行​​px​​ - 新进程应在与可执行文件名称匹配的另一个配置文件下运行​​ux​​ - 新进程应该不受限制地运行

一个无限制运行的进程实际上是在内置的无限制配置文件中,它允许一切没有日志记录。

使用大写前导字符( Px、Cx、Ux )编写的 px、cx 和 ux 权限将触发 ​​libc​​ 的安全执行。开发配置文件时,通常应使用安全执行变体,以便执行的程序在干净的环境中启动。

px 和 cx 规则(及其安全执行变体)也可能具有 ix 或 ux 后备,表示为 pix、pux、cix 或 cux。使用回退表示如果存在配置文件,则该进程应在配置文件下运行,否则配置文件转换应使用指定的 ix 或 ux 转换。使用“PUx”而不是“Ux”通常是个好主意,这样当执行的程序稍后添加 AppArmor 配置文件时,您不必更新配置文件。例如,如果应允许受限程序运行“evince”,则配置文件可能具有:

/usr/bin/evince PUx,

px 和 cx 规则(及其所有变体)也可以修改为按名称指定配置文件,而不是使用与可执行文件名称匹配的配置文件。这是通过提供​​->​​转换箭头和配置文件的名称来完成的。

>

对于目录,UNIX 执行权限映射到搜索访问,​​AppArmor​​ 不会进一步控制目录搜索访问。换句话说,如果 DAC 允许,则允许遍历目录。

9.4 AppArmor 文件标签

AppArmor 将为文件分配一个默认标签(而不是将该标签存储在文件的 inode 中)。当一个进程打开一个文件时,文件对象被分配一个标签,它可以被认为是配置文件的名称。当不同的进程想要访问同一个文件时,一个文件可以有多个标签,以允许不同的进程具有不同的访问控制。实际上,在开发策略时,只需按名称引用文件,内核在幕后处理所有必要的标签。因此,AppArmor 通常被称为“基于路径名”。 由于 AppArmor 按路径名标记文件(而不是在磁盘上标记),因此管理员无需在文件被覆盖或移动后执行重新标记步骤。例如,如果一个进程被授予对 /etc/shadow 的读取权限并且系统管理员将 /etc/shadow 重命名为 /etc/shadow.old 并用一个副本替换它(例如,其中可能有一个额外的用户) ,该进程将有权访问新的 /etc/shadow,而不是 /etc/shadow.old。

10. Rule 修饰符

当某个资源没有对应的规则时,AppArmor 会阻止对该资源的访问并记录下来。当策略中有规则时,允许访问资源而无需记录。可以在规则前添加以下修饰符来更改此行为:

audit:强制记录deny:明确拒绝,不记录audit deny:明确拒绝的组合,但记录

实例

/profile { /path/to/file* r, # allow read to /path/to/file* /path/to/file1 w, # allow write to /path/to/file1 deny /path/to/file2, w, # deny write to /path/to/file2, without logging audit /path/to/file3 w, # allow write to /path/to/file3, with logging audit deny /path/to/file4 r, # deny read to /path/to/file4, with logging }

重要提示:拒绝规则在允许规则之前进行评估,并且不能被允许规则覆盖。它们通常用于覆盖文件通配规则。例如,在上述策略中,上面的“​​audit deny /path/to/file4 r​​​”规则会覆盖“​​/path/to/file* r​​”规则。

参考:

​​apparmor Documation​​​​How to create an AppArmor Profile​​

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:golang映射map详解:map的三种创建方式、map的增删改查
下一篇:东京奥组委探讨增加运动员新冠病毒检测频率!
相关文章

 发表评论

暂时没有评论,来抢沙发吧~