0
点赞
收藏
分享

微信扫一扫

apparmor配置文件

彪悍的鼹鼠 2022-03-16 阅读 70

AppArmor配置文件

是一个纯文本文件,包含路径条目和访问权限。强制执行其中的指令,以隔离应用程序。

配置文件组成及语法

构建块:

有助于构建简单和可重用的配置文件代码

  1. #include files :在新配置文件中包含其他配置文件的内容,以简化其结构。include是一种元规则或指令,它从其他文件中引入路径和功能项。

  2. abstractions:(将常用任务所需的权限打包?)根据通用应用程序任务分组的#include语句

  3. program chunks:l 针对特定程序套件的配置文件块

  4. capability entries: POSIX.1e Linux功能的概要条目

组成要素(规则):

主要包含三部分:

  1. 路径entries(项)——指定进程能访问文件系统中的什么内容
  2. 能力entries(项)——提供更细粒度的控制,受限进程在执行需要特权的系统调用时能够进行什么操作。
  3. 网络entries(项)
#include <tunables/global> //载入一个定义变量的文件

# a comment naming the application to confine
/usr/bin/foo    //指定进程可以访问的路径
{               //花括号相当于一个容器,可包含语句、子配置文件、路径条目、功能条目和网络条目等内容。
   #include <abstractions/base>

   capability setgid,   //能力项:引入29个POSIX能力
   network inet tcp,    //网络访问控制,指定应用可访问的网络类型

   /bin/mount          ux,
   /dev/{,u}random     r,  //The curly braces ({}) make this rule apply to the path both with and without the content enclosed by the braces.????
   /etc/ld.so.cache    r,   //路径条目,指定程序可以访问文件系统的哪些区域。第一部分指定文件的绝对路径(包括正则表达式通配符),第二部分表示允许的访问模式(r表示读,w表示写,x表示执行)。任何类型的空格(空格或制表符)都可以放在路径名前面,或将路径名与访问模式分隔开。
   /etc/foo.conf       r, //访问模式和末尾逗号之间的空格是可选的。
   /etc/foo/*          r,
   /lib/ld-*.so*       mr,
   /lib/lib*.so*       mr,
   /proc/[0-9]**       r,
   /usr/lib/**         mr,
   /tmp/               r,
   /tmp/foo.pid        wr,
   /tmp/foo.*          lrw,
   /@{HOME}/.foo_file  rw,
   /@{HOME}/.foo_lock  kw,

  # a comment about foo's subprofile, bar.
   ^bar {
    /lib/ld-*.so*       mr,
    /usr/bin/bar        px,
    /var/spool/*        rwl,
   } 
}

文件访问控制模式(rwx)
变量实现了在不更改配置文件的情况下更改值的功能。

网络访问控制

AppArmor允许基于地址类型和家族的网络访问mediation:

格式:network [[<domain>][<type>][<protocol>]]

Domain参数指定了通信的”域”,通信的地址格式

Supported domains: inet, ax25, ipx, appletalk, netrom, bridge, x25, inet6, rose, netbeui, security, key, packet, ash, econet, atmsvc, sna, irda, pppox, wanpipe, bluetooth

Type就是socket的类型,对于AF_INET协议族而言有流套接字(SOCK_STREAM)、数据包套接字(SOCK_DGRAM)、原始套接字(SOCK_RAW)。
Supported types: stream, dgram, seqpacket, rdm, raw, packet

通过protocol来确定socket到底支持的哪个协议。在内核协议栈中有一个很重要的结构体,定义了每一个协议族中套接字在传输层的操作集合。
Supported protocols: tcp, udp, icmp

AppArmor工具只支持指定family and type

AppArmor 模块在访问拒绝消息中仅发出网络域类型。 并且配置文件生成工具(YaST 和命令行)仅输出此信息。

AppArmor配置文件中与网络相关的规则(最后两个语法目前不被AppArmor工具支持):

network, //允许所有的网络。对于域、类型或协议没有应用限制。
network inet,//允许一般使用IPv4网络。
network inet6,//允许一般使用IPv6网络。
network inet stream,//允许使用IPv4 TCP组网。
network inet tcp,//允许使用IPv4 TCP网络,改写上面的规则。
network tcp,//允许使用IPv4和IPv6 TCP网络。

路径

区分目录路径名和文件路径名:目录路径名后加‘/’

1、/some/random/example/* r    ——允许对 /some/random/example 目录中的文件进行读取访问
2、/some/random/example/ r    ——仅允许读目录
3、/some/**/ r        ——允许读some目录下的所有目录
4、/some/random/example/** r   
——授予对/some/random/example下的文件和目录的读取权限
5、/some/random/example/**[^/] r
——授予对 /some/random/example 下文件的读取权限。排除目录 ([^/])。

如果安装了审计包,则违反 Novell AppArmor 规则的尝试将记录在 /var/log/audit/audit.log 中,否则记录在 /var/log/messages 中。

文件访问模式

概述:

r 读模式
w 写模式(与a模式互斥)
a Append模式(与w模式互斥)
k 文件锁定模式
px 离散配置文件执行模式
Px 离散概要文件执行模式——clean exec
ux 用户不受约束的执行模式
Ux 用户不受约束的执行模式——clean exec
ix 继承执行模式
m 允许 PROT_EXEC 与 mmap(2) 调用
l 链接模式

详述:

r:允许程序对资源具有读访问权限。 shell 脚本和其他解释内容需要读取访问权限,并确定正在执行的进程是否可以core dump或附加到 ptrace(2)(ptrace(2) 由诸如 strace(1)、ltrace(1) 和 gdb(1)等工具使用)。
w:允许程序对资源有写访问权。如果要解除链接(删除),文件必须具有此权限
a:允许程序写入文件末尾。 与 w 模式相反,追加模式不包括覆盖数据、重命名或删除文件的能力。 追加权限通常用于需要能够写入日志文件但不应能够操作日志文件中的任何现有数据的应用程序。 由于附加权限只是与写入模式相关联的权限的一个子集,因此 w 和 a 权限标志不能一起使用并且是互斥的。
k:应用程序使文件锁定。 以前的AppArmor版本中,如果应用程序有权访问文件,即允许该程序锁定此文件。 通过单独使用文件锁定模式,AppArmor 确保锁定仅限于与安全紧密相关需要文件锁定的文件,因为锁定可用于多种拒绝服务攻击场景。
px:要为在AppArmor域间转换时执行的资源定义一个离散的安全配置文件,若无配置文件,访问请求会被拒绝。
Px:Px allows the named program to run in px mode, but AppArmor invokes the Linux kernel’s unsafe_exec routines to scrub the environment, similar to setuid programs. See ld.so(8) for some information about setuid and setgid environment scrubbing.

Incompatible with Ux, ux, px, and ix.
ux:允许程序执行资源时不受AppArmor配置文件的约束;在受限程序需要执行特权操作时非常有用,例如重启机器。通过将特权部分放在另一个可执行文件中并授予其不受约束的执行权限,该功能可以绕过强加于所有受限进程的强制性约束。
ix:当一个受限制的程序需要调用另一个受限制的程序而没有获得目标配置文件的权限或失去当前配置文件的权限时很有用。不需要重置,因为该模式并未更改权限。与Ux, ux, Px, and px相斥。涉及到了m
Allow Executable Mapping (m):允许文件使用mmap(2) 的 PROT_EXEC 标志映射到内存。该标志表示页面是可执行的。在一些体系结构上用于提供非可执行的数据页,可能引起复杂的攻击。AppArmor使用这种模式来限制一个行为良好的程序(或者架构上所有强制执行内存访问控制的程序)可以使用哪些文件作为库,to limit the effect of invalid -L flags given to ld(1) and LD_PRELOAD, LD_LIBRARY_PATH, given to ld.so(8).。????
L:链路模式用于调解对硬链路的访问。当创建一个链接时,目标文件一定具有与创建的链接相同的访问权限(除了目标不需要链接访问)。

配置文件名:

unconfined——自动生成的不受限制的配置文件.
used to short circuit rule evaluation (the label/profile has no rules and everything is allowed)

inherit——指示配置文件继承性的特殊名字

null—XXXX—YYYY:自动生成的学习模式的配置文件

举报

相关推荐

0 条评论