[apparmor] environment variables

John Johansen john.johansen at canonical.com
Thu Nov 10 16:49:24 UTC 2011


On 11/10/2011 04:33 AM, Christian Boltz wrote:
> Hello,
> 
> Am Mittwoch, 9. November 2011 schrieb John Johansen:
>> On 11/09/2011 03:00 PM, Christian Boltz wrote:
>>> Am Mittwoch, 9. November 2011 schrieb John Johansen:
>>>> On 11/09/2011 12:35 PM, Kees Cook wrote:
>>>>> On Tue, Nov 08, 2011 at 03:24:27PM -0800, John Johansen wrote:
> 
>>> If an "exec" section exists, only env variables that are allowed
>>> in the "exec" section _and_ in the target profile should be
>>> allowed.
>> just to be clear, you see this as an intersection of rules.  So at
>> exec take the current profiles env rules, and apply them, and then
>> apply the target profiles rules.
> 
> yes
> 
>> This could maybe actually work for the confined -> unconfined case in
>> that the confined env rules would be applied, so you could do
>> screening in the current profile.
>>
>> With that said it is odd to apply current profile env restrictions on
>> a target profile.  It would mean requiring the current profile to
>> allow env variables that you only want in the target.  Basically you
>> would have to bubble env variables back up the exec chain at least
>> one level.
> 
> Looks like my proposal wasn't clear enough ;-)
> 
> Let's say we have /bin/foo calling /bin/bar, so their profiles could 
> look like this:
> 
> /bin/foo {
>     /bin/bar Px,
>     exec /bin/bar {
>         env PATH /usr/bin:/usr/sbin:*
>         env DISPLAY :0
>         env HOME
>     }
> }
> 
> /bin/bar {
>     env PATH /usr/bin:/usr/sbin:/bin:/sbin:*
>     env HOME
>     env LANG
> }
> 
> This would mean:
> - no env restrictions for /bin/foo
> - /bin/bar will see 
>   - PATH if it matches /usr/bin:/usr/sbin:/bin:/sbin:* (which is the 
>     more strict rule)
>   - HOME
>   - but not DISPLAY (even if it matches :0) because it's not allowed in 
>     the target profile
>   - and also not LANG because it's not allowed in the exec section of 
>     the calling profile
> 
> That all said: Having an "exec" section for Px'd profiles should be an 
> exception, and having no "exec" section should mean not to do env 
> filtering by the calling profile (except what safe exec filters out, of 
> course).
> 
Ah okay, so basically this is env filtering in the profile and at the
rule level.

So do you see an advantage of using an exec section

/bin/foo {
     /bin/bar Px,
     exec /bin/bar {
         env PATH /usr/bin:/usr/sbin:*
         env DISPLAY :0
         env HOME
     }
}

over directly attaching it to the matching rule

/bin/foo {
     /bin/bar Px {
         env PATH /usr/bin:/usr/sbin:*
         env DISPLAY :0
         env HOME
     }
}

or

/bin/foo {
     /bin/bar Px  env {
         PATH /usr/bin:/usr/sbin:*
         DISPLAY :0
         HOME
     }
}

or even

/bin/foo {
     /bin/bar Px  env=(
         PATH=/usr/bin:/usr/sbin:*
         DISPLAY=:0
         HOME=**
     )
}


>>> That leaves the question how exec sections for ix and Cx (and
>>> lowercase px/ux) calls should be handled. Maybe they don't make
>>> too much sense, OTOH just ignoring them would give users a false
>>> sense of security. This basically means we have the choise
>>> between honoring exec for all *x rules or to fail with a parser
>>> error if exec is specified for ix or Cx.
>> Right one of the open question is whether to apply the env rules for
>> all execs or just safe execs like Px, Cx, Ux.
> 
> I'd say we should apply them on both if they are specified. The 
> difference should be that the safe execs would filter out the most 
> critical env vars as they do now, even if the target profile contains 
> "env *".
> 
makes sense at least if their is an exec section instead of tying directly
to the rule.

> In other words: Px, Cx and Ux should do the same as using
>     deny env LD_PRELOAD
>     deny env LD_LIBRARY_PATH
>     deny env [...]
> or shorter
>     deny env @{whatever_safe_exec_filters_out}
> 
> We can add those deny rules to all profiles on the long term and maybe 
> even get rid of safe exec [1] [2], but for now the backwards-compatible 
> way proposed above would be the best IMHO.
> 
Right we need to remain backwards-compatible

> 
> Regards,
> 
> Christian Boltz
> 
> [1] basically safe exec means env filtering by the calling profile, and
>     we seem to agree that filtering on the target profile is better
> 
> [2] maybe Ux is an exception again, but this could be solved with an
>     "exec" section
> 




More information about the AppArmor mailing list