Apparmor 拒绝访问软链接

Apparmor 拒绝访问软链接

我正在使用 Ubuntu 20.04(Focal Fossa),但自从我使用旧版 Ubuntu(19.04 和 19.10)以来,这个问题就一直存在。所以我有 2 个硬盘驱动器 - 一个是 SSD(小尺寸),另一个是 SATA(大尺寸)。我连接大 SATA 磁盘的原因是我必须托管一个大型 MySQL 数据库。

因此 SATA 硬盘已安装,/mnt/sata/并且我创建了以下符号链接:

/var/lib/mysql -> /mnt/sata/mysql

我这样做是因为我不想更改 MySQL 和 AppArmor 的默认配置。但是当我尝试启动服务时mysql,我收到以下错误apparmor

Apr 29 20:45:26 home kernel: [17678.024673] audit: type=1400 audit(1588189526.914:156): apparmor="DENIED" operation="mknod" profile="/usr/sbin/mysqld" name="/mnt/sata/mysql/mysqld_tmp_file_case_insensitive_test.lower-test" pid=58497 comm="mysqld" requested_mask="c" denied_mask="c" fsuid=125 ouid=125

因此,这意味着apparmor阻止 MySQL 访问数据目录,/var/lib/mysql然后将其符号链接到/mnt/sata/mysql。如果我将以下规则添加到/etc/apparmor.d/usr.sbin.mysqld,问题就消失了。

/usr/sbin/mysqld {
    ...


    # Allow data dir access (existing)
    /var/lib/mysql/ r,
    /var/lib/mysql/** rwk,

    # Allow symlinks as well (added for symlink)
    /mnt/sata/mysql r,
    /mnt/sata/mysql rwk,
    ...
}

如您所见,apparmorMySQL 的配置文件已允许访问/var/lib/mysql,在我的情况下,然后符号链接到/mnt/sata/mysql。因此,它看起来像是apparmor跟随符号链接并尝试查找符号链接目标的规则。

有什么解决方案可以让我启动 mysql 服务器,而不必将符号链接的访问规则添加到配置文件apparmor

谢谢!!!

答案1

使用绑定挂载而不是软链接:

mount -bind /mnt/sata/mysql /var/lib/mysql

你也可以把它/etc/fstab

/mnt/sata/mysql /var/lib/mysql none bind

相关内容