[apparmor] [RFC] Refactoring apparmor-profiles repository

Vincas Dargis vindrg at gmail.com
Tue Jun 12 17:40:33 UTC 2018


On 6/11/18 10:18 PM, Seth Arnold wrote:
> On Sat, Jun 09, 2018 at 03:38:48PM +0300, Vincas Dargis wrote:
>> profiles or should it backport it's rules inline? If it would be known that
>> Ubuntu 18.10 will not have AppArmor 4.13, what if someone from OpenSUSE
>> Tumbleweed would like to introduce new profile with 4.13 features? It can't
>> go into ubuntu/18.10...
> 
> I think the intention was profiles for other distributions might get their
> own top-level directory.. e.g. opensuse/ and so on.

Oh I see. Though I would say that this technique would only bring too 
much duplication.

> So while the Ubuntu ones are split apart by version, rolling-release
> distros might just edit their profiles in place.

Modifying in place means again, IMHO, duplication, non-sharing of work.

I believe that custom distribution-depended modifications could be 
really handled with variables and conditional includes.

> Does this change your thinking?

No. Having directory tree for each interested-enough distro looks like 
too much of noise and confusion.

If some new distro decides to start AppArmor'ing, should it copy from 
`ubuntu`, `openSUSE` or `arch` directory if it's not based on any of these?

Not-having `openSUSE` directory for so much time probably also says 
something...

Let's see contrived example #1 on how single cross-distro-shared profile 
repository could work, by using tunable variables:

Imagine we have `/usr/bin/foo` application, that also occasionally uses 
`/usr/lib/foo/foo_helper.sh` helper-executable. We have a problem that 
these lib-paths are different on Debian and openSUSE.

So let's say we would have a rule/guideline that application profile 
should have this include, in addition to `tunables/global` :

```
# as before:
#include <tunables/global>

# not a conditional include!
#include <tunables/usr.bin.foo>

# ...rest of profile...
```

Where `tunables/usr.bin.foo` looks like this:

```
# "upstream" defaults:

# can be made to confine /usr/local instances, if needed
@{foo_prefix} = /usr

@{foo_executable} = @{foo_prefix}/bin/foo
@{foo_lib_prefix} = @{foo_prefix}/lib/foo
@{foo_helper_executable} = @{foo_lib_prefix}/foo_helper.sh

# for distribution and third-party variable modifications:
#include if exists <tunables/usr.bin.foo.d/>

# for local system administrator modifications:
#include if exists <local/tunables/usr.bin.foo>
```

Now, `tunables/usr.bin.foo.d/debian`, on Debian-bases system, could look 
like this:

```
@{foo_lib_prefix} += @{foo_prefix}/@{multiarch}/foo
```

Meanwhile on openSUSE, `tunables/usr.bin.foo.d/openSUSE` could look like 
this instead:

```
@{foo_lib_prefix} += @{foo_prefix}/lib{,64}/foo
```

And now in the main `/etc/apparmor/usr.bin.foo` profile:

```
# ...

profile foo @{foo_executable} {

   #Main executable
   @{foo_executable} mr,

   # Other executables
   @{foo_helper_executable} Cx -> foo_helper,

   # ...
}
```

And that should work, or be made to work by modifying tunables, on 
various distros.

Let's see another kinda-semi-contrived-based-on-real-story example #2:

Let's say openSUSE Tumbleweed people discovered that Thunderbird 60 now 
needs to enumerate graphics devices, and that can be fixed with 
including `<abstrations/dri-enumerate>` abstraction, that is available 
in latest AppArmor 2.13, the version openSUSE Tumbleweed are actually 
shipping.

So, they send pull request to `apparmor-profiles` repository to add 
`#include <abstractions/dri-enumerate>` into 
`apparmor/2.13/usr.bin.thunderbird` profile. Note the 2.13.

Meanwhile, Debian Sid users with Experiment repository has also 
discovered that their Thunderbird 60 does not work  (true story, [0]). 
Sadly, `dri-enumerate` abstraction is not yet available in Debian Sid, 
as it ships AppArmor 2.12. Well, not so big deal, just update 
`apparmor/2.12/usr.bin.thunderbird` profile  (.12, not .13!) by 
back-porting `dri-enumerate` contents from latest AppArmor 2.13.

And (imagine) that 2.12 profile version will ship in Ubuntu 18.10 too, 
and any other Debian-based or even any AppArmor 2.12-based distro 
actually. All using same profile.

When Debian family finally updates to AppArmor 2.13, they now can use 
latest `apparmor/2.13/usr.bin.thunderbird` profile, already fixed 
without backports by bleedingedgers! Yay :)

End of example #2.

Also, we already have distro-specific fixes in abstractions and they are 
not split by distrbution-specific directories...

[0] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=900840#17




More information about the AppArmor mailing list