0


Linux安全模块AppArmor总结

一、起源

项目源地址AppArmor / apparmor · GitLab,与SELinux一样,也是属于强制访问控制(MAC)机制,默认集成在openSUSE和Ubuntu系统中,优势是比SELinux配置简单,并且有学习模式,方便用户使用。AppArmor可以限制特定进程读取/写入和执行文件的能力(及其他能力)。其主要理念是进程内部发生的操作都不能脱离控制。

而 SELinux 则是使用附加到对象(例如文件、二进制文件、网络套接字)的标签,并通过这些标签确定特权边界,从而建立一个可以跨越多个进程甚至整个系统的限制级别。

二、架构和模式

与SELinux一样,AppArmor也是一种强制访问类型(MAC)的扩展,只有当要访问的资源符合DAC要求后,才会进行AppArmor的权限判断。但是与SELinux必须只有明确的允许策略才能允许访问不同,AppArmor只有当程序的配置文件明确规定了受限,才会限制。比如我们安装了一个可执行程序,如果想用AppArmor进行访问控制,就需要新建一个配置文件到/etc/apparmor.d/目录下,这个目录下的每个配置文件都是跟可执行程序绑定的,不要随便修改配置文件名或程序路径。

2.1 获取AppArmor运行模式

1、查看APPArmor运行状态

可以使用cat /sys/module/apparmor/parameters/enabled

Y:表示正在运行。

使用

aa-status
可以查看当前
AppArmor
的运行状态和具有配置文件的应用程序:

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

Enforce:只有一些状态事件(比如加载配置文件)和导致拒绝的事件生成审核信息;

Complain:与Enforce类似,只是对于违反配置的事件也是允许的,不会拒绝。

2.2、改变APPArmor的运行模式

AppArmor的配置文件在/etc/apparmor.d/目录下,如果想修改某个程序的运行模式,可以用aa-complain或aa-enforce把程序修改为投诉模式或强制模式,例如:

sudo aa-complain /bin/ping

sudo aa-enforce /bin/ping

如果想禁用AppArmor可以使用以下命令:

aa-teardown:卸载当前会话所有的配置文件;

sudo /etc/init.d/apparmor stop 停止apparmor功能;

如果新增了一个程序,想用AppArmor进行权限管理,可以使用sudo aa-genprof <path to executable>命令生成apparmor配置文件。

三、AppArmor策略

以tcpdump文件为例,它的策略文件如下:

# vim:syntax=apparmor

# Last Modified: Wed Feb  3 07:58:30 2009

# Author: Jamie Strandboge <[email protected]>

#include <tunables/global>

/usr/sbin/tcpdump {

  #include <abstractions/base>

  #include <abstractions/nameservice>

  #include <abstractions/user-tmp>

  capability net_raw,

  capability setuid,

  capability setgid,

  capability dac_override,

  network raw,

  network packet,

  # for -D

  capability sys_module,

  @{PROC}/bus/usb/ r,

  @{PROC}/bus/usb/** r,

  # for finding an interface

  @{PROC}/[0-9]*/net/dev r,

  /sys/bus/usb/devices/ r,

  /sys/class/net/ r,

  /sys/devices/**/net/* r,

  # for -j

  capability net_admin,

  # for tracing USB bus, which libpcap supports

  /dev/usbmon* r,

  /dev/bus/usb/ r,

  /dev/bus/usb/** r,

  # for init_etherarray(), with -e

  /etc/ethers r,

  # for USB probing (see libpcap-1.1.x/pcap-usb-linux.c:probe_devices())

  /dev/bus/usb/**/[0-9]* w,

  # for -z

  /{usr/,}bin/gzip ixr,

  /{usr/,}bin/bzip2 ixr,

  # for -F and -w

  audit deny @{HOME}/.* mrwkl,

  audit deny @{HOME}/.*/ rw,

  audit deny @{HOME}/.*/** mrwkl,

  audit deny @{HOME}/bin/ rw,

  audit deny @{HOME}/bin/** mrwkl,

  owner @{HOME}/ r,

  owner @{HOME}/** rw,

  # for -r, -F and -w

  /**.[pP][cC][aA][pP] rw,

  # for convenience with -r (ie, read pcap files from other sources)

  /var/log/snort/*log* r,

  /usr/sbin/tcpdump mr,

  # Site-specific additions and overrides. See local/README for details.

  #include <local/usr.sbin.tcpdump>

}

可以看到AppArmor的权限配置比SELinux要简单很多,以文件为例,可配置的权限有:

配置项

含义

r

读取数据

w

创建、删除、写入文件

a

追加权限

k

文件锁定权限

l

链接权限

x

可执行权限

m

内存映射可执行文件

3.1 违反策略的日志

违反AppArmor权限的日志可能写到以下文件:

/var/log/kern.log

/var/log/syslog

它的拦截日志的可读性比selinux的拦截日志可读性要好多了。

3.2 违反策略的解决方法

1、改为投诉模式

可以使用sudo aa-complain [PROGRAM1 PROGRAM2 ...]命令将对该程序的安全模式改为投诉模式,只监控不拦截。

2、修改策略配置文件

apparmor_parser专门用来编译、管理AppArmor策略,包括加载新的apparmor.d策略文件到内核。

可以修改/etc/apparmor.d/目录下程序的配置文件,根据拦截日志添加对应的权限,修改完成后可以使用sudo apparmor_parser -r /etc/apparmor.d/process_name 重新加载配置文件。

标签: ubuntu linux 安全

本文转载自: https://blog.csdn.net/yolo_yyh/article/details/127874858
版权归原作者 yolo_yyh 所有, 如有侵权,请联系我们删除。

“Linux安全模块AppArmor总结”的评论:

还没有评论