目录
-
-
- [一:AppArmor 功能介绍](#一:AppArmor 功能介绍)
- [二:AppArmor 配置介绍](#二:AppArmor 配置介绍)
-
- [1、AppArmor 配置文件存放路径](#1、AppArmor 配置文件存放路径)
- [2、AppArmor 配置文件命名规则](#2、AppArmor 配置文件命名规则)
- [三: AppArmor 工作模式](#三: AppArmor 工作模式)
-
- [1、AppArmor 两种工作模式](#1、AppArmor 两种工作模式)
- 2、查看当前进程的工作模式
- 3、给指定进程切换工作模式
- 4、重新加载配置文件生效
- [四:apparmor.service 服务](#四:apparmor.service 服务)
-
一:AppArmor 功能介绍
AppArmor 和 SELinux 一样,都是基于 强制访问控制的安全框架,AppArmor 通过定义规则来限制进程能够访问的资源和操作,从而控制进程的权限。即使是root用户启动的进程也绕不开 AppArmor 的规则,去执行未授权的操作。
例如 :通过AppAemor定义MySQL进程只能对 /var/lib/mysql
目录进行读写,后续通过MySQL配置文件更改了MySQL数据目录,但是没有更改AppArmor 配置文件,即使文件系统上给予 MySQL 进程对该目录的读写权限,但是MySQL进程仍然会受到AppAemor规则的限制,无法访问新的目录。
- 使用 AppArmor 的发行版:Ubuntu、Debian等都是默认开启。
- 使用 SELinux 的发行版:RHEL、CentOS、Fedora等。
二:AppArmor 配置介绍
1、AppArmor 配置文件存放路径
- 配置文件存放路径 :
/etc/apparmor.d/
目录下 - 配置文件命名规则:进程路径作为文件名(将斜杠替换为点,去掉根目录部分)
例如 :MySQL的服务进程mysqld的路径为/usr/sbin/mysqld
,对应的配置文件是:
bash
/etc/apparmor.d/usr.sbin.mysqld
2、AppArmor 配置文件命名规则
配置文件格式:
bash
# 启动进程的可执行文件路径
/PATH/COMMAND {
# 规则行
/PATH 允许的权限,
/PATH 允许的权限,
/PATH 允许的权限,
}
文件路径访问规则:
r
:表示只读权限,程序可以读取文件。w
:表示写权限,程序可以写入文件。x
:表示执行权限,程序可以执行文件。k
:表示链接权限,程序可以创建符号链接。
文件路径匹配时候的符号:
*
:匹配指定路径下的所有文件和目录。只会匹配当前目录下的文件或目录,而不会递归到子目录中**
:会递归地匹配指定路径下的所有文件和子目录,包括子目录中的文件。
例如:
bash
/usr/sbin/mysqld {
# 对/etc/mysql/下的所有文件都具有读权限,包括子目录中的文件
/etc/mysql/** r,
# 对 /var/lib/mysql/目录具有读权限
/var/lib/mysql/ r,
# 对/var/lib/mysql/下所有文件都具有读写和可以创建符号链接的权限
/var/lib/mysql/** rwk,
# 对/data/mysql目录有读权限
/data/mysql/ r,
# 对/data/mysql下的所有文件,包括子目录文件都具有读写和创建符号链接文件的权限
/data/mysql/** rwk,
}
三: AppArmor 工作模式
1、AppArmor 两种工作模式
-
Enforce(强制模式) :AppArmo默认的工作模式,该模式会严格执行配置文件中的限制。
-
Complain(宽容模式):但如果有违规行为,AppArmor 会记录警告信息,而不会阻止程序运行。
2、查看当前进程的工作模式
查看所有配置有AppArmor 规则的进程的工作模式 :sudo aa-status
例如:
bash
sudo aa-status

3、给指定进程切换工作模式
系统重启后,会恢复到默认的强制模式,所以如果要持久化生效,可以在 /etc/rc.local
中加入 aa-complain
命令来切换模式,或者通过其他方式来在系统启动时执行 aa-complain
命令,切换到指定模式。
- 临时切换到 Enforce 模式 :
sudo aa-enforce /etc/apparmor.d/<profile_name>
- 临时切换到 Complain 模式 :
sudo aa-complain /etc/apparmor.d/<profile_name>
4、重新加载配置文件生效
修改某个进程的 AppArmor 配置文件后,重新加载生效:sudo apparmor_parser -r /etc/apparmor.d/<profile_name>
例如:
bash
sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.mysqld
四:apparmor.service 服务
apparmor.service
服务的作用就是系统启动时负责加载和管理 AppArmor 的配置文件以及相应的安全策略。
-
手动停止 apparmor.service :当前的进程仍然会遵循加载时应用的规则,所以AppArmor 的配置文件规则仍然生效。因为配置已经被内核加载。
-
禁止apparmor.service自启动:然后重启操作系统后, AppArmor 的相关规则将不会生效,因为开机这些规则不会被加载。