AppArmor零知识学习二、相识

本文内容参考:

AppArmor · GitBook

Linux安全模块AppArmor总结-CSDN博客

AppArmor快速入门-CSDN博客

apparmor 初识(一)_domybest_nsg的博客-CSDN博客

AppArmor与SElinux_apparmor selinux_weixin_45216475的博客-CSDN博客

apparmor_什么是AppArmor?如何确保Ubuntu安全?_culingluan4376的博客-CSDN博客

学习LSM(Linux security module)之三:Apparmor的前世今生和基本使用_wx5b7658e51ef04的技术博客_51CTO博客

接前一篇文章:AppArmor零知识学习一、初识

四、知识补强

1. DAC和MAC

  • DAC

DAC全称为Discretionary Access Control,中文译为自主访问控制,也有译为任意访问控制的。DAC是最常用的一类访问控制机制,意思为主体(文件所有者)可以自主指定系统中其它用户对其文件的所有权,最典型的就是Linux的“拥有者/同组用户/其他”。这种方式虽然为用户提供了很大的灵活性,但是缺乏必要的安全性。

  • MAC

MAC全称为Mandatory Access Control,中文译为强制访问控制。在MAC机制下,系统中的每一个进程、每一个文件、每一个IPC主体都被管理员按照严格的规则设置了相应的安全属性,不能被用户及其它直接或间接地修改。

2. AppArmor相关知识

  • 背景

由于SELinux使用复杂,适用于对安全要求特别高的企业或者组织,一般情况下不需要达到那么高的级别。为了简化操作,就推出了AppArmor,因此可以说AppArmor脱胎于SELinux。但与SELinux基于角色不同的是,AppArmor是与程序绑定的基于路径的MAC,也就是说如果路径发生改变,策略就会失效。一般的Linux系统,都会内置以上两种MAC中的一种。这也意味着,你需要对文件(其它)进行操作,你需要同时通过DAC和MAC的检测。

  • 与程序绑定的访问控制

AppArmor提供的访问控制是与程序绑定的:

AppArmor's unique security model is to bind access control attributes to programs rather than to users. —— AppArmor的独一无二的安全模型将访问控制属性绑定到程序而非用户。

比如我们安装了一个可执行程序,假其设路径为/usr/bin/nmcli。如果想用AppArmor对其进行访问控制,就需要新建一个配置文件到/etc/apparmor.d/目录下,配置文件名为usr.bin.nmcli。/etc/apparmor.d/是AppArmor专门放置配置文件的目录,其下的每一个配置文件都是跟一个可执行文件(程序)绑定的。因此不要随便修改配置文件名或程序路径,因为如果修改usr.bin.nmcli的文件名,将导致配置文件失效。

  • 工作模式

AppArmor有两种工作模式:enforcement、complain/learning(实际跟SELinux一样,也是三种,关闭模式这里未包含)。

  • Enforcement

在这种模式下,配置文件里列出的限制条件都会得到执行,并且对于违反这些限制条件的程序会进行日志记录。只有一些状态事件(比如加载配置文件)和导致拒绝的事件生成审核信息。

  • Complain

在这种模式下,配置文件里的限制条件不会得到执行,AppArmor只是对程序的行为进行记录。与Enforce类似,只是对于违反配置的事件也是允许的,不会拒绝。

例如程序可以写一个在配置文件里注明只读的文件,但AppArmor不会对程序的行为进行限制,只是进行记录。

那么既然complain不能限制程序,为什么还需要这种模式呢?因为如果某个程序的行为不符合其配置文件的限制,可以将其行为记录到系统日志,并且可以根据程序的行为,将日志转换成配置文件。因此这种模式也叫学习模式。

当然我们可以随时对配置文件进行修改,选择自己需要的模式。

  • 访问控制与资源限制

AppArmor可以对程序进行多方面的限制(详细可以看官方文档,这里只提供几个方面):

(1)文件系统的访问控制

AppArmor可以对某一个文件,或者某一个目录下的文件进行访问控制,包括以下几种访问模式:

r Read mode
w Write mode (mutually exclusive to a)
a Append mode (mutually exclusive to w)
k File locking mode
l Link mode
linkfile->target Link pair rule (cannot be combined with other access modes)

可读、可写、可扩展、可链接等(还有可执行x在表中没有列出)。

举例:

在配置文件中的写法示例如下:

/tmp r —— 表示可对/tmp目录下的文件进行读取。

/home/Desktop/a.c rw —— 表示程序可以对/home/Desktop/a.c 进行读和写。

注意:没在配置文件中列出的文件,程序是不能访问的,这有点像白名单。

(2)资源限制

AppArmor可以提供类似系统调用setrlimit一样的方式来限制程序可以使用的资源。在配置文件里的语法是:

set rlimit [resource] <= [value]

其中:

resource代表某一种资源;

value代表某一个值。

举例:

要对程序可以使用的虚拟内存做限制时,可以这样写:

set rlimit as<=1M

表示该程序可以使用的虚拟内存小于等于1M。

注意:Apparmor可以对程序要使用多种资源进行限制,如:fsize、data、stack、core、rss、as、memlock、msgqueue等),但暂不支持对程序可以使用CPU时间进行限制。

(3)访问网络

Apparmor可以程序是否可以访问网络进行限制,在配置文件里的语法是:

network [ [domain] [type] [protocol] ]

其中:

domain代表一个域;

type代表一种类型;

protocol代表一种协议。

举例:

要让程序可以进行所有的网络操作,只需在配置文件中写:

network

要允许程序可以在IPv4下使用TCP协议,可以在配置文件中这样写:

network inet tcp

(4)capability条目

Capability statements are simply the word capability followed by the name of the POSIX.1e capability as defined in the capabilities(7) man page. —— capability语句只是单词capability,后跟在Linux capabilities(7) man page中定义的POSIX.1e capability的名字。

linux的手册页里面有一个capablities列表,apparmor可以限制程序是否可以进行列表里的操作。

举例:

 要允许程序进行setgid操作,可以在配置文件中这样写:

capability setgid

猜你喜欢

转载自blog.csdn.net/phmatthaus/article/details/130155291
今日推荐