Debian GNU/Linux · Boot & system hardening

Keep no AppArmor profile in complain mode

When it fails: Some AppArmor profiles only log violations instead of blocking them. A profile in complain mode confines nothing; the program it covers runs as if it had no profile.

CB-DEB-BOOT-010mediumactiveautomatedprofile server-hardenedprofile desktop-hardened

Description

Each loaded AppArmor profile runs in a mode. In enforce mode, accesses outside the profile are blocked and logged. In complain mode, they are only logged. Profiles flagged unconfined are a third case: they do not restrict the program but attach specific rights to it (Debian 13 ships many of them for user namespace mediation), and are out of scope here.

Rationale

Complain mode is meant for writing and testing profiles. A profile left in complain mode in production gives a false sense of confinement: the program is not restricted at all.

Impact

Switching a profile to enforce mode can break the program it covers if the profile is incomplete. Debian 13 ships several profiles in complain mode on purpose; enforce them one by one, checking the logs (journalctl -k | grep apparmor) for denials.

Audit

Run aa-status --complaining. It must print 0. aa-status lists the profiles in complain mode by name.

Automated: every check must pass. Scanners report each check by its id.

complain-count

Number of loaded profiles in complain mode.

script: |
  n=$(aa-status --complaining 2>/dev/null) || exit 3
  echo "$n"
  [ "$n" -eq 0 ]

Remediation

  1. List the profiles in complain mode: aa-status.
  2. For each one, install apparmor-utils and run aa-enforce /etc/apparmor.d/<profile>.
  3. Watch for denials with journalctl -k | grep apparmor and fix or revert the profile.

Rollback

Put a profile back in complain mode with aa-complain /etc/apparmor.d/<profile>.

References

Mappings

FrameworkIDRelationNote
ANSSI-BP-028 - Recommandations de configuration d'un système GNU/Linux2.0R45partialR45 also asks for AppArmor to be enabled, which is CB-DEB-BOOT-008.
NIST SP 800-53 Rev. 55.1.1AC-3related

How this control relates to the other framework's: equivalent, stricter, looser, partial or related.

Threats mitigated

People and lifecycle

Authors
Verified2026-10-18 by Sn0wAlice on 12, Proxmox VM, Debian 12 genericcloud image, kernel 6.1.0-54-cloud-amd64, BIOS boot. Passes on a fresh install (11 profiles, all enforce).
Verified2026-10-18 by Sn0wAlice on 13, Proxmox VM, Debian 13 genericcloud image, kernel 6.12.113+deb13-cloud-amd64, BIOS boot. Fails on a fresh install (23 complain profiles); manual procedure with aa-enforce makes it pass.
Introduced inv0.1.0
Created, updated2026-10-18, 2026-10-18
Translationsfr