[apparmor] Questions about Contributing
邵飞
robinshao007 at 163.com
Fri May 29 08:05:17 UTC 2026
Hi Aenr,
One issue, how will do about the below directory pls?
/foo/*/bar
/foo/**/bar
Thanks
Robin Shao
在 2026/5/29 10:32, aenri 写道:
> Hi all,
>
> I've recently run into a limitation while trying to configure AppArmor
> for use with non-FHS filesystem layouts, such as (and particularly for
> my use-case) Nix, where binaries live under /nix/store/<hash>/bin
> instead of the typical /usr/bin. I believe I've traced it to a minor
> shortfall in executable flag conflict resolution; the mechanism itself
> is an otherwise effective and reasonable solution, however all paths
> with wildcards /anywhere/ within the path are treated the exact same
> within hfa.cc / pri_update_perm. This leads to system-breaking
> conflicts and unnecessary failures to compile DFA profiles despite one
> path being deterministically and provably more specific. Under FHS
> layouts, this would only rarely, if ever, be an issue, however with
> Nix's non-FHS layout it's most effective to use a wildcard to include
> all /nix/store/<hash>/bin folders as @{bin} entries, as opposed to
> generating an ever-changing gigantic file including every Nix store
> folder as an @{bin} entry. For example, /nix/store/*/bin/foo and
> /nix/store/*/bin/* are both evaluated through aare_rules.h+c into
> MatchFlags, and thus both have the same low priority when attempting
> to merge executable flags, despite /nix/store/*/bin/foo being a
> deterministically more specific path which shows intent to modify the
> permissions for the specific Nix-distributed binary. I've investigated
> a possible solution that leaves runtime enforcement and all
> conflict-free paths unaffected while compiling DFA profiles, but I
> thought it would be best to see if there are any positive/negative
> opinions from the maintainers on this idea before pushing too far on
> code or submitting some random PR.
>
> My idea is to add on to the behavior of perms_t and pri_update_perm in
> order to resolve conflicts between two different MatchFlags by
> traversing the regex AST of both matching items and determining subset
> relationships between them only at compile time on a conflict. This
> subset relationship (e.g. /nix/store/*/bin/foo is a subset of
> /nix/store/*/bin/*, and thus more specific) is then used to prioritize
> the more specific MatchFlag. In a case where no subset relationship
> can be determined (e.g. patterns that overlap but where neither
> entirely contains the other), we would fall back to the existing
> conflict/error behavior. Considering the infrequency with which
> conflicts occur, even under Nix, I would expect this to have
> negligible if/ any /noticeable performance effects at DFA compile
> time, and no performance effects during runtime enforcement. That
> said, when they do occur they're often severe; in my case, enough
> profiles failed to compile to leave my system completely unusable
> without disabling AppArmor.
>
> Some questions about this process:
>
> * Does this approach seem sound? Is there some context I'm missing
> about why executable flag priority is simply exact vs non-exact
> versus an approach similar to this?
> * When I have a patch, would you all prefer a GitLab PR or a patch
> sent to the list?
> * Is there any existing discussion or work on this that I've missed
> or should be aware of before working on this patch?
>
>
> I'm open to any comments, questions, or concerns about this, I'd
> prefer to align on direction than to come in with a blind PR that no
> one wants or needs. I'd be happy to write up further about the changes
> I'd be making to achieve this as well!
>
> Thank you,
> Aenri Lovehart
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.ubuntu.com/archives/apparmor/attachments/20260529/ad246799/attachment-0001.html>
More information about the AppArmor
mailing list