nixos/miniflux: add apparmor policy

This change also extends the test to ensure that normal operations
aren't denied.

Changed files
+18
nixos
modules
services
web-apps
tests
+12
nixos/modules/services/web-apps/miniflux.nix
···
environment = cfg.config;
};
environment.systemPackages = [ cfg.package ];
+
+
security.apparmor.policies."bin.miniflux".profile = ''
+
include <tunables/global>
+
${cfg.package}/bin/miniflux {
+
include <abstractions/base>
+
include <abstractions/nameservice>
+
include <abstractions/ssl_certs>
+
include "${pkgs.apparmorRulesFromClosure { name = "miniflux"; } cfg.package}"
+
r ${cfg.package}/bin/miniflux,
+
r @{sys}/kernel/mm/transparent_hugepage/hpage_pmd_size,
+
}
+
'';
};
}
+6
nixos/tests/miniflux.nix
···
default =
{ ... }:
{
+
security.apparmor.enable = true;
services.miniflux = {
enable = true;
inherit adminCredentialsFile;
···
withoutSudo =
{ ... }:
{
+
security.apparmor.enable = true;
services.miniflux = {
enable = true;
inherit adminCredentialsFile;
···
customized =
{ ... }:
{
+
security.apparmor.enable = true;
services.miniflux = {
enable = true;
config = {
···
default.succeed(
"curl 'http://localhost:${toString defaultPort}/v1/me' -u '${defaultUsername}:${defaultPassword}' -H Content-Type:application/json | grep '\"is_admin\":true'"
)
+
default.fail('journalctl -b --no-pager --grep "^audit: .*apparmor=\\"DENIED\\""')
withoutSudo.wait_for_unit("miniflux.service")
withoutSudo.wait_for_open_port(${toString defaultPort})
···
withoutSudo.succeed(
"curl 'http://localhost:${toString defaultPort}/v1/me' -u '${defaultUsername}:${defaultPassword}' -H Content-Type:application/json | grep '\"is_admin\":true'"
)
+
withoutSudo.fail('journalctl -b --no-pager --grep "^audit: .*apparmor=\\"DENIED\\""')
customized.wait_for_unit("miniflux.service")
customized.wait_for_open_port(${toString port})
···
customized.succeed(
"curl 'http://localhost:${toString port}/v1/me' -u '${username}:${password}' -H Content-Type:application/json | grep '\"is_admin\":true'"
)
+
customized.fail('journalctl -b --no-pager --grep "^audit: .*apparmor=\\"DENIED\\""')
'';
})