]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
apparmor: deny writes to most of /proc/sys (v2)
authorSerge Hallyn <serge.hallyn@ubuntu.com>
Tue, 1 Apr 2014 23:03:07 +0000 (01:03 +0200)
committerSerge Hallyn <serge.hallyn@ubuntu.com>
Wed, 2 Apr 2014 14:54:54 +0000 (09:54 -0500)
Allow writes to kernel.shm*, net.*, kernel/domainname and
kernel/hostname,

Also fix a bug in the lxc-generate-aa-rules.py script in a
path which wasn't being exercised before, which returned a
path element rather than its child.

Changelog (v2): remove trailing / from block path

Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
config/apparmor/abstractions/container-base
config/apparmor/container-rules
config/apparmor/container-rules.base
config/apparmor/lxc-generate-aa-rules.py

index d094aab7bc94e8799b1a98c7a842b9ed26aed5ad..6a44e43e91aa32ad744f76ef92966924c2c607d4 100644 (file)
   mount options=(move) /sys/fs/cgroup/cgmanager/ -> /sys/fs/cgroup/cgmanager.lower/,
 
   # generated by: lxc-generate-aa-rules.py container-rules.base
-  deny /proc/sys/kernel/[^s]*{,/**} wklx,
+  deny /proc/sys/[^kn]*{,/**} wklx,
+  deny /proc/sys/k[^e]*{,/**} wklx,
+  deny /proc/sys/ke[^r]*{,/**} wklx,
+  deny /proc/sys/ker[^n]*{,/**} wklx,
+  deny /proc/sys/kern[^e]*{,/**} wklx,
+  deny /proc/sys/kerne[^l]*{,/**} wklx,
+  deny /proc/sys/kernel/[^shd]*{,/**} wklx,
+  deny /proc/sys/kernel/d[^o]*{,/**} wklx,
+  deny /proc/sys/kernel/do[^m]*{,/**} wklx,
+  deny /proc/sys/kernel/dom[^a]*{,/**} wklx,
+  deny /proc/sys/kernel/doma[^i]*{,/**} wklx,
+  deny /proc/sys/kernel/domai[^n]*{,/**} wklx,
+  deny /proc/sys/kernel/domain[^n]*{,/**} wklx,
+  deny /proc/sys/kernel/domainn[^a]*{,/**} wklx,
+  deny /proc/sys/kernel/domainna[^m]*{,/**} wklx,
+  deny /proc/sys/kernel/domainnam[^e]*{,/**} wklx,
+  deny /proc/sys/kernel/domainname?*{,/**} wklx,
+  deny /proc/sys/kernel/h[^o]*{,/**} wklx,
+  deny /proc/sys/kernel/ho[^s]*{,/**} wklx,
+  deny /proc/sys/kernel/hos[^t]*{,/**} wklx,
+  deny /proc/sys/kernel/host[^n]*{,/**} wklx,
+  deny /proc/sys/kernel/hostn[^a]*{,/**} wklx,
+  deny /proc/sys/kernel/hostna[^m]*{,/**} wklx,
+  deny /proc/sys/kernel/hostnam[^e]*{,/**} wklx,
+  deny /proc/sys/kernel/hostname?*{,/**} wklx,
   deny /proc/sys/kernel/s[^h]*{,/**} wklx,
   deny /proc/sys/kernel/sh[^m]*{,/**} wklx,
   deny /proc/sys/kernel/shm*/** wklx,
+  deny /proc/sys/kernel?*{,/**} wklx,
+  deny /proc/sys/n[^e]*{,/**} wklx,
+  deny /proc/sys/ne[^t]*{,/**} wklx,
+  deny /proc/sys/net?*{,/**} wklx,
   deny /sys/[^fdc]*{,/**} wklx,
   deny /sys/c[^l]*{,/**} wklx,
   deny /sys/cl[^a]*{,/**} wklx,
index 47dd4c27ca40a1fa36be6aa92df67754a5760f94..2c8c0b494a2a4e52e265dea65f945ff3cdc771df 100644 (file)
@@ -1,8 +1,36 @@
   # generated by: lxc-generate-aa-rules.py container-rules.base
-  deny /proc/sys/kernel/[^s]*{,/**} wklx,
+  deny /proc/sys/[^kn]*{,/**} wklx,
+  deny /proc/sys/k[^e]*{,/**} wklx,
+  deny /proc/sys/ke[^r]*{,/**} wklx,
+  deny /proc/sys/ker[^n]*{,/**} wklx,
+  deny /proc/sys/kern[^e]*{,/**} wklx,
+  deny /proc/sys/kerne[^l]*{,/**} wklx,
+  deny /proc/sys/kernel/[^shd]*{,/**} wklx,
+  deny /proc/sys/kernel/d[^o]*{,/**} wklx,
+  deny /proc/sys/kernel/do[^m]*{,/**} wklx,
+  deny /proc/sys/kernel/dom[^a]*{,/**} wklx,
+  deny /proc/sys/kernel/doma[^i]*{,/**} wklx,
+  deny /proc/sys/kernel/domai[^n]*{,/**} wklx,
+  deny /proc/sys/kernel/domain[^n]*{,/**} wklx,
+  deny /proc/sys/kernel/domainn[^a]*{,/**} wklx,
+  deny /proc/sys/kernel/domainna[^m]*{,/**} wklx,
+  deny /proc/sys/kernel/domainnam[^e]*{,/**} wklx,
+  deny /proc/sys/kernel/domainname?*{,/**} wklx,
+  deny /proc/sys/kernel/h[^o]*{,/**} wklx,
+  deny /proc/sys/kernel/ho[^s]*{,/**} wklx,
+  deny /proc/sys/kernel/hos[^t]*{,/**} wklx,
+  deny /proc/sys/kernel/host[^n]*{,/**} wklx,
+  deny /proc/sys/kernel/hostn[^a]*{,/**} wklx,
+  deny /proc/sys/kernel/hostna[^m]*{,/**} wklx,
+  deny /proc/sys/kernel/hostnam[^e]*{,/**} wklx,
+  deny /proc/sys/kernel/hostname?*{,/**} wklx,
   deny /proc/sys/kernel/s[^h]*{,/**} wklx,
   deny /proc/sys/kernel/sh[^m]*{,/**} wklx,
   deny /proc/sys/kernel/shm*/** wklx,
+  deny /proc/sys/kernel?*{,/**} wklx,
+  deny /proc/sys/n[^e]*{,/**} wklx,
+  deny /proc/sys/ne[^t]*{,/**} wklx,
+  deny /proc/sys/net?*{,/**} wklx,
   deny /sys/[^fdc]*{,/**} wklx,
   deny /sys/c[^l]*{,/**} wklx,
   deny /sys/cl[^a]*{,/**} wklx,
index e16d874d6a9695f0c9c80e0351fd310801893c5b..615f01519b4afe124b9d9d568198c1763fe49b73 100644 (file)
@@ -6,5 +6,8 @@ block /sys
 allow /sys/fs/cgroup/**
 allow /sys/devices/virtual/net/**
 allow /sys/class/net/**
-block /proc/sys/kernel
+block /proc/sys
 allow /proc/sys/kernel/shm*
+allow /proc/sys/kernel/hostname
+allow /proc/sys/kernel/domainname
+allow /proc/sys/net/**
index 34518cf73d414dade2a981b622df4ea9120a81e8..683f5fc6e0eaaade52eb7b42f6693281f700c131 100755 (executable)
@@ -25,11 +25,14 @@ def add_block(path):
             return
     blocks.append({'path': path.strip(), 'children': []})
 
-
+# @prev is an array of dicts which containing 'path' and
+# 'children'.  @path is a string.  We are looking for an entry
+# in @prev which contains @path, and will return its
+# children array.
 def child_get(prev, path):
     for p in prev:
         if p['path'] == path:
-            return p
+            return p['children']
     return None
 
 
@@ -40,6 +43,7 @@ def add_allow(path):
         l = len(b['path'])
         if len(path) <= l:
             continue
+        # TODO - should we find the longest match?
         if path[0:l] == b['path']:
             found = b
             break