On 11/12/2016 12:36 PM, Steve Langasek wrote:
>> IMPORTANT: There is a known regression that may be seen by
>> users of `lxc exec`. See bug #1641243 for details.
>
> I don't see any mention of an lxc exec regression in bug #1641243.
> Please explain here what the known regression is, and why this is
> thought to be acceptable in an SRU.
That was a copy and paste error. I've updated the description to point
to the correct bug (bug #1641236).
It may not be acceptable for an SRU but it is low impact. I think we
need to weigh our options here. See below...
> Please also elaborate why support for loading apparmor profiles in a
> 14.04 container on a 16.04 host is an appropriate rationale for an SRU.
> Is this related to supporting snappy inside a 14.04 container? I
> understand the argument for supporting snappy on a 14.04 host; I'm less
> clear on the rationale for users to want snappy support in a 14.04 lxd
> container, as opposed to simply spinning up a 16.04 lxd container to get
> snappy support.
If we don't care to support snaps inside of a 14.04 container, then I
can back out the various apparmor changes that allow loading of policy
inside of lxd containers and I can also drop the upstart SRU.
I haven't heard of a hard requirement to support snaps inside of 14.04
LXD containers so I'll ask around to gauge the interest.
** Description changed:
=apparmor and upstart 14.04 SRU=
[Impact]
A recent 16.04 kernel (4.4.0-46.67) and the lxd
(2.0.5-0ubuntu1~ubuntu16.04.1) allows us to enable stacked/namespaced AppArmor
policy for 14.04 lxd containers. This means that the container can have an
overall confinement profile while still allowing individual processes inside of
the container to have individual confinement profiles. This bug is for the
apparmor and upstart userspace changes needed to allow the container init to
load apparmor profiles during the container boot procedure.
[Test Case]
Install the latest Xenial kernel and lxd. Reboot into the new kernel and set
up a new 14.04 lxd container (MUST be an unprivileged container):
- $ lxc launch ubuntu-daily:14.04 t
+ $ lxc launch ubuntu-daily:14.04 t
Install apparmor from trusty-proposed (2.10.95-0ubuntu2.5~14.04.1) and
upstart from trusty-proposed (1.12.1-0ubuntu4.3) inside of the container
and reboot the container.
Verify that the container's dhclient is confined inside of an AppArmor
namespace with a stacked profile that was loaded inside of the
container:
$ ps auxZ | grep
'^lxd-t_</var/lib/lxd>//&:lxd-t_<var-lib-lxd>:///sbin/dhclient'
lxd-t_</var/lib/lxd>//&:lxd-t_<var-lib-lxd>:///sbin/dhclient (enforce) 165536
3889 0.0 0.0 16120 860 ? Ss 03:55 0:00 /sbin/dhclient -1 -v -pf
/run/dhclient.eth0.pid -lf /var/lib/dhcp/dhclient.eth0.leases -I -df
/var/lib/dhcp/dhclient6.eth0.leases eth0
Verify that aa-status works inside of the container:
$ lxc exec t -- aa-status
apparmor module is loaded.
4 profiles are loaded.
4 profiles are in enforce mode.
- /sbin/dhclient
- /usr/lib/NetworkManager/nm-dhcp-client.action
- /usr/lib/connman/scripts/dhclient-script
- /usr/sbin/tcpdump
+ /sbin/dhclient
+ /usr/lib/NetworkManager/nm-dhcp-client.action
+ /usr/lib/connman/scripts/dhclient-script
+ /usr/sbin/tcpdump
0 profiles are in complain mode.
1 processes have profiles defined.
1 processes are in enforce mode.
- /sbin/dhclient (518)
+ /sbin/dhclient (518)
0 processes are in complain mode.
0 processes are unconfined but have a profile defined.
Now, examine the output of aa-status to verify that the
/usr/sbin/tcpdump profile is loaded.
To validate the upstart change, use apparmor-profile-load to load a
profile:
$ echo "profile lp1628285-test {} " | lxc exec t -- tee
/etc/apparmor.d/lp1628285-test
$ lxc exec t -- /lib/init/apparmor-profile-load lp1628285-test
$ lxc exec t -- aa-status
apparmor module is loaded.
5 profiles are loaded.
5 profiles are in enforce mode.
- /sbin/dhclient
- /usr/lib/NetworkManager/nm-dhcp-client.action
- /usr/lib/connman/scripts/dhclient-script
- /usr/sbin/tcpdump
- lp1628285-test
+ /sbin/dhclient
+ /usr/lib/NetworkManager/nm-dhcp-client.action
+ /usr/lib/connman/scripts/dhclient-script
+ /usr/sbin/tcpdump
+ lp1628285-test
0 profiles are in complain mode.
1 processes have profiles defined.
1 processes are in enforce mode.
- /sbin/dhclient (518)
+ /sbin/dhclient (518)
0 processes are in complain mode.
0 processes are unconfined but have a profile defined.
$ lxc exec t -- ls /etc/apparmor.d/cache/lp1628285-test
/etc/apparmor.d/cache/lp1628285-test
Now, reboot and then run aa-status again to verify that the output is
the same (except for the process ID numbers).
It is also a good test to install ntp and cups-daemon, use aa-status to
verify that their profiles are in enforce mode and that their processes
are confined. Then reboot and use aa-status to verify the same thing.
[Regression Potential]
The regression potential is relatively high because processes inside of
Ubuntu containers can be confined with an additional profile that is loaded
inside of the container. This feature was released in Ubuntu 16.10 and 16.04
with no known serious issues so far.
- IMPORTANT: There is a known regression that may be seen by users of `lxc
exec`. See bug #1641243 for details. Bug #1640868 is pre-existing, doesn't seem
to have any negative side-effects, and is not caused by this SRU.
-
+ IMPORTANT: There is a known regression that may be seen by users of `lxc
+ exec`. See bug #1641236 for details. Bug #1640868 is pre-existing,
+ doesn't seem to have any negative side-effects, and is not caused by
+ this SRU.
=apparmor 16.04 SRU=
[Impact]
The kernel in xenial-proposed (4.4.0-46.67) and the lxd that has recently
migrated from xenial-proposed (2.0.5-0ubuntu1~ubuntu16.04.1) allows us to
enable stacked/namespaced AppArmor policy for lxd containers. This means that
the container can have an overall confinement profile while still allowing
individual processes inside of the container to have individual confinement
profiles. This bug is for the apparmor userspace changes needed to allow the
container init to load apparmor profiles during the container boot procedure.
[Test Case]
Install the kernel from xenial-proposed (4.4.0-46.67). Reboot into the new
kernel and set up a new xenial lxd container (MUST be an unprivileged
container):
$ lxc start ubuntu:16.04 x
Install apparmor from xenial-proposed (2.10.95-0ubuntu2.5) inside of the
container and reboot the container.
Verify that the container's dhclient is confined inside of an AppArmor
namespace with a stacked profile that was loaded inside of the
container:
$ ps auxZ | grep
'^lxd-x_</var/lib/lxd>//&:lxd-x_<var-lib-lxd>:///sbin/dhclient'
lxd-x_</var/lib/lxd>//&:lxd-x_<var-lib-lxd>:///sbin/dhclient (enforce) 165536
3889 0.0 0.0 16120 860 ? Ss 03:55 0:00 /sbin/dhclient -1 -v -pf
/run/dhclient.eth0.pid -lf /var/lib/dhcp/dhclient.eth0.leases -I -df
/var/lib/dhcp/dhclient6.eth0.leases eth0
[Regression Potential]
The regression potential is relatively high because processes inside of
Ubuntu containers can be confined with an additional profile that is loaded
inside of the container. However, this feature was released in Ubuntu 16.10
with no known issues so far.
=Original Description=
Now that we have support for apparmor namespacing and stacking,
unprivileged containers can and should be allowed to load apparmor
profiles.
The following changes are needed at least:
- Change the systemd unit to remove the "!container" condition
- Change the apparmor init script, replacing the current simple container
check for something along the lines of:
- If /proc/self/attr/current says "unconfined"
- And /sys/kernel/security/apparmor/features/domain/stack contains "yes"
- And /sys/kernel/security/apparmor/features/domain/version is 1.2 or
higher
- Then continue execing the script, otherwise exit 0
John suggested he could add a file which would provide a more reliable
way to do this check ^
In either case, we need this change so that containers can behave more
like normal systems as far as apparmor is concerned. That change should
also be SRUed back to Xenial at the same time the kernel support for
stacking is pushed.
This bug is effectively a blocker for snapd inside LXD as without this,
snap-confine and snapd itself will not be confined after container
restart.
--
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1628285
Title:
apparmor should be allowed to start in containers
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/apparmor/+bug/1628285/+subscriptions
--
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs