[apparmor] Improving policy abstractions
Christian Boltz
apparmor at cboltz.de
Thu Aug 19 00:00:47 BST 2010
Hello,
Am Dienstag, 10. August 2010 schrieb Seth Arnold:
> Now that I don't know the abstractions as well as I used to (thanks
> Jamie! :) I find myself wondering just what permissions are being
> granted.
>
> Specifically, I have wanted something like:
>
> #include (authentication, read)
>
> To make sure I'm not accidentally granting write access to my auth
> databases.
All abstractions/* files are hand-written (as in: the tools don't edit
them). This means that there should be nothing that "accidently" grants
permissions.
IMHO the problem can be solved by policy ;-)
A simple proposal I thought about:
- abstractions should in general not contain write access with the
exception of
- sockets that are obviously required (like /var/lib/mysql.sock for
abstractions/mysql)
- very basic functions like /dev/null and /dev/log
(in other words: abstractions/base)
- if an abstraction provides write access, it has to be named "*write",
or even "*_write_xyz", for example abstractions/authentification_write
or abstractions/authentification_write_passwd
- if write access is optional, split the abstractions to foo and
foo_write. foo_write should #include foo.
Maybe the policy isn't that easy to define, but you should get my point.
IMHO a technical solution with new syntax is overkill.
> #include (authentication, files)
>
> So I don't wind up supporting a dozen different auth tools I don't
> have.
In other words: you want to split abstractions/foo into
abstractions/foo_authentification and foo/files ;-)
> Of course, I'm scared of parameterized policy, it runs the very real
> risk of growing into a hydra,
Exactly. This is one reason why I don't like the idea of "partly
include".
The other reason is that it would make it much harder to tell which
parts of an included file actually apply - for both the parser and (IMHO
more problematic) for humans reading a profile.
Simple example:
#include (readonly) <abstractions/foo>
would mean you have to ignore all "w" flags while reading
abstractions/foo.
I already need Aspirin for XSLT. I don't want to need it for AppArmor
profiles also...
In other words:
That would be very confusing. (Un?)fortunately confusion is a registered
trademark of SElinux, so AppArmor is not allowed to cause it ;-) [1]
> perhaps your idea of further
> constraining it into types makes sense. (And types would be neat for
> networking and probably IPC too.)
If you really want a new feature ;-) then this sounds like the better
idea. It looks more flexible to me and is easier to parse for humans.
However, I don't see a real-world usecase where (parts of) an
abstraction file should have different permissions in some use cases.
Can you give some examples, please?
A final small question: why do you call this "type" and not "group"?
"group" sounds like a better description to me, and AFAIK "group" is not
yet used as keyword.
Regards,
Christian Boltz
[1] credits for this go to Eberhard Moenkeberg, see sig...
--
Non-understandable error messages are trademark of someone else, so
SUSE is not allowed to submit them. ;-)) [Eberhard Moenkeberg in
https://bugzilla.novell.com/show_bug.cgi?id=209354]
More information about the AppArmor
mailing list