]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
apparmor: Reflect paths from configure in profiles
authorMichal Privoznik <mprivozn@redhat.com>
Thu, 30 Jan 2020 10:06:47 +0000 (11:06 +0100)
committerMichal Privoznik <mprivozn@redhat.com>
Tue, 4 Feb 2020 08:08:51 +0000 (09:08 +0100)
The configure script allows users to specify different paths for
/etc/, /usr/sbin/, /var/run/ and /usr/libexec/. Instead of
assuming user will pass expected value, generate the apparmor
profiles using the actual values.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
src/security/Makefile.inc.am
src/security/apparmor/usr.lib.libvirt.virt-aa-helper.in [moved from src/security/apparmor/usr.lib.libvirt.virt-aa-helper with 85% similarity]
src/security/apparmor/usr.sbin.libvirtd.in [moved from src/security/apparmor/usr.sbin.libvirtd with 94% similarity]

index 6fe9d50f292403836491786585a96a6be0ff37b8..3d669275d4ddd6ffb282f73eb7ae267b1ce630c0 100644 (file)
@@ -30,16 +30,36 @@ SECURITY_DRIVER_APPARMOR_SOURCES = \
        security/security_apparmor.c \
        $(NULL)
 
+SECURITY_DRIVER_APPARMOR_GENERATED_PROFILES_IN = \
+       security/apparmor/usr.lib.libvirt.virt-aa-helper.in \
+       security/apparmor/usr.sbin.libvirtd.in \
+       $(NULL)
+
+SECURITY_DRIVER_APPARMOR_GENERATED_PROFILES = \
+       $(SECURITY_DRIVER_APPARMOR_GENERATED_PROFILES_IN:%.in=%)
+       $(NULL)
+
+security/apparmor/%: $(srcdir)/security/apparmor/%.in
+       $(AM_V_GEN)$(MKDIR_P) `dirname $@` && \
+       $(SED) \
+               -e 's|[@]sysconfdir[@]|@sysconfdir@|' \
+               -e 's|[@]sbindir[@]|@sbindir@|' \
+               -e 's|[@]runstatedir[@]|@runstatedir@|' \
+               -e 's|[@]libexecdir[@]|@libexecdir@|' \
+               $< > $@
+
+BUILT_SOURCES += $(SECURITY_DRIVER_APPARMOR_GENERATED_PROFILES)
+CLEANFILES += $(SECURITY_DRIVER_APPARMOR_GENERATED_PROFILES)
+
 EXTRA_DIST += \
        $(SECURITY_DRIVER_SELINUX_SOURCES) \
        $(SECURITY_DRIVER_APPARMOR_SOURCES) \
        $(SECURITY_DRIVER_APPARMOR_HELPER_SOURCES) \
+       $(SECURITY_DRIVER_APPARMOR_GENERATED_PROFILES_IN) \
        security/apparmor/TEMPLATE.qemu \
        security/apparmor/TEMPLATE.lxc \
        security/apparmor/libvirt-qemu \
        security/apparmor/libvirt-lxc \
-       security/apparmor/usr.lib.libvirt.virt-aa-helper \
-       security/apparmor/usr.sbin.libvirtd \
        $(NULL)
 
 libvirt_security_manager_la_SOURCES = $(SECURITY_DRIVER_SOURCES)
@@ -91,8 +111,7 @@ endif WITH_SECDRIVER_APPARMOR
 if WITH_APPARMOR_PROFILES
 apparmordir = $(sysconfdir)/apparmor.d/
 apparmor_DATA = \
-       security/apparmor/usr.lib.libvirt.virt-aa-helper \
-       security/apparmor/usr.sbin.libvirtd \
+       $(SECURITY_DRIVER_APPARMOR_GENERATED_PROFILES)
        $(NULL)
 
 abstractionsdir = $(apparmordir)/abstractions
@@ -108,7 +127,7 @@ templates_DATA = \
        $(NULL)
 
 APPARMOR_LOCAL_DIR = "$(DESTDIR)$(apparmordir)/local"
-install-apparmor-local:
+install-apparmor-local: $(SECURITY_DRIVER_APPARMOR_GENERATED_PROFILES)
        $(MKDIR_P) "$(APPARMOR_LOCAL_DIR)"
        echo "# Site-specific additions and overrides for \
                'usr.lib.libvirt.virt-aa-helper'" \
