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

二、两种工作模式

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

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

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

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

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

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

Apparmor可以对程序进行多方面的限制,这里我只介绍部分常用到的

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

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

rRead mode

wWrite mode (mutually exclusive

to a)

aAppend mode (mutually

exclusive to w)

kFile locking mode

lLink mode

linkfile->targetLink 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] ]

了解网络编程的应该知道domain、type和protocol是什么。要让程序可以进行所有的网络操作,只需在配置文件中写:

network,

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

network inet tcp,

(4)capability条目

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

Capability statements are simply the word capability followed by the name of the POSIX.

1e capability as defined in the capabilities(7) man page.

题外话:这些功能,有没有想到/proc/pid/下的文件,还有python的resource模块相关的东西,只不过apparmor管理更加简洁和灵活。

四、配置文件的编写

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

sudo genprof [filename]

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

sudo genprof '/home/361way/apparmor-helper/demoexe'

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

#include

/home/361way/apparmor-helper/demoexe {

#include

}

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

#include

/home/361way/apparmor-helper/demoexe flags=(complain){

#include

}

flags=(complain)前面的部分是文件的路径,作用是为这个配置文件绑定某个程序。那接下来就可以在配置文件中添加相应的内容,在大括号中加上:

/home/361way/apparmor-helper/data rw,

set rlimit stack<=1M,

然后再执行命令:

sudo /etc/init.d/apparmor reload

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

总结与扩展:

在docker/lxc的相关文档中,也会找到apparmor相关的部分,如 online judge 这些应用也和apparmor/SElinux扯上关系 。提到上面这些就不得不提下沙盒(sandbox),沙盒不仅在安全上有用,还可以在很多场合取代基于虚拟机的应用隔离方案(沙盒化的进程是效率最高的虚拟机),而linux上的沙盒应用基本上都是基于apparmor/SElinux的。

linux禁止程序访问网络,linux内核强制访问控制--Apparmor相关推荐

  1. linux 机器无法访问网络

    linux  服务器无法访问网络 解决办法 修改网关 1.进入配置文件 cd /etc/sysconfig/network-scripts/ vi ifcfg-eth0 2.按照以下修改 #要修改的数 ...

  2. Linux C程序访问NULL指针

    本文将介绍如何对NULL指针地址建立合法映射,从而合法访问NULL指针.本文表达的宗旨: 任何虚拟地址,只要有合法的页表映射,就能访问! 提到C语言编程,我想几乎所有人都遭遇过NULL指针.我们的代码 ...

  3. linux查看程序的快捷键,linux操作系统的快捷键及命令讲解

    GNU是为Linux提供免费软件支持的工具;红帽与乌邦图都是Linux的一个版本. Linux登入时登入名为root的是最高级别 Linux系统中的文件夹: /:根目标 bin:二进制可执行文件 li ...

  4. linux禁止root用户su,Linux 禁止普通用户su到root

    Linux账户权限管理上为了防止普通用户通过su切换到root用户,需要修改/etc/pam.d/su和/etc/login.defs两个配置文件. Step1:修改 /etc/pam.d/su文件 ...

  5. linux禁止切换到root,linux禁止普通用户切换至root用户的实例讲解

    在上正文之前,我想先将一些基础的linux用户以及用户组的相关命令: 1.添加用户 useradd [-g group] [-d user_home_directory] [-p "your ...

  6. linux 禁止文件修改时间,linux 修改文件的时间属性

    二.修改文件时间 创建文件我们可以通过touch来创建.同样,我们也可以使用touch来修改文件时间.touch的相关参数如下: -a : 仅修改access time. -c : 仅修改时间,而不建 ...

  7. linux的程序员计算器,linux中的计算器

    windows系统安装时会自带计算器,在cmd中运行calc即可打开.那么linux系统中有没有计算器呢?答案是肯定的. linux下的图形计算器 linux系统一般也会默认安装一个图形界面的计算器, ...

  8. 三星linux应用程序,三星推出Linux on DeX应用程序,正式发布高端手机新品W2019

    描述 Canonical日前在官方博客上发文称,三星宣布推出了Linux on DeX项目.通过三星的DeX,用户能在旗舰级Galaxy设备上获得大屏的体验. 官方表示,Linux on DeX支持开 ...

  9. linux禁止root用户su,Linux禁止普通用户su至root的解决方法

    一.概述 为禁止普通用户su至root,需要分别修改/etc/pam.d/su和/etc/login.defs两个配置文件. 二.详细配置 (1)去除/etc/pam.d/su文件中如下行的注释: # ...

  10. linux限制目录访问权限,linux用户的访问权限限制的方法都有哪些

    如果你不希望自己的文件被人读取,又或者只是不想某个特定的用户读取修改文件,限制访问权限是最好的处理方法,下面小编就给大家介绍下Linux下限制用户访问权限的方法,一起来学习下吧. 现在需要限定某个用户 ...

最新文章

  1. Vue之概述、基本使用、data数据和if条件渲染
  2. Visio对象插入Word后周围空白过大
  3. 二十四、oracle pl/sql 变量
  4. C++ 成员函数做友元
  5. C#多线程编程系列(二)- 线程基础
  6. Java笔记-编码方式创建kaptcha验证码
  7. SDP 软件定义边界
  8. Android和Linux应用综合对比分析
  9. idea中javaweb的jsp页面图片加载不出来的解决办法
  10. Codeforces_714_B
  11. 5分钟教你制作独一无二的卡通头像,新手做自媒体,不敢真人露脸
  12. ssoj4015: 永琳的竹林迷径(path)
  13. 博弈论 纳什均衡 囚徒困境 智猪博弈
  14. 巴西龟饲养日志----巴西龟成长速度
  15. python32位和64位有什么区别_python32位和64位的区别是什么
  16. 听雨小筑---开张纪念
  17. 适用于hips ui的iPhoneX及以上适配方案
  18. Sqoop1和Sqoop2的刨析对比
  19. Android9.0中应用如何通过SAF框架写入外置SD卡
  20. HTML_网页设计参考手册 中文WORD版

热门文章

  1. 数字化时代,安全沙箱技术促进企业网络安全生态安全运转
  2. 为工业机器人的学生分享一款ABB公司的机器人仿真软件
  3. 阿里 P7 到底是怎样的水平?
  4. ps 中左边的工具栏消失了,解决方法
  5. 高性能计算服务器计算费价格,高性能计算云服务器价格表
  6. 手把手教你如何做一套utm广告投放系统
  7. java 识别图片中的二维码内容识别
  8. 杨义先:大数据的道性
  9. 玩转Redis-生产环境如何导入、导出及删除大量数据
  10. Echarts 关系图谱示例