[apparmor] [patch] [1/2] support 'owner' file events in logparser.py

Seth Arnold seth.arnold at canonical.com
Mon Jul 31 19:27:23 UTC 2017


On Sun, Jul 30, 2017 at 10:51:38PM +0200, Christian Boltz wrote:
> Hello,
> 
> logparser.py failed to notice if file events are owner-only in modern
> audit.log (using fsuid=... and ouid=...).
> 
> This patch adds a comparison of fsuid and ouid and marks file events
> as 'owner' if they match.
> 
> Note that log events without fsuid=... or ouid=... will have
> 18446744073709551615 as fsuid / ouid value (that's 2^64 - 1).
> 'None' would clearly be better ;-)
> 
> 
> References: https://bugs.launchpad.net/apparmor/+bug/1538340
> 
> 
> I propose this patch for trunk and 2.11
> (unfortunately it doesn't work on 2.10)
> 
> 
> [ 02-logparser-owner.diff ]
> 
> === modified file ./utils/apparmor/logparser.py
> --- utils/apparmor/logparser.py 2017-07-16 21:43:30.718865501 +0200
> +++ utils/apparmor/logparser.py 2017-07-30 21:56:10.829026386 +0200
> @@ -118,6 +118,10 @@
>          ev['protocol'] = event.net_protocol
>          ev['sock_type'] = event.net_sock_type
>  
> +        if event.ouid != 18446744073709551615:  # 2^64 - 1
> +            ev['fsuid'] = event.fsuid
> +            ev['ouid'] = event.ouid
> +

Why is this one UID handled magically?

>          if ev['operation'] and ev['operation'] == 'signal':
>              ev['signal'] = event.signal
>              ev['peer'] = event.peer
> @@ -270,6 +274,13 @@
>              if not validate_log_mode(hide_log_mode(dmask)):
>                  raise AppArmorException(_('Log contains unknown mode %s') % dmask)
>  
> +            if e.get('ouid') is not None and e['fsuid'] == e['ouid']:
> +                # mark as "owner" event
> +                if '::' not in rmask:
> +                    rmask = '%s::' % rmask
> +                if '::' not in dmask:
> +                    dmask = '%s::' % dmask
> +

Just to double-check, the whole test suite still runs after this change?
It feels kind of big :)

>              # convert rmask and dmask to mode arrays
>              # XXX log_str_to_mode() converts 'w' to 'aw', which later causes a conflict in FileRule
>              e['denied_mask'],  e['name2'] = log_str_to_mode(e['profile'], dmask, e['name2'])
> === modified file ./utils/test/test-logparser.py
> --- utils/test/test-logparser.py        2016-11-18 22:34:24.699780229 +0100
> +++ utils/test/test-logparser.py        2017-07-30 21:53:41.609658482 +0200
> @@ -73,11 +73,13 @@
>              'attr': None,
>              'denied_mask': 'r',
>              'error_code': 13,
> +            'fsuid': 1002,
>              'info': 'Failed name lookup - disconnected path',
>              'magic_token': 0,
>              'name': 'var/run/nscd/passwd',
>              'name2': None,
>              'operation': 'file_mmap',
> +            'ouid': 0,
>              'parent': 0,
>              'pid': 25333,
>              'profile': '/sbin/klogd',
> 

Thanks
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 473 bytes
Desc: not available
URL: <https://lists.ubuntu.com/archives/apparmor/attachments/20170731/b3d9d129/attachment.pgp>


More information about the AppArmor mailing list