similarity index 85%
rename from src/security/apparmor/usr.lib.libvirt.virt-aa-helper
rename to src/security/apparmor/usr.lib.libvirt.virt-aa-helper.in
index af434ab5398fc85408134a490e79484d733bf393..dd18c8ab896183638dac21b251abc811edd6ffb6 100644 (file)
@@ -1,6 +1,6 @@
 #include <tunables/global>
 
-profile virt-aa-helper /usr/{lib,lib64}/libvirt/virt-aa-helper {
+profile virt-aa-helper @libexecdir@/virt-aa-helper {
   #include <abstractions/base>
 
   # needed for searching directories
@@ -19,7 +19,7 @@ profile virt-aa-helper /usr/{lib,lib64}/libvirt/virt-aa-helper {
   # Used when internally running another command (namely apparmor_parser)
   @{PROC}/@{pid}/fd/ r,
 
-  /etc/libnl-3/classid r,
+  @sysconfdir@/libnl-3/classid r,
 
   # for gl enabled graphics
   /dev/dri/{,*} r,
@@ -38,11 +38,11 @@ profile virt-aa-helper /usr/{lib,lib64}/libvirt/virt-aa-helper {
   deny /dev/mapper/ r,
   deny /dev/mapper/* r,
 
-  /usr/{lib,lib64}/libvirt/virt-aa-helper mr,
+  @libexecdir@/virt-aa-helper mr,
   /{usr/,}sbin/apparmor_parser Ux,
 
-  /etc/apparmor.d/libvirt/* r,
-  /etc/apparmor.d/libvirt/libvirt-[0-9a-f]*-[0-9a-f]*-[0-9a-f]*-[0-9a-f]*-[0-9a-f]* rw,
+  @sysconfdir@/apparmor.d/libvirt/* r,
+  @sysconfdir@/apparmor.d/libvirt/libvirt-[0-9a-f]*-[0-9a-f]*-[0-9a-f]*-[0-9a-f]*-[0-9a-f]* rw,
 
   # for backingstore -- allow access to non-hidden files in @{HOME} as well
   # as storage pools
similarity index 94%
rename from src/security/apparmor/usr.sbin.libvirtd
rename to src/security/apparmor/usr.sbin.libvirtd.in
index c1acea70a11c6a895277f15b919e432c3a61c962..b384b7213b05e6d34bf3ff50bb3bc52bb1a05692 100644 (file)
@@ -1,7 +1,7 @@
 #include <tunables/global>
 @{LIBVIRT}="libvirt"
 
-profile libvirtd /usr/sbin/libvirtd flags=(attach_disconnected) {
+profile libvirtd @sbindir@/libvirtd flags=(attach_disconnected) {
   #include <abstractions/base>
   #include <abstractions/dbus>
 
@@ -80,8 +80,8 @@ profile libvirtd /usr/sbin/libvirtd flags=(attach_disconnected) {
   /bin/* PUx,
   /sbin/* PUx,
   /usr/bin/* PUx,
-  /usr/sbin/virtlogd pix,
-  /usr/sbin/* PUx,
+  @sbindir@/virtlogd pix,
+  @sbindir@/* PUx,
   /{usr/,}lib/udev/scsi_id PUx,
   /usr/{lib,lib64}/xen-common/bin/xen-toolstack PUx,
   /usr/{lib,lib64}/xen/bin/* Ux,
@@ -98,9 +98,9 @@ profile libvirtd /usr/sbin/libvirtd flags=(attach_disconnected) {
   audit deny /sys/kernel/security/apparmor/matching rwxl,
   audit deny /sys/kernel/security/apparmor/.* rwxl,
   /sys/kernel/security/apparmor/profiles r,
-  /usr/{lib,lib64}/libvirt/* PUxr,
-  /usr/{lib,lib64}/libvirt/libvirt_parthelper ix,
-  /usr/{lib,lib64}/libvirt/libvirt_iohelper ix,
+  @libexecdir@/* PUxr,
+  @libexecdir@/libvirt_parthelper ix,
+  @libexecdir@/libvirt_iohelper ix,
   /etc/libvirt/hooks/** rmix,
   /etc/xen/scripts/** rmix,