我一直在使用非特权lxc
容器(以 root 身份运行,但具有用户命名空间),并使用以下配置来利用 apparmor:
lxc.apparmor.profile = generated
lxc.apparmor.allow_nesting = 1
当容器运行时,我看到确实生成了 apparmor 配置文件,并且它已加载到系统日志中。例如:
Jan 15 04:00:16 localhost kernel: [1315978.637961] audit: type=1400 audit(1673776816.182:395): apparmor="STATUS" operation="profile_remove" profile="/usr/bin/lxc-start" name="lxc-apache_</var/lib/lxc>" pid=2951275 comm="apparmor_parser"
Jan 15 04:00:34 localhost kernel: [1315996.830889] audit: type=1400 audit(1673776834.374:396): apparmor="STATUS" operation="profile_load" profile="/usr/bin/lxc-start" name="lxc-apache_</var/lib/lxc>" pid=2953280 comm="apparmor_parser"
ls -la '/var/lib/lxc/apache/apparmor/lxc-apache_<-var-lib-lxc>'
-rw------- 1 root root 38155 Jan 15 04:00 'lxc-apache_<-var-lib-lxc>'
但是,当我运行时aa-status
,我得到以下输出:
/usr/bin/busybox (2954962) lxc-apache_</var/lib/lxc>//&:lxc-apache_<-var-lib-lxc>:unconfined
/usr/sbin/sshd (2956272) lxc-apache_</var/lib/lxc>//&:lxc-apache_<-var-lib-lxc>:unconfined
/usr/sbin/httpd (2956340) lxc-apache_</var/lib/lxc>//&:lxc-apache_<-var-lib-lxc>:unconfined
/usr/sbin/httpd (2956353) lxc-apache_</var/lib/lxc>//&:lxc-apache_<-var-lib-lxc>:unconfined
/usr/sbin/httpd (2956363) lxc-apache_</var/lib/lxc>//&:lxc-apache_<-var-lib-lxc>:unconfined
/usr/bin/busybox (2956473) lxc-apache_</var/lib/lxc>//&:lxc-apache_<-var-lib-lxc>:unconfined
如果我理解正确的话,它告诉我正在应用两个 apparmor 配置文件,lxc-apache_</var/lib/lxc>//&
并且lxc-apache_<-var-lib-lxc>:unconfined
.
当它似乎告诉我在unconfined
模式下第二次加载相同的配置文件时,我不确定这意味着什么。这是使用nesting
and/or的结果吗userns
?
由于容器以非特权方式运行,因此我并不关心容器的安全性,而是对 AppArmor 在这种情况下的工作方式感兴趣。