Temos um servidor com SO Alma Linux 9.3. Por padrão (assim como todos os sistemas operacionais semelhantes ao RHEL atuais) ele está fapolicyd
habilitado. Há também um servidor de aplicativos (WildFly/JBoss/Java) em execução nesse servidor. O aplicativo implantado processa alguns arquivos de dados (enviados pelos usuários) e funciona bem na situação padrão.
No entanto, atualmente, há um período em que o aplicativo precisa processar cerca de 1.000 arquivos por minuto. Em tal situação, a fapolicyd
sobrecarga utiliza aproximadamente 15% da CPU, o que avaliamos como excessivo.
Não consegui encontrar ninguém com problema semelhante na internet.
Também estou surpreso que não haja nenhuma fapolicyd
tag aqui no ServerFault.
Questões:
- Existe uma maneira de otimizar
fapolicyd
a configuração para que ela possa decidir mais rapidamente se permite ou nega acesso a arquivos?- Uma coisa que me vem à mente é a ordenação das regras personalizadas.
- Talvez usando curinga em vez de regras literais.
- Alguma dica de como avaliar o quanto
fapolicyd
é importante para nós?- Se podemos simplesmente desligá-lo ou se é realmente uma boa ideia mantê-lo funcionando apesar da enorme sobrecarga.
- Se outras distribuições também usam algo parecido
fapolicyd
ou se é "apenas segurança adicional" eSELinux
é suficiente. (Eu sei que eles não são iguais.)
Fontes:
Permitir listar programas executados está entre os recursos de segurança mais eficazes. Sem ele, uma conta de usuário comprometida poderia executar qualquer carga arbitrária. Ou os usuários instalam programas em seu diretório inicial que não deveriam. Embora seja um recurso opcional que você decide ativar ou não.
A inspeção de todas essas chamadas do sistema de arquivos prejudica o desempenho. Embora a sobrecarga possa ser minimizada otimizando as regras e o banco de dados.
Meça se o desempenho é aceitável do ponto de vista do usuário. Um objetivo focado no tempo de resposta, algo como "99,9% das chamadas de API do aplicativo serão concluídas em menos de 1 segundo", detectará problemas reais, não apenas tendências na utilização de recursos.
Primeiro, para obter informações básicas sobre o fapolicyd, observe a introdução de desempenho do README :
do_stat_report = 1
na configuração para ativar o relatório de estatísticas e reinicie o fapolicyd se não o tiver feito recentemente. Analise/var/log/fapolicyd-access.log
e observe os padrões de quais PIDs estão abrindo quais arquivos.Observe a proporção de "acertos" para "erros". Uma taxa de acertos mais alta é melhor, pois o acesso ao banco de dados na memória é muito mais rápido do que o acesso e o processamento do sistema de arquivos. Aumente
obj_cache_size
a configuração para o número de arquivos que seu sistema possui de uma só vez. Um possível limite superior é o número de inodes usados no sistema de arquivos de dados, a partirdf -i
da saída. O que pode ser excessivo, mas se você tiver memória, por que não armazenar em cache algumas centenas de milhares de entradas.Revise a configuração em fapolicyd.conf.
integrity
valores diferentes denone
ousize
calcularão a soma de verificação e terão sobrecarga. Especialmente se você tiver muitas falhas no processamento de novos arquivos, isso pode consumir uma quantidade significativa de CPU.q_size
deve ser maior que a "profundidade máxima da fila" no relatório de acesso, mas duvido que o tamanho da fila precise ser aumentado.Revise as regras, em compilado.rules de regras.d. RHEL e Fedora preenchem arquivos confiáveis do rpm, não permitem a execução de arquivos desconhecidos, não permitem o truque ld.so e permitem a maioria das aberturas. Se você modificar as regras, pense no impacto no desempenho de fazer mais coisas enquanto o syscall aberto está aguardando.
E, como sempre, você pode traçar um perfil do que exatamente está acontecendo durante a solução de problemas.
perf top
imprimirá quais funções estão na CPU e é ainda melhor quando o debuginfo está instalado. O pacote bcc-tools possui alguns scripts interessantes: opensnoop e execsnoop para listar chamadas abertas e exeve em tempo real.Em última análise, cabe a você decidir quais controles implementar para permitir apenas a execução de programas não autorizados. A lista de permissões imediatamente na chamada exec, como fapolicyd, é obviamente muito poderosa. Uma alternativa menos abrangente poderia ser restringir o acesso ao shell: não permitir shells interativos às pessoas e bloquear permissões de diretórios pessoais. Ou, se um sistema de arquivos de dados não tiver nenhum programa, considere montá-lo noexec. Uma boa auditoria de segurança não trataria a lista de verificação como imutável, mas listaria os controles alternativos em vigor e por quê.