我正在尝试重新加强 LAMP 配置的安全性
在我的配置中,每个网站包含:
- 一个 Unix 帐户
- 一个 MySQL 数据库只能通过一个 MySQL 帐户访问
- 在单独的文件中定义一个 VirtualHost
- 在单独的文件中定义一个 php-fpm 池
现在我正在尝试使用 apparmor 来重新加强安全性。
我从 php-fpm 的配置文件开始。
我的想法是为每个 php-fpm 池提供一个通用的 php-fpm 配置和一个特定的配置。
据我了解,通用配置是一个配置文件,具体配置应定义为 aa hat。
我想在单独的文件中定义这个特定的帽子配置。
在抱怨模式下,一切似乎都有效(至少当我使用命令aa-logprof时我什么也没有)
我就是这样做的
让我们考虑一个站点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中,如下所示
^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,
}
当我尝试传递到强制模式时,我的帽子似乎没有考虑我在主 apparmor配置文件/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
这看起来 AppArmor 正在阻止 systemd 与 PHP-FPM 通信。确保主 FPM 配置文件(不是帽子)中有类似的内容:
也许您可以在系统日志 (
dmesg
/journalctl
) 中看到这一点。AppArmor 对于它正在做什么非常详细。