在单独的文件中创建 apparmor 帽子的正确方法

在单独的文件中创建 apparmor 帽子的正确方法

我正在尝试重新加强我的 LAMP 配置的安全性

在我的配置中,每个网站包括:

  • 一个Unix帐户
  • 一个 MySQL 数据库只能从一个 MySQL 帐户访问
  • 在单独的文件中定义一个 VirtualHost
  • 在单独的文件中定义一个 php-fpm 池

现在我正在尝试使用 apparmor 来加强安全性。

我从 php-fpm 的配置文件开始。

我的想法是有一个通用的 php-fpm 配置和每个 php-fpm 池的特定配置。

据我了解,一般配置是轮廓具体配置应该定义为aa帽子

我希望有这个具体帽子配置在单独的文件中定义。

投诉模式一切似乎都有效(至少当我使用命令时我什么都没有日志分析

这就是我的做法

让我们考虑一个网站https://www.test.com拥有一个 Linux 用户“test”和一个 php-fpm 池“test.conf”

1° 在 php-fpm 池中/etc/php/8.1/fpm/pool.d/test.conf我添加了这个来定义一个名为 test 的帽子

apparmor_hat = test

2° 我已经将我的全球规则定义为/etc/apparmor.d/php-fpm。这是我在单独文件中启用帽子的配置

include if exists <php-fpm.d>
...
signal send peer=php-fpm//*,
signal send set=quit peer=php-fpm//**,
signal send set=kill peer=php-fpm//**,
signal send set=term peer=php-fpm//**,
...
change_profile -> php-fpm//**,

3° 我的测试帽子已定义为/etc/apparmor.d/php-fpm.d/测试像这样

   ^test flags=(complain,attach_disconnected) {
    /var/run/php/php-fpm-test.sock rwlk,
    /var/log/php-fpm/test.access.log rw,
    ...
    deny /var/www/** r,
    owner /home/test/www/** rw,
  }

当我尝试传递给强制模式,看来我在主装甲中定义的规则轮廓/etc/apparmor.d/php-fpm 没有被我考虑进去帽子

这是我的第一个 apparmor 配置文件,我已经按照我理解的方式制作了它。

我不知道我错过了什么。我错过了最佳实践吗?

编辑

我发现我可以将主配置文件放入强制模式

我遇到的问题只是当我戴上帽子时强制模式当我尝试重新启动 php 服务时

在这种情况下,我看到以下错误消息

php8.1-fpm.service: Failed to kill control group /system.slice/php8.1-fpm.service, ignoring: Permission denied

答案1

这似乎表明 AppArmor 阻止了 systemd 与 PHP-FPM 通信。请确保在主 FPM 配置文件(不是 hat)中有类似以下内容:

signal (receive) set=(cont,exists,term) peer=unconfined,
owner w /run/systemd/notify,

也许您可以在系统日志 ( dmesg/ journalctl) 中看到这一点。AppArmor 对其正在做的事情非常详细地描述。

相关内容