AppArmor

  因为近在研究OJ(oline judge)后台的安全模块的实现,所以一直在研究Linux下沙箱的东西,同时发现了Apparmor可以提供访问控制。

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

  目前Ubuntu已自带了Apparmor, 可以在手册中获得相应的资料。文章是从很多英文资料中整理总结出来的,可能会有不准确的地方,请各位见谅。

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

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

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

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

  二、两种工作模式

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

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

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

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

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

  三、访问控制与资源限制等

  Apparmor可以对程序进行多方面的限制,这里我只介绍自己用到的。

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

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

 

r

Read mode

w

Write mode (mutually exclusive toa)

a

Append mode (mutually exclusive tow)

k

File locking mode

l

Link mode

linkfile->target

Link pair rule (cannot be combined with other access modes)

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

  在配置文件中的写法:

  如 /tmp r, (表示可对/tmp目录下的文件进行读取)

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