Tenho o Amazon Linux 2023 em execução em um contêiner Docker e gostaria de poder carregar algumas regras de auditoria personalizadas no kernel e garantir que elas persistam quando o contêiner for reiniciado. Eu adicionei as regras /etc/audit/rules.d/audit.rules
e posso vê-las quando coloco cat
esse arquivo e estou tentando usá-lo augenrules --load
para carregar as regras. No entanto, quando executo este comando, a saída que recebo é
/usr/sbin/augenrules: No change
You must be root to run this program.
Recebo essa mesma resposta mesmo ao executar o comando com sudo( sudo augenrules --load
). Já estou logado como root ( whoami
retorna root
).
Eu me perguntei se poderia ser porque auditd
o serviço não foi iniciado (nesse caso, a saída de augenrules
é enganosa), mas não consigo verificar o status deste serviço como service auditd status
(e qualquer outro comando de serviço como service auditd start
) o comando me fornece
Redirecting to /bin/systemctl status auditd.service
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down
ps -p1
indica que o PID 1 é bash
PID TTY TIME CMD
1 pts/0 00:00:00 bash
Presumo que seja porque estou executando em um contêiner, mas não sei se é por isso que augenrules
me recuso a executar quando sou o usuário root, mesmo quando uso using sudo
.
O que está causando esse comportamento?
Alimentar o kernel com regras de auditoria é tarefa do sistema operacional host, não do contêiner. Não há kernel no contêiner: apenas o sistema host possui um. Seu contêiner também não parece ter nenhum tipo de
init
sistema, embora outros contêineres possam ser configurados com um.É um pouco enganador dizer “Tenho o Amazon Linux 2023 em execução em um contêiner Docker”, porque um contêiner nunca é um sistema operacional completo. Seria mais correto dizer que você tem um contêiner construído a partir de partes do espaço do usuário do Amazon Linux 2023, contendo apenas peças suficientes para cumprir a finalidade para a qual o contêiner foi projetado , qualquer que seja essa finalidade.
Dentro do contêiner, você pode ter UID 0 (= a definição clássica de ser root), mas os números UID do contêiner são mapeados para um intervalo de valores mais altos por contêiner, para que não se sobreponham aos UIDs atribuídos no sistema host ou em outros recipientes. Quando você tenta usar
augenrules --load
, o kernel vê o UID mapeado e, como não é 0, rejeita a solicitação.