2010-07-30 03:46:33 +00:00
|
|
|
# Makefile for AppArmor Linux Security Module
|
|
|
|
#
|
|
|
|
obj-$(CONFIG_SECURITY_APPARMOR) += apparmor.o
|
|
|
|
|
|
|
|
apparmor-y := apparmorfs.o audit.o capability.o context.o ipc.o lib.o match.o \
|
|
|
|
path.o domain.o policy.o policy_unpack.o procattr.o lsm.o \
|
apparmor: add mount mediation
Add basic mount mediation. That allows controlling based on basic
mount parameters. It does not include special mount parameters for
apparmor, super block labeling, or any triggers for apparmor namespace
parameter modifications on pivot root.
default userspace policy rules have the form of
MOUNT RULE = ( MOUNT | REMOUNT | UMOUNT )
MOUNT = [ QUALIFIERS ] 'mount' [ MOUNT CONDITIONS ] [ SOURCE FILEGLOB ]
[ '->' MOUNTPOINT FILEGLOB ]
REMOUNT = [ QUALIFIERS ] 'remount' [ MOUNT CONDITIONS ]
MOUNTPOINT FILEGLOB
UMOUNT = [ QUALIFIERS ] 'umount' [ MOUNT CONDITIONS ] MOUNTPOINT FILEGLOB
MOUNT CONDITIONS = [ ( 'fstype' | 'vfstype' ) ( '=' | 'in' )
MOUNT FSTYPE EXPRESSION ]
[ 'options' ( '=' | 'in' ) MOUNT FLAGS EXPRESSION ]
MOUNT FSTYPE EXPRESSION = ( MOUNT FSTYPE LIST | MOUNT EXPRESSION )
MOUNT FSTYPE LIST = Comma separated list of valid filesystem and
virtual filesystem types (eg ext4, debugfs, etc)
MOUNT FLAGS EXPRESSION = ( MOUNT FLAGS LIST | MOUNT EXPRESSION )
MOUNT FLAGS LIST = Comma separated list of MOUNT FLAGS.
MOUNT FLAGS = ( 'ro' | 'rw' | 'nosuid' | 'suid' | 'nodev' | 'dev' |
'noexec' | 'exec' | 'sync' | 'async' | 'remount' |
'mand' | 'nomand' | 'dirsync' | 'noatime' | 'atime' |
'nodiratime' | 'diratime' | 'bind' | 'rbind' | 'move' |
'verbose' | 'silent' | 'loud' | 'acl' | 'noacl' |
'unbindable' | 'runbindable' | 'private' | 'rprivate' |
'slave' | 'rslave' | 'shared' | 'rshared' |
'relatime' | 'norelatime' | 'iversion' | 'noiversion' |
'strictatime' | 'nouser' | 'user' )
MOUNT EXPRESSION = ( ALPHANUMERIC | AARE ) ...
PIVOT ROOT RULE = [ QUALIFIERS ] pivot_root [ oldroot=OLD PUT FILEGLOB ]
[ NEW ROOT FILEGLOB ]
SOURCE FILEGLOB = FILEGLOB
MOUNTPOINT FILEGLOB = FILEGLOB
eg.
mount,
mount /dev/foo,
mount options=ro /dev/foo -> /mnt/,
mount options in (ro,atime) /dev/foo -> /mnt/,
mount options=ro options=atime,
Signed-off-by: John Johansen <john.johansen@canonical.com>
Acked-by: Seth Arnold <seth.arnold@canonical.com>
2017-07-19 06:04:47 +00:00
|
|
|
resource.o secid.o file.o policy_ns.o label.o mount.o
|
2013-08-14 18:27:36 +00:00
|
|
|
apparmor-$(CONFIG_SECURITY_APPARMOR_HASH) += crypto.o
|
2010-07-30 03:46:33 +00:00
|
|
|
|
2011-01-07 14:03:02 +00:00
|
|
|
clean-files := capability_names.h rlim_names.h
|
2010-07-30 03:46:33 +00:00
|
|
|
|
2011-03-05 10:18:02 +00:00
|
|
|
|
|
|
|
# Build a lower case string table of capability names
|
|
|
|
# Transforms lines from
|
|
|
|
# #define CAP_DAC_OVERRIDE 1
|
|
|
|
# to
|
|
|
|
# [1] = "dac_override",
|
2010-07-30 03:46:33 +00:00
|
|
|
quiet_cmd_make-caps = GEN $@
|
2012-03-15 06:41:17 +00:00
|
|
|
cmd_make-caps = echo "static const char *const capability_names[] = {" > $@ ;\
|
2011-03-05 10:18:02 +00:00
|
|
|
sed $< >>$@ -r -n -e '/CAP_FS_MASK/d' \
|
|
|
|
-e 's/^\#define[ \t]+CAP_([A-Z0-9_]+)[ \t]+([0-9]+)/[\2] = "\L\1",/p';\
|
2013-08-14 18:27:32 +00:00
|
|
|
echo "};" >> $@ ;\
|
2017-05-25 13:23:42 +00:00
|
|
|
printf '%s' '\#define AA_SFS_CAPS_MASK "' >> $@ ;\
|
2013-08-14 18:27:32 +00:00
|
|
|
sed $< -r -n -e '/CAP_FS_MASK/d' \
|
|
|
|
-e 's/^\#define[ \t]+CAP_([A-Z0-9_]+)[ \t]+([0-9]+)/\L\1/p' | \
|
|
|
|
tr '\n' ' ' | sed -e 's/ $$/"\n/' >> $@
|
2011-03-05 10:18:02 +00:00
|
|
|
|
2010-07-30 03:46:33 +00:00
|
|
|
|
2011-03-05 10:18:02 +00:00
|
|
|
# Build a lower case string table of rlimit names.
|
|
|
|
# Transforms lines from
|
|
|
|
# #define RLIMIT_STACK 3 /* max stack size */
|
|
|
|
# to
|
|
|
|
# [RLIMIT_STACK] = "stack",
|
|
|
|
#
|
|
|
|
# and build a second integer table (with the second sed cmd), that maps
|
2012-01-27 00:29:23 +00:00
|
|
|
# RLIMIT defines to the order defined in asm-generic/resource.h This is
|
2011-03-05 10:18:02 +00:00
|
|
|
# required by policy load to map policy ordering of RLIMITs to internal
|
|
|
|
# ordering for architectures that redefine an RLIMIT.
|
|
|
|
# Transforms lines from
|
|
|
|
# #define RLIMIT_STACK 3 /* max stack size */
|
|
|
|
# to
|
|
|
|
# RLIMIT_STACK,
|
2012-01-27 00:29:23 +00:00
|
|
|
#
|
|
|
|
# and build the securityfs entries for the mapping.
|
|
|
|
# Transforms lines from
|
|
|
|
# #define RLIMIT_FSIZE 1 /* Maximum filesize */
|
|
|
|
# #define RLIMIT_STACK 3 /* max stack size */
|
|
|
|
# to
|
2017-05-25 13:23:42 +00:00
|
|
|
# #define AA_SFS_RLIMIT_MASK "fsize stack"
|
2010-07-30 03:46:33 +00:00
|
|
|
quiet_cmd_make-rlim = GEN $@
|
2012-03-15 06:41:17 +00:00
|
|
|
cmd_make-rlim = echo "static const char *const rlim_names[RLIM_NLIMITS] = {" \
|
2012-03-14 12:53:40 +00:00
|
|
|
> $@ ;\
|
2011-03-05 10:18:02 +00:00
|
|
|
sed $< >> $@ -r -n \
|
|
|
|
-e 's/^\# ?define[ \t]+(RLIMIT_([A-Z0-9_]+)).*/[\1] = "\L\2",/p';\
|
|
|
|
echo "};" >> $@ ;\
|
2012-01-27 00:29:23 +00:00
|
|
|
echo "static const int rlim_map[RLIM_NLIMITS] = {" >> $@ ;\
|
2011-03-05 10:18:02 +00:00
|
|
|
sed -r -n "s/^\# ?define[ \t]+(RLIMIT_[A-Z0-9_]+).*/\1,/p" $< >> $@ ;\
|
2012-01-27 00:29:23 +00:00
|
|
|
echo "};" >> $@ ; \
|
2017-05-25 13:23:42 +00:00
|
|
|
printf '%s' '\#define AA_SFS_RLIMIT_MASK "' >> $@ ;\
|
2012-01-27 00:29:23 +00:00
|
|
|
sed -r -n 's/^\# ?define[ \t]+RLIMIT_([A-Z0-9_]+).*/\L\1/p' $< | \
|
|
|
|
tr '\n' ' ' | sed -e 's/ $$/"\n/' >> $@
|
2010-07-30 03:46:33 +00:00
|
|
|
|
|
|
|
$(obj)/capability.o : $(obj)/capability_names.h
|
|
|
|
$(obj)/resource.o : $(obj)/rlim_names.h
|
2012-10-17 20:29:33 +00:00
|
|
|
$(obj)/capability_names.h : $(srctree)/include/uapi/linux/capability.h \
|
2012-01-27 00:29:23 +00:00
|
|
|
$(src)/Makefile
|
2010-07-30 03:46:33 +00:00
|
|
|
$(call cmd,make-caps)
|
2012-10-04 17:20:15 +00:00
|
|
|
$(obj)/rlim_names.h : $(srctree)/include/uapi/asm-generic/resource.h \
|
2012-01-27 00:29:23 +00:00
|
|
|
$(src)/Makefile
|
2010-07-30 03:46:33 +00:00
|
|
|
$(call cmd,make-rlim)
|