diff --git a/nixos/modules/security/apparmor/includes.nix b/nixos/modules/security/apparmor/includes.nix index 4b759e1d94f9..92f5aa8d66b2 100644 --- a/nixos/modules/security/apparmor/includes.nix +++ b/nixos/modules/security/apparmor/includes.nix @@ -19,7 +19,7 @@ let mode ? "r", trail ? "", }: - lib.optionalString (hasAttr path etc) "${mode} ${config.environment.etc.${path}.source}${trail},"; + lib.optionalString (hasAttr path etc) "${config.environment.etc.${path}.source}${trail} ${mode},"; in if isAttrs arg then go arg else go { path = arg; }; in @@ -93,19 +93,19 @@ in ]; "abstractions/base" = '' include "${pkgs.apparmor-profiles}/etc/apparmor.d/abstractions/base" - r ${pkgs.stdenv.cc.libc}/share/locale/**, - r ${pkgs.stdenv.cc.libc}/share/locale.alias, - r ${config.i18n.glibcLocales}/lib/locale/locale-archive, + ${pkgs.stdenv.cc.libc}/share/locale/** r, + ${pkgs.stdenv.cc.libc}/share/locale.alias r, + ${config.i18n.glibcLocales}/lib/locale/locale-archive r, ${etcRule "localtime"} - r ${pkgs.tzdata}/share/zoneinfo/**, - r ${pkgs.stdenv.cc.libc}/share/i18n/**, + ${pkgs.tzdata}/share/zoneinfo/** r, + ${pkgs.stdenv.cc.libc}/share/i18n/** r, ''; "abstractions/bash" = '' include "${pkgs.apparmor-profiles}/etc/apparmor.d/abstractions/bash" # bash inspects filesystems at startup # and /etc/mtab is linked to /proc/mounts - r @{PROC}/mounts, + @{PROC}/mounts r, # system-wide bash configuration '' @@ -296,8 +296,8 @@ in # looking up users by name or id, groups by name or id, hosts by name # or IP, etc. These operations may be performed through files, dns, # NIS, NIS+, LDAP, hesiod, wins, etc. Allow them all here. - mr ${getLib pkgs.nss}/lib/libnss_*.so*, - mr ${getLib pkgs.nss}/lib64/libnss_*.so*, + ${getLib pkgs.nss}/lib/libnss_*.so* mr, + ${getLib pkgs.nss}/lib64/libnss_*.so* mr, '' + lib.concatMapStringsSep "\n" etcRule [ "group" @@ -463,11 +463,11 @@ in include "${pkgs.apparmor-profiles}/etc/apparmor.d/abstractions/ssl_certs" # For the NixOS module: security.acme - r /var/lib/acme/*/cert.pem, - r /var/lib/acme/*/chain.pem, - r /var/lib/acme/*/fullchain.pem, + /var/lib/acme/*/cert.pem r, + /var/lib/acme/*/chain.pem r, + /var/lib/acme/*/fullchain.pem r, - r /etc/pki/tls/certs/, + /etc/pki/tls/certs/ r, '' + lib.concatMapStringsSep "\n" etcRule [ @@ -510,8 +510,8 @@ in ]; "abstractions/ssl_keys" = '' # security.acme NixOS module - r /var/lib/acme/*/full.pem, - r /var/lib/acme/*/key.pem, + /var/lib/acme/*/full.pem r, + /var/lib/acme/*/key.pem r, ''; "abstractions/vulkan" = '' include "${pkgs.apparmor-profiles}/etc/apparmor.d/abstractions/vulkan" diff --git a/nixos/modules/services/networking/murmur.nix b/nixos/modules/services/networking/murmur.nix index c67b4ac47390..9b1cf76860e3 100644 --- a/nixos/modules/services/networking/murmur.nix +++ b/nixos/modules/services/networking/murmur.nix @@ -401,40 +401,40 @@ in ]; security.apparmor.policies."bin.mumble-server".profile = '' + abi , include - ${cfg.package}/bin/{mumble-server,.mumble-server-wrapped} { + profile ${cfg.package}/bin/{mumble-server,.mumble-server-wrapped} { include include include include "${pkgs.apparmorRulesFromClosure { name = "mumble-server"; } cfg.package}" - pix ${cfg.package}/bin/.mumble-server-wrapped, + ${cfg.package}/bin/.mumble-server-wrapped pix, - r ${config.environment.etc."os-release".source}, - r ${config.environment.etc."lsb-release".source}, - owner rwk ${cfg.stateDir}/murmur.sqlite, - owner rw ${cfg.stateDir}/murmur.sqlite-journal, - owner r ${cfg.stateDir}/, - r /run/murmur/murmurd.pid, - r /run/murmur/murmurd.ini, - r ${configFile}, - '' - + lib.optionalString cfg.logToFile '' - rw /var/log/murmur/murmurd.log, - '' - + lib.optionalString (cfg.sslCert != null) '' - r ${cfg.sslCert}, - '' - + lib.optionalString (cfg.sslKey != null) '' - r ${cfg.sslKey}, - '' - + lib.optionalString (cfg.sslCa != null) '' - r ${cfg.sslCa}, - '' - + lib.optionalString (cfg.dbus != null) '' - dbus bus=${cfg.dbus} - '' - + '' + ${config.environment.etc."os-release".source} r, + ${config.environment.etc."lsb-release".source} r, + owner ${cfg.stateDir}/murmur.sqlite rwk, + owner ${cfg.stateDir}/murmur.sqlite-journal rw, + owner ${cfg.stateDir}/ r, + /run/murmur/murmurd.pid r, + /run/murmur/murmurd.ini r, + ${configFile} r, + ${lib.optionalString cfg.logToFile '' + /var/log/murmur/murmurd.log rw, + ''} + ${lib.optionalString (cfg.sslCert != null) '' + ${cfg.sslCert} r, + ''} + ${lib.optionalString (cfg.sslKey != null) '' + ${cfg.sslKey} r, + ''} + ${lib.optionalString (cfg.sslCa != null) '' + ${cfg.sslCa} r, + ''} + ${lib.optionalString (cfg.dbus != null) '' + dbus bus=${cfg.dbus}, + ''} + include if exists } ''; }; diff --git a/nixos/modules/services/torrent/transmission.nix b/nixos/modules/services/torrent/transmission.nix index 3f6ed9eff4d1..87493ec6ba62 100644 --- a/nixos/modules/services/torrent/transmission.nix +++ b/nixos/modules/services/torrent/transmission.nix @@ -585,23 +585,23 @@ in include "${cfg.package.apparmor}/bin.transmission-daemon" ''; security.apparmor.includes."local/bin.transmission-daemon" = '' - r ${config.systemd.services.transmission.environment.CURL_CA_BUNDLE}, + ${config.systemd.services.transmission.environment.CURL_CA_BUNDLE} r, - owner rw ${cfg.home}/${settingsDir}/**, - rw ${cfg.settings.download-dir}/**, + owner ${cfg.home}/${settingsDir}/** rw, + ${cfg.settings.download-dir}/** rw, ${optionalString cfg.settings.incomplete-dir-enabled '' - rw ${cfg.settings.incomplete-dir}/**, + ${cfg.settings.incomplete-dir}/** rw, ''} ${optionalString cfg.settings.watch-dir-enabled '' - r${optionalString cfg.settings.trash-original-torrent-files "w"} ${cfg.settings.watch-dir}/**, + ${cfg.settings.watch-dir}/** r${optionalString cfg.settings.trash-original-torrent-files "w"}, ''} profile dirs { - rw ${cfg.settings.download-dir}/**, + ${cfg.settings.download-dir}/** rw, ${optionalString cfg.settings.incomplete-dir-enabled '' - rw ${cfg.settings.incomplete-dir}/**, + ${cfg.settings.incomplete-dir}/** rw, ''} ${optionalString cfg.settings.watch-dir-enabled '' - r${optionalString cfg.settings.trash-original-torrent-files "w"} ${cfg.settings.watch-dir}/**, + ${cfg.settings.watch-dir}/** r${optionalString cfg.settings.trash-original-torrent-files "w"}, ''} } @@ -612,12 +612,12 @@ in # any existing profile for script-torrent-done-filename # FIXME: to be tested as I'm not sure it works well with NoNewPrivileges= # https://gitlab.com/apparmor/apparmor/-/wikis/AppArmorStacking#seccomp-and-no_new_privs - px ${cfg.settings.script-torrent-done-filename} -> &@{dirs}, + ${cfg.settings.script-torrent-done-filename} px -> &@{dirs}, '' } ${optionalString (cfg.webHome != null) '' - r ${cfg.webHome}/**, + ${cfg.webHome}/** r, ''} ''; }; diff --git a/nixos/modules/services/web-apps/miniflux.nix b/nixos/modules/services/web-apps/miniflux.nix index 572e4f1700d6..03447395fef6 100644 --- a/nixos/modules/services/web-apps/miniflux.nix +++ b/nixos/modules/services/web-apps/miniflux.nix @@ -207,15 +207,18 @@ in environment.systemPackages = [ cfg.package ]; security.apparmor.policies."bin.miniflux".profile = '' + abi , include - ${cfg.package}/bin/miniflux { + + profile ${cfg.package}/bin/miniflux { include include include include include "${pkgs.apparmorRulesFromClosure { name = "miniflux"; } cfg.package}" - r ${cfg.package}/bin/miniflux, - rw /run/miniflux/**, + ${cfg.package}/bin/miniflux r, + /run/miniflux/** rw, + include if exists } ''; }; diff --git a/pkgs/applications/networking/p2p/transmission/4.nix b/pkgs/applications/networking/p2p/transmission/4.nix index be91f8d4bf07..a49cc0c788fa 100644 --- a/pkgs/applications/networking/p2p/transmission/4.nix +++ b/pkgs/applications/networking/p2p/transmission/4.nix @@ -175,21 +175,22 @@ stdenv.mkDerivation (finalAttrs: { postInstall = '' mkdir $apparmor cat >$apparmor/bin.transmission-daemon <, include - $out/bin/transmission-daemon { + profile $out/bin/transmission-daemon { include include include include "${apparmorRules}" - r @{PROC}/sys/kernel/random/uuid, - r @{PROC}/sys/vm/overcommit_memory, - r @{PROC}/@{pid}/environ, - r @{PROC}/@{pid}/mounts, - rwk /tmp/tr_session_id_*, + @{PROC}/sys/kernel/random/uuid r, + @{PROC}/sys/vm/overcommit_memory r, + @{PROC}/@{pid}/environ r, + @{PROC}/@{pid}/mounts r, + /tmp/tr_session_id_* rwk, - r $out/share/transmission/public_html/**, + $out/share/transmission/public_html/** r, - include + include if exists } EOF install -Dm0444 -t $out/share/icons ../qt/icons/transmission.svg diff --git a/pkgs/by-name/in/inetutils/package.nix b/pkgs/by-name/in/inetutils/package.nix index ee1a08aee946..ffc901683e0d 100644 --- a/pkgs/by-name/in/inetutils/package.nix +++ b/pkgs/by-name/in/inetutils/package.nix @@ -71,16 +71,18 @@ stdenv.mkDerivation rec { postInstall = '' mkdir $apparmor cat >$apparmor/bin.ping <, + include + profile $out/bin/ping { include include include include "${apparmorRulesFromClosure { name = "ping"; } [ stdenv.cc.libc ]}" - include capability net_raw, network inet raw, network inet6 raw, mr $out/bin/ping, + include if exists } EOF ''; diff --git a/pkgs/by-name/li/libapparmor/apparmorRulesFromClosure.nix b/pkgs/by-name/li/libapparmor/apparmorRulesFromClosure.nix index a12b8f0459be..3de57c122ce6 100644 --- a/pkgs/by-name/li/libapparmor/apparmorRulesFromClosure.nix +++ b/pkgs/by-name/li/libapparmor/apparmorRulesFromClosure.nix @@ -9,18 +9,18 @@ # TODO: factorize here some other common paths # that may emerge from use cases. baseRules ? [ - "r $path" - "r $path/etc/**" - "mr $path/share/**" + "$path r" + "$path/etc/** r" + "$path/share/** mr" # Note that not all libraries are prefixed with "lib", # eg. glibc-2.30/lib/ld-2.30.so - "mr $path/lib/**.so*" - "mr $path/lib64/**.so*" + "$path/lib/**.so* mr" + "$path/lib64/**.so* mr" # eg. glibc-2.30/lib/gconv/gconv-modules - "r $path/lib/**" - "r $path/lib64/**" + "$path/lib/** r" + "$path/lib64/** r" # Internal executables - "ixr $path/libexec/**" + "$path/libexec/** ixr" ], name ? "", }: