Estou tentando reforçar a segurança da minha configuração LAMP
Na minha configuração, cada site consiste em:
- Uma conta Unix
- Um banco de dados MySQL acessível apenas a partir de uma conta MySQL
- Um VirtualHost definido em um arquivo separado
- Um pool php-fpm definido em um arquivo separado
Agora estou tentando reforçar a segurança usando apparmor.
Estou começando com o perfil para php-fpm.
Minha ideia é ter uma configuração geral do php-fpm e uma configuração específica para cada pool do php-fpm.
Pelo que entendi, a configuração geral é um perfil e a configuração específica deve ser definida como aa hat .
Eu gostaria de ter essa configuração específica do chapéu definida em um arquivo separado.
No modo reclamação tudo parece funcionar (pelo menos não tenho nada quando uso o comando aa-logprof )
Foi assim que eu fiz isso
Vamos considerar um site https://www.test.com com um usuário Linux "test" e um pool php-fpm "test.conf"
1° No pool php-fpm /etc/php/8.1/fpm/pool.d/test.conf eu adicionei isso para definir um chapéu chamado test
apparmor_hat = test
2° Defini minhas regras globais em /etc/apparmor.d/php-fpm . Esta é a configuração que fiz para habilitar os chapéus em arquivo separado
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° Meu chapéu de teste foi definido em /etc/apparmor.d/php-fpm.d/test assim
^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,
}
Quando tento passar para o modo forçado , parece que as regras que defini no perfil principal do apparmor /etc/apparmor.d/php-fpm NÃO são levadas em consideração pelo meu chapéu
Este é meu primeiro perfil de apparmor e fiz isso como entendi.
Não sei o que perdi. Perdi uma prática recomendada?
EDITAR
Descobri que posso colocar o perfil principal no modo forçado .
O problema que estou enfrentando é apenas quando coloco um chapéu no modo forçado e quando tento reiniciar o serviço php
Nesse caso, vejo a seguinte mensagem de erro
php8.1-fpm.service: Failed to kill control group /system.slice/php8.1-fpm.service, ignoring: Permission denied
Parece que o AppArmor está impedindo o systemd de se comunicar com o PHP-FPM. Certifique-se de ter algo assim no perfil principal do FPM (não no chapéu):
Talvez você possa ver isso no log do sistema (
dmesg
/journalctl
). O AppArmor é bastante detalhado sobre o que está fazendo.