From c7e68d70095d40de8a9a28c9ec4d59bd201e8784 Mon Sep 17 00:00:00 2001 From: intrigeri Date: Sat, 12 Feb 2022 10:32:04 +0000 Subject: [PATCH] Import profile-load script from Debian This script is used at least by LXC upstream and MySQL in Debian: https://codesearch.debian.net/search?q=%2Flib%2Fapparmor%2Fprofile-load Presumably it could be useful elsewhere if it was more readily available. --- parser/Makefile | 1 + parser/profile-load | 48 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100755 parser/profile-load diff --git a/parser/Makefile b/parser/Makefile index d7966a14b..2ddb18800 100644 --- a/parser/Makefile +++ b/parser/Makefile @@ -419,6 +419,7 @@ install-indep: indep install -m 755 -d ${DESTDIR}/var/lib/apparmor install -m 755 -d $(APPARMOR_BIN_PREFIX) install -m 755 rc.apparmor.functions $(APPARMOR_BIN_PREFIX) + install -m 755 profile-load $(APPARMOR_BIN_PREFIX) $(MAKE) -C po install NAME=${NAME} DESTDIR=${DESTDIR} $(MAKE) install_manpages DESTDIR=${DESTDIR} diff --git a/parser/profile-load b/parser/profile-load new file mode 100755 index 000000000..2663c04d5 --- /dev/null +++ b/parser/profile-load @@ -0,0 +1,48 @@ +#!/bin/sh +# profile-load +# +# ---------------------------------------------------------------------- +# Copyright (c) 2010-2015 Canonical, Ltd. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of version 2 of the GNU General Public +# License published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, contact Canonical, Ltd. +# ---------------------------------------------------------------------- +# +# Helper for loading an AppArmor profile in pre-start scripts. + +[ -z "$1" ] && exit 1 # require a profile name + +. /lib/apparmor/rc.apparmor.functions + +# do not load in a container +[ -x /usr/bin/systemd-detect-virt ] && systemd-detect-virt --quiet --container && ! is_container_with_internal_policy && exit 0 || true + +[ -d /rofs/etc/apparmor.d ] && exit 0 # do not load if running liveCD + +profile=/etc/apparmor.d/"$1" +[ -e "$profile" ] || exit 0 # skip when missing profile + +module=/sys/module/apparmor +[ -d $module ] || exit 0 # do not load without AppArmor in kernel + +[ -x /sbin/apparmor_parser ] || exit 0 # do not load without parser + +aafs=/sys/kernel/security/apparmor +[ -d $aafs ] || exit 0 # do not load if unmounted +[ -w $aafs/.load ] || exit 1 # fail if cannot load profiles + +params=$module/parameters +[ -r $params/enabled ] || exit 0 # do not load if missing +read enabled < $params/enabled || exit 1 # if this fails, something went wrong +[ "$enabled" = "Y" ] || exit 0 # do not load if disabled + +/sbin/apparmor_parser -r -W "$profile" || exit 0 # LP: #1058356