Internal AppArmor profile with unprivilegied lxc container

Hello.

Sorry in advance, my English is not good.

I want to be able to use AppArmor in my unprivileged container with its own internal profile.

I know it’s possible because lxd can do it.

I’m on Debian Buster, my container too, the lxc version is 3.0.3.

lxc-checkconfig                                                                                                                               
Kernel configuration not found at /proc/config.gz; searching...                                                                               
Kernel configuration found at /boot/config-4.19.0-5-amd64                                                                                     
--- Namespaces ---                                                                                                                            
Namespaces: enabled                                                                                                                           
Utsname namespace: enabled                                                                                                                    
Ipc namespace: enabled  
Pid namespace: enabled                                                                                                               [28/1008]
User namespace: enabled
Network namespace: enabled

--- Control groups ---
Cgroups: enabled

Cgroup v1 mount points:
/sys/fs/cgroup/systemd
/sys/fs/cgroup/memory
/sys/fs/cgroup/perf_event
/sys/fs/cgroup/freezer
/sys/fs/cgroup/net_cls,net_prio
/sys/fs/cgroup/blkio
/sys/fs/cgroup/cpu,cpuacct
/sys/fs/cgroup/pids
/sys/fs/cgroup/devices
/sys/fs/cgroup/rdma
/sys/fs/cgroup/cpuset

Cgroup v2 mount points:
/sys/fs/cgroup/unified

Cgroup v1 clone_children flag: enabled
Cgroup device: enabled
Cgroup sched: enabled
Cgroup cpu account: enabled
Cgroup memory controller: enabled
Cgroup cpuset: enabled

--- Misc ---
Veth pair device: enabled, loaded
Macvlan: enabled, not loaded
Vlan: enabled, not loaded
Bridges: enabled, loaded
Advanced netfilter: enabled, loaded
CONFIG_NF_NAT_IPV4: enabled, loaded
CONFIG_NF_NAT_IPV6: enabled, not loaded
CONFIG_IP_NF_TARGET_MASQUERADE: enabled, not loaded
CONFIG_IP6_NF_TARGET_MASQUERADE: enabled, not loaded
CONFIG_NETFILTER_XT_TARGET_CHECKSUM: enabled, loaded
CONFIG_NETFILTER_XT_MATCH_COMMENT: enabled, not loaded
FUSE (for use with lxcfs): enabled, loaded

--- Checkpoint/Restore ---
checkpoint restore: enabled
CONFIG_FHANDLE: enabled
CONFIG_EVENTFD: enabled
CONFIG_EPOLL: enabled
CONFIG_UNIX_DIAG: enabled
CONFIG_INET_DIAG: enabled
CONFIG_PACKET_DIAG: enabled
CONFIG_NETLINK_DIAG: enabled
File capabilities:

Note : Before booting a new kernel, you can check its configuration
usage : CONFIG=/path/to/config /usr/bin/lxc-checkconfig

When i try to run AppArmor service in a container i obtain the following error message : Not starting AppArmor in container. It’s because lxc not mount securityfs in /sys/kernel/security.

I tried to put in place a solution by adding the following line in container config :

lxc.mount.entry = securityfs sys/kernel/security securityfs ro,nosuid,nodev,noexec,relatime,relative 0 0

It work, but only for privileged containers, the unprivileged containers fail to boot with this error message :

utils.c: safe_mount: 1179 Operation not permitted - Failed to mount "/usr/lib/x86_64-linux-gnu/lxc/rootfs/securityfs" onto "/usr/lib/x86_64-linux-gnu/lxc/rootfs/sys/kernel/security"

How do to solve it ?

How LXD can do this ?

Thanks.