apparmor
前言
AppArmor 是一个有效且易于使用的 Linux 应用程序安全系统。AppArmor 通过强制执行良好行为并防止已知和未知的应用程序缺陷被利用,主动保护操作系统和应用程序免受外部或内部威胁,甚至是零日攻击。
AppArmor 通过提供强制访问控制 (MAC) 来补充传统的 Unix 自主访问控制 (DAC) 模型。自 2.6.36 版起,它已包含在主线 Linux 内核中,并且自 2009 年以来,它的开发得到了 Canonical 的支持。
安装
许多 Linux 发行版(例如 Debian、Ubuntu、OpenSUSE)都带有 AppArmor
但需要安装一些额外的预装的配置文件(存放在/etc/apparmor.d/)
#apt-get install apparmor-profiles
安装apparmor 分析工具(命令)
#apt-get install apparmor-utils
命令如下:
aa-status #查看当前状态 aa-enforce #把配置文件设置成强制模式 aa-complain #把配置文件设置成投诉模式 apparmor_parser #重启加载改变的策略 aa-genprof #生成一个新的配置文件 aa-logprof #读取执行的日志 aa-mergeprof #合并策略
apparmor模式
apparmor有enforce与complain 两种模式
enforce 表示,放行配置文件中允许的行为,其余行为都会被阻止,会记录日志。
complain 表示,放行配置文件中允许的行为,对于其余行为不加阻止,但会记录日志
apparmor处理流程
初始化配置文件(每个进程(服务)一个配置文件)
将配置文件设置为 complain (因为这个模式只会报警,而不会阻止)
进行一系列的正常操作,由于这些正常的操作还未写入配置文件,所以会触发报警,产生日志
分析日志,逐条分析,选择放行或者阻止,最终获得我们想要的配置文件
但由于我们认为的正常操作,不可能全部涵盖,为了避免误伤,会继续监视
经过一段时间(比如一个星期),重复上述分析过程
最终,将配置文件的模式设置为 enforce,从而达到对服务器的保护作用
若依然会有误伤的行为,继续重复上述的分析过程
演示(创建nginx apparmor 规则)
初始化nginx规则文件
#cd /etc/apparmor.d/ #aa-autodep nginx 生成/etc/apparmor.d/usr.sbin.nginx 配置文件
将nginx规则设置为complain模式
#aa-complain nginx
重启 nginx
#systemctl restart nginx
打开浏览器访问页面,模拟用户,对网站的一些常用功能进行操作
分析规则(使用aa-logprof命令)
aa-logprof是一个交互式工具,用于查看 AppArmor 生成的消息并更新
使用方法
aa-logprof [ -d /path/to/profiles ] [ -f /path/to/logfile ]
-d –dir /path/to/profiles 指定在何处查找 AppArmor 安全配置文件集,默认为 /etc/apparmor.d/
-f –file /path/to/logfile 指定包含 AppArmor 安全事件的日志文件的位置
#aa-logprof
会出现类似下面的交互界面
Reading log entries from /var/log/syslog. Updating AppArmor profiles in /etc/apparmor.d. Complain-mode changes: Profile: /usr/sbin/nginx Capability: setuid Severity: 9 [1 - #include ] 2 - capability setuid, (A)llow / [(D)eny] / (I)gnore / Audi(t) / Abo(r)t / (F)inish Adding #include to profile. Profile: /usr/sbin/nginx Path: /run/nginx.pid New Mode: owner rw Severity: unknown [1 - owner /run/nginx.pid rw,] (A)llow / [(D)eny] / (I)gnore / (G)lob / Glob with (E)xtension / (N)ew / Audi(t) / (O)wner permissions off / Abo(r)t / (F)inish Adding owner /run/nginx.pid rw, to profile. Profile: /usr/sbin/nginx Path: /var/log/nginx/download.drivereasy.com.access.log Old Mode: owner w New Mode: w Severity: 8 [1 - /var/log/nginx/* w,] 2 - /var/log/nginx/download.drivereasy.com.access.log w, (A)llow / [(D)eny] / (I)gnore / (G)lob / Glob with (E)xtension / (N)ew / Audi(t) / Abo(r)t / (F)inish Adding /var/log/nginx/* w, to profile. Deleted 3 previous matching profile entries. = Changed Local Profiles = The following local profiles were changed. Would you like to save them? [1 - /usr/sbin/nginx] (S)ave Changes / Save Selec(t)ed Profile / [(V)iew Changes] / View Changes b/w (C)lean profiles / Abo(r)t Writing updated profile for /usr/sbin/nginx.
操作规则如下:
(A)llow a:允许 [(D)eny] d:拒绝 (I)gnore i:忽略 (G)lob g:通配符 /var/log/nginx/download.drivereasy.com.access.log w ===》 /var/log/nginx/* w Glob with (E)xtension e:保留文件扩展名的通配符规则 /var/log/nginx/download.drivereasy.com.access.log w ===》 /var/log/nginx/*.log w (N)ew n:手动输入 Audi(t) / Audi(t) off t:审计 (O)wner permissions off /(O)wner permissions on: o: 所有者权限 Abo(r)t r:放弃规则 (F)inish f:完成 (S)ave Changes s:保存 Save Selec(t)ed Profile t:保存 [(V)iew Changes] v:浏览 v:编辑 View Changes b/w (C)lean profiles c:浏览规则 v:编辑
这个分析过程可能耗时很长,为了避免误伤,需要多次。最终,一旦配置文件准备妥当,可以设置配置文件为 enforce 模式。
#aa-enforce nginx
重启 apparmor 使配置生效
#systemctl restart apparmor