Field Guide

SELinux custom modules load cleanly and still fail because the actual denial is in a different domain transition.

Use this when audit logs point one way and the service keeps failing because the policy path was modeled too narrowly.

Start from the failing condition, not the loudest symptom.

Use this when audit logs point one way and the service keeps failing because the policy path was modeled too narrowly. Treat the visible error as the end of the chain and work backward until the first dependency that actually moved is obvious.

Separate healthy dependencies from the one that actually broke.

  • Capture one failing path, one known-good path, and the exact change window before touching configuration.
  • Confirm Linux state from both the control plane and an affected workload so you are not troubleshooting a cached or partial view.
  • Confirm SELinux state from both the control plane and an affected workload so you are not troubleshooting a cached or partial view.
  • Confirm Policy state from both the control plane and an affected workload so you are not troubleshooting a cached or partial view.
  • Record which dependency actually moved first: identity, name resolution, transport, policy, or runtime state.

Recover the path without widening the blast radius.

  • Prove the break is centered in Linux before editing the next layer down the dependency chain.
  • Correct the narrowest failing state first, then retest from the same path that originally failed.
  • Re-register, reload, or restart only the component tied to SELinux rather than stacking broad changes together.
  • Validate with a second client, site, or node so the fix is not limited to one warm cache or one host.
  • Capture the final health evidence and the triggering condition so the next incident starts from facts instead of memory.