apparmor 初识(一)

         AppArmor(Application Armor)是Linux内核的一个安全模块,AppArmor允许系统管理员将每个程序与一个安全配置文件关联,从而限制程序的功能。简单的说,AppArmor是与SELinux类似的一个访问控制系统,通过它你可以指定程序可以读、写或运行哪些文件,是否可以打开网络端口等。作为对传统Unix的自主访问控制模块的补充,AppArmor提供了强制访问控制机制,它已经被整合到2.6版本的Linux内核中。

       AppArmor是 Ubuntu 的默认选择,但在默认情况下,系统自带安装的profile配置文件很少,通过命令:sudo apt install apparmor-profiles,可以安装额外的AppArmor-profile文件。在Ubuntu下通过命令sudo apparmor_status可以查看当前AppArmor的状态。 Apparmor的profile配置文件均保存在目录/etc/apparmor.d,对应的日志文件记录在/var/log/messages。

Apparmor的启动、停止等操作的相关命令如下:

sudo systemctl start apparmor.service   //开启和服务

sudo systemctl stop apparmor.service   //停止服务

sudo systemctl status apparmor.service   //服务状态

sudo systemctl reload apparmor.service   //加载配置

 

一、与程序绑定的访问控制

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

AppArmor's unique security model is to bind access control attributes to programs rather than to users.

假设有一个可执行文件的路径为/usr/bin/nmcli,如果要用Apparmor对其进行访问控制的话,就要新建一个配置文件(后面我再讲怎么写这个配置文件),文件名为usr.bin.nmcli,并把这个配置文件放到Apparmor专门放置配置文件的目录下(/etc/apparmor.d)。所以每一个可执行文件都是与一个配置文件绑定的,因此如果修改usr.bin.nmcli的文件名的话,配置文件将失效

 

二、两种工作模式

Apparmor有两种工作模式:enforcement、complain/learning

Enforcement – 在这种模式下,配置文件里列出的限制条件都会得到执行,并且对于违反这些限制条件的程序会进行日志记录。

Complain – 在这种模式下,配置文件里的限制条件不会得到执行,Apparmor只是对程序的行为进行记录。例如程序可以写一个在配置文件里注明只读的文件,但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目录下的文件进行读取)

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

 

(2)资源限制

Apparmor可以提供类似系统调用setrlimit一样的方式来限制程序可以使用的资源。要限制资源,可在配置文件中这样写:

set rlimit [resource] <= [value],

其resource代表某一种资源,value代表某一个值,

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

set rlimit as<=1M, (可以使用的虚拟内存最大为1M)

注意:Apparmor可以对程序要使用多种资源进行限制(fsize,data,stack,core,rss,as,memlock,msgqueue等),但暂不支持对程序可以使用CPU时间进行限制。(现在OJ一般都对ACMer提交的程序的运行时间有严格的限制,所以要将Apparmor用于OJ后台安全模块,必须自己另外实现对CPU时间的限制。)

 

3)访问网络

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

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

了解网络编程的应该知道domaintypeprotocol是什么。

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

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.

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

capability setgid,(允许程序进行setgid操作)

 

四、配置文件的编写

前面提到,编写完配置文件后,要把文件放到/etc/apparmor.d这个目录下,其实有更方便的方法,直接在命令行里面用:

sudo aa- genprof [filename]   (aa- genprof 需要安装apparmor-utils )

就可以为指定的程序创建一个配置文件,并把它放到该目录。

建立的配置文件内容如下:

# Last Modified: Mon Feb 10 17:08:27 2020
#include <tunables/global>

/usr/bin/nmcli {
  #include <abstractions/base>

  /lib/x86_64-linux-gnu/ld-*.so mr,
  /usr/bin/nmcli mr,

}

注意,该文件默认使用enforcement模式,要修改模式,只需将配置文件改为:

# Last Modified: Mon Feb 10 17:08:27 2020
#include <tunables/global>

/usr/bin/nmcli  flags=(complain){
  #include <abstractions/base>

  /lib/x86_64-linux-gnu/ld-*.so mr,
  /usr/bin/nmcli mr,

}

然后再执行命令:

sudo systemctl reload apparmor.service 

就可以重新加载配置文件,使配置文件生效。

 

 

 

 

  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值