使用AppArmor¶
操作系统有一个自主访问控制(DAC)系统。AppArmor使用强制访问控制(MAC)系统补充DAC。AppArmor是Ubuntu或Debian系统的默认安全模块,它使用配置文件来定义程序如何访问资源。
AppArmor是基于路径的,通过使用概要文件来限制进程。每个概要文件包含一组策略规则。有些应用程序可能会随应用程序一起安装它们的配置文件。如果安装不同时安装概要文件,那么该应用程序就不是AppArmor子系统的一部分。还可以创建配置文件,因为它们是存储在/etc/apparmor.d目录中。
配置文件有以下两种模式:
强制——默认设置,阻止应用程序执行profile规则限制的操作。
抱怨——允许应用程序执行受限的操作,并记录这些操作。
禁用-允许应用程序执行受限的操作,并且不记录操作。
您可以在服务器中混合执行概要文件和投诉概要文件。
安装用于控制AppArmor的实用程序¶
安装apparmor-utils打包以使用概要文件。根据需要,使用这些工具来创建、更新、强制、切换到抱怨模式和禁用配置文件:
$sudo恰当的安装apparmor-utils
预期的输出
阅读包装清单……构建依赖树…将安装以下附加包:python3-apparmor python3-libapparmor…
检查当前状态¶
作为根或使用sudo,可查看“AppArmor”状态:
$sudoaa-status
预期的输出
已加载Apparmor模块。加载34个配置文件。强制模式下的32个配置文件. .../usr/sbin/mysqld……2个抱怨模式的配置文件. ...3概要文件具有定义为. ...的概要文件0个进程处于抱怨模式。0进程是不受限制的,但是已经定义了概要文件。
将配置文件切换到抱怨模式¶
当程序在您的路径时,使用以下命令切换配置文件到抱怨模式:
$sudoaa-complain<程序>
如果需要,在命令中指定程序的路径:
$sudoaa-complain/sbin/<程序>
如果概要文件没有存储在/etc/apparmor.d/,使用以下命令:
$sudoaa-complain/路径/ / profiles / <程序>
将概要文件切换到强制模式¶
当程序在你的路径下时,用下面的命令将配置文件切换到强制模式:
$sudoaa-enforce<程序>
如果需要,在命令中指定程序的路径:
$sudoaa-enforce/sbin/<程序>
如果概要文件没有存储在/etc/apparmor.d/,使用以下命令:
$sudoaa-enforce/ /配置文件路径
禁用一个配置文件¶
您可以禁用策略,但建议将策略切换到抱怨模式。
可以通过以下方式禁用配置文件:
$sudoln- s/etc/apparmor.d/usr.sbin.mysqld/etc/apparmor.d/禁用/ $sudoapparmor_parser- r/etc/apparmor.d/usr.sbin.mysqld
或
$aa-disable/etc/apparmor.d/usr.sbin.mysqld
重新加载所有配置文件¶
执行以下任意一条命令重新加载所有配置文件:
$sudo服务apparmor对重新加载
或
$sudosystemctl重新加载apparmor.service
重新加载一个配置文件¶
使用实例重新加载一个配置文件。
$sudoapparmor_parser- r/etc/apparmor.d/ <文件>
为了使某些更改生效,您可能需要重新启动程序。
禁用AppArmor对¶
“AppArmor”提供安全性,不建议禁用系统。如果必须禁用“AppArmor”,请执行以下命令:
检查状态。
$sudoapparmor_status停止并禁用AppArmor。
$sudosystemctl停止apparmor对美元sudosystemctl禁用apparmor对
添加mysqld配置文件¶
按照以下步骤添加mysqld配置文件:
下载当前版本的AppArmor:
$wgethttps://raw.githubusercontent.com/mysql/mysql-server/8.0/packaging/deb-in/extra/apparmor-profile预期输出:
...保存到“设备配置文件”…将文件移动到/etc/ apparor .d/usr.sbin.mysqld
$sudomvapparmor-profile/etc/apparmor.d/usr.sbin.mysqld创建一个空文件进行编辑:
$sudo触摸/etc/apparmor.d/local/usr.sbin.mysqld加载配置文件:
$sudoapparmor_parser- r- t- w/etc/apparmor.d/usr.sbin.mysqld重新启动雷竞技下载官网用于MySQL的Percona服务器:
$sudosystemctl重新启动mysql检查配置文件状态:
$sudoaa-status预期的输出
...进程处于强制模式…/usr/sbin/mysqld(100840)…
编辑mysqld配置文件¶
只有编辑/etc/apparmor.d/local/usr.sbin.mysql.我们建议您在编辑文件之前将配置文件切换到抱怨模式。在任何文本编辑器中编辑该文件。当您的工作完成后,重新加载一个概要文件并将一个概要文件切换到强制模式。
配置自定义数据目录位置¶
您可以将数据目录更改为非默认位置,如/var/lib/mysqlcustom。您应该启用审计模式,以捕获所有操作,并编辑概要文件以允许访问自定义位置。
$猫/etc/mysql/mysql.conf.d / mysqld.cnf
预期的输出
Percona 雷竞技下载官网Server 8.0配置文件有关解释请参见# https://dev.mysql.com/doc/mysql/en/server-system-variables.html [mysqld] pid-file = /var/run/mysqld/mysqld.Pid socket = /var/run/mysqld/mysqld.Sock *datadir = /var/lib/mysqlcustom* log-error = /var/log/mysql/error.log
开启mysqld的审计模式。在这种模式下,安全策略被强制执行,所有的访问都被记录下来。
$aa-auditmysqld
重启MySQL的雷竞技下载官网Percona服务器。
$sudosystemctlmysql重新启动
重启失败,因为AppArmor阻止了对自定义数据目录位置的访问。要诊断问题,请检查以下日志:
ALLOWED -当配置文件处于抱怨模式且动作违反策略时的日志事件。
DENIED -概要文件处于强制模式且动作被阻止时的日志事件。
例如,以下日志条目显示否认:
预期的输出
...12月07日12:17:08 ubuntu-s-4vcpu-8gb-nyc1-01-aa-ps audit[16013]: AVC apparmor="DENIED" operation="mknod" profile="/usr/sbin/mysqld" name="/var/lib/mysqlcustom/binlog. "index" pid=16013 comm="mysqld" requestd_mask ="c" denied_mask="c" fsuid=111 ouid=111 Dec 07 12:17:08 ubuntu-s-4vcpu-8gb-nyc1-01-aa-ps kernel: audit: type=1400 audit(1607343428.022:36): apparmor="DENIED" operation="mknod" profile="/usr/sbin/mysqld" name="/var/lib/mysqlcustom/mysqld_tmp_file_case_insensitive_test. sh "Lower-test " pid=16013 comm="mysqld" requestd_mask ="c" denied_mask="c" fsuid=111 ouid=111…
开放/etc/apparmor.d/local/usr.sbin.mysqld的文本编辑器中编辑以下条目允许数据目录访问部分。
/var/lib/mysqlcustom/ r, /var/lib/mysqlcustom/ rwk
在等/ apparmor.d /地方/ usr.sbin.mysqld,使用#符号注释掉允许数据目录访问部分中的当前条目。该步骤是可选的。如果跳过这一步,mysqld将继续访问默认的数据目录位置。
请注意
编辑文件的本地版本,而不是主配置文件。分离更改使维护更容易。
重新加载配置文件:
$apparmor_parser- r- t/etc/apparmor.d/usr.sbin.mysqld
重新启动mysql:
$systemctl重新启动mysqld
设置自定义日志位置¶
要将日志移动到自定义位置,必须编辑my.cnf配置文件,然后编辑本地配置文件以允许访问:
猫/etc/mysql/mysql.conf.d / mysqld.cnf
预期的输出
Percona 雷竞技下载官网Server 8.0配置文件有关解释请参见# https://dev.mysql.com/doc/mysql/en/server-system-variables.html [mysqld] pid-file = /var/run/mysqld/mysqld.Pid socket = /var/run/mysqld/mysqld.Sock datadir = /var/lib/mysql log-error = /*custom-log-dir*/mysql/error.log
验证自定义目录是否存在。
$ls拉/ custom-log-dir /
预期的输出
total 12 drwxrwxrwx 3 root root 4096 12月7日13:09。drwxr-xr-x 24 root root 4096 12月7日13:07 ..drwxrwxrwx 2 root root 4096 12月7日13:09 mysql
重启Percon雷竞技下载官网a服务器。
$服务mysql开始
预期的输出
mysql的Job。服务failed because the control process exited with error code. See "systemctl status mysql.service" and "journalctl -xe" for details.
$journalctlxe
预期的输出
...AVC apparmor="DENIED" operation="mknod" profile="/usr/sbin/mysqld" name="/custom-log-dir/mysql/error.log"…
访问被AppArmor拒绝。中编辑本地配置文件允许访问日志文件部分以允许访问自定义日志位置。
$猫/etc/apparmor.d/local/usr.sbin.mysqld
预期的输出
#站点特定的添加和覆盖usr.sbin.mysqld#详情请参见/etc/ apparor .d/local/ readme#允许访问/custom-log-dir/mysql/ r, /custom-log-dir/mysql/** rw
重新加载配置文件:
$apparmor_parser- r- t/etc/apparmor.d/usr.sbin.mysqld
重启Percon雷竞技下载官网a服务器:
$systemctl重新启动mysqld
集secure_file_priv目录位置¶
默认情况下,secure_file_priv指向以下位置:
mysql >mysqlshow变量就像“secure_file_priv”;
预期的输出
+------------------+-----------------------+ | Variable_name |值 | +------------------+-----------------------+ | secure_file_priv | /var/lib/mysql-files / | +------------------+-----------------------+
若要允许访问另一个位置,请在文本编辑器中打开本地配置文件。中的设置允许数据目录访问部分:
/var/lib/mysql/ r, /var/lib/mysql/** rwk
在文本编辑器中编辑本地配置文件以允许访问自定义位置。
$猫/etc/apparmor.d/local/usr.sbin.mysqld
预期的输出
#站点特定的添加和覆盖usr.sbin.mysqld#详情请参见/etc/ apparor .d/local/ readme/var/lib/mysqlcustom/ r, /var/lib/mysqlcustom/ rwk
重新加载配置文件:
$apparmor_parser- r- t/etc/apparmor.d/usr.sbin.mysqld
重启MySQL的雷竞技下载官网Percona服务器:
$systemctl重新启动mysqld