apparmor check version on deb install
| 1 | 1 |
deleted file mode 100644 |
| ... | ... |
@@ -1,241 +0,0 @@ |
| 1 |
-@{DOCKER_GRAPH_PATH}=/var/lib/docker
|
|
| 2 |
- |
|
| 3 |
-profile /usr/bin/docker (attach_disconnected, complain) {
|
|
| 4 |
- # Prevent following links to these files during container setup. |
|
| 5 |
- deny /etc/** mkl, |
|
| 6 |
- deny /dev/** kl, |
|
| 7 |
- deny /sys/** mkl, |
|
| 8 |
- deny /proc/** mkl, |
|
| 9 |
- |
|
| 10 |
- mount -> @{DOCKER_GRAPH_PATH}/**,
|
|
| 11 |
- mount -> /, |
|
| 12 |
- mount -> /proc/**, |
|
| 13 |
- mount -> /sys/**, |
|
| 14 |
- mount -> /run/docker/netns/**, |
|
| 15 |
- |
|
| 16 |
- umount, |
|
| 17 |
- pivot_root, |
|
| 18 |
- signal (receive) peer=@{profile_name},
|
|
| 19 |
- signal (receive) peer=unconfined, |
|
| 20 |
- signal (send), |
|
| 21 |
- ipc rw, |
|
| 22 |
- network, |
|
| 23 |
- capability, |
|
| 24 |
- owner /** rw, |
|
| 25 |
- @{DOCKER_GRAPH_PATH}/** rwl,
|
|
| 26 |
- @{DOCKER_GRAPH_PATH}/linkgraph.db k,
|
|
| 27 |
- @{DOCKER_GRAPH_PATH}/network/files/boltdb.db k,
|
|
| 28 |
- |
|
| 29 |
- # For non-root client use: |
|
| 30 |
- /dev/urandom r, |
|
| 31 |
- /run/docker.sock rw, |
|
| 32 |
- /proc/** r, |
|
| 33 |
- /sys/kernel/mm/hugepages/ r, |
|
| 34 |
- /etc/localtime r, |
|
| 35 |
- /etc/ld.so.cache r, |
|
| 36 |
- |
|
| 37 |
- ptrace peer=@{profile_name},
|
|
| 38 |
- ptrace (read) peer=docker-default, |
|
| 39 |
- deny ptrace (trace) peer=docker-default, |
|
| 40 |
- deny ptrace peer=/usr/bin/docker///bin/ps, |
|
| 41 |
- |
|
| 42 |
- /usr/lib/** rm, |
|
| 43 |
- /lib/** rm, |
|
| 44 |
- |
|
| 45 |
- /usr/bin/docker pix, |
|
| 46 |
- /sbin/xtables-multi rCx, |
|
| 47 |
- /sbin/iptables rCx, |
|
| 48 |
- /sbin/modprobe rCx, |
|
| 49 |
- /sbin/auplink rCx, |
|
| 50 |
- /sbin/mke2fs rCx, |
|
| 51 |
- /sbin/tune2fs rCx, |
|
| 52 |
- /sbin/blkid rCx, |
|
| 53 |
- /bin/kmod rCx, |
|
| 54 |
- /usr/bin/xz rCx, |
|
| 55 |
- /bin/ps rCx, |
|
| 56 |
- /bin/cat rCx, |
|
| 57 |
- /sbin/zfs rCx, |
|
| 58 |
- /sbin/apparmor_parser rCx, |
|
| 59 |
- |
|
| 60 |
- # Transitions |
|
| 61 |
- change_profile -> docker-*, |
|
| 62 |
- change_profile -> unconfined, |
|
| 63 |
- |
|
| 64 |
- profile /bin/cat (complain) {
|
|
| 65 |
- /etc/ld.so.cache r, |
|
| 66 |
- /lib/** rm, |
|
| 67 |
- /dev/null rw, |
|
| 68 |
- /proc r, |
|
| 69 |
- /bin/cat mr, |
|
| 70 |
- |
|
| 71 |
- # For reading in 'docker stats': |
|
| 72 |
- /proc/[0-9]*/net/dev r, |
|
| 73 |
- } |
|
| 74 |
- profile /bin/ps (complain) {
|
|
| 75 |
- /etc/ld.so.cache r, |
|
| 76 |
- /etc/localtime r, |
|
| 77 |
- /etc/passwd r, |
|
| 78 |
- /etc/nsswitch.conf r, |
|
| 79 |
- /lib/** rm, |
|
| 80 |
- /proc/[0-9]*/** r, |
|
| 81 |
- /dev/null rw, |
|
| 82 |
- /bin/ps mr, |
|
| 83 |
- |
|
| 84 |
- # We don't need ptrace so we'll deny and ignore the error. |
|
| 85 |
- deny ptrace (read, trace), |
|
| 86 |
- |
|
| 87 |
- # Quiet dac_override denials |
|
| 88 |
- deny capability dac_override, |
|
| 89 |
- deny capability dac_read_search, |
|
| 90 |
- deny capability sys_ptrace, |
|
| 91 |
- |
|
| 92 |
- /dev/tty r, |
|
| 93 |
- /proc/stat r, |
|
| 94 |
- /proc/cpuinfo r, |
|
| 95 |
- /proc/meminfo r, |
|
| 96 |
- /proc/uptime r, |
|
| 97 |
- /sys/devices/system/cpu/online r, |
|
| 98 |
- /proc/sys/kernel/pid_max r, |
|
| 99 |
- /proc/ r, |
|
| 100 |
- /proc/tty/drivers r, |
|
| 101 |
- } |
|
| 102 |
- profile /sbin/iptables (complain) {
|
|
| 103 |
- signal (receive) peer=/usr/bin/docker, |
|
| 104 |
- capability net_admin, |
|
| 105 |
- } |
|
| 106 |
- profile /sbin/auplink flags=(attach_disconnected, complain) {
|
|
| 107 |
- signal (receive) peer=/usr/bin/docker, |
|
| 108 |
- capability sys_admin, |
|
| 109 |
- capability dac_override, |
|
| 110 |
- |
|
| 111 |
- @{DOCKER_GRAPH_PATH}/aufs/** rw,
|
|
| 112 |
- @{DOCKER_GRAPH_PATH}/tmp/** rw,
|
|
| 113 |
- # For user namespaces: |
|
| 114 |
- @{DOCKER_GRAPH_PATH}/[0-9]*.[0-9]*/** rw,
|
|
| 115 |
- |
|
| 116 |
- /sys/fs/aufs/** r, |
|
| 117 |
- /lib/** rm, |
|
| 118 |
- /apparmor/.null r, |
|
| 119 |
- /dev/null rw, |
|
| 120 |
- /etc/ld.so.cache r, |
|
| 121 |
- /sbin/auplink rm, |
|
| 122 |
- /proc/fs/aufs/** rw, |
|
| 123 |
- /proc/[0-9]*/mounts rw, |
|
| 124 |
- } |
|
| 125 |
- profile /sbin/modprobe /bin/kmod (complain) {
|
|
| 126 |
- signal (receive) peer=/usr/bin/docker, |
|
| 127 |
- capability sys_module, |
|
| 128 |
- /etc/ld.so.cache r, |
|
| 129 |
- /lib/** rm, |
|
| 130 |
- /dev/null rw, |
|
| 131 |
- /apparmor/.null rw, |
|
| 132 |
- /sbin/modprobe rm, |
|
| 133 |
- /bin/kmod rm, |
|
| 134 |
- /proc/cmdline r, |
|
| 135 |
- /sys/module/** r, |
|
| 136 |
- /etc/modprobe.d{/,/**} r,
|
|
| 137 |
- } |
|
| 138 |
- # xz works via pipes, so we do not need access to the filesystem. |
|
| 139 |
- profile /usr/bin/xz (complain) {
|
|
| 140 |
- signal (receive) peer=/usr/bin/docker, |
|
| 141 |
- /etc/ld.so.cache r, |
|
| 142 |
- /lib/** rm, |
|
| 143 |
- /usr/bin/xz rm, |
|
| 144 |
- deny /proc/** rw, |
|
| 145 |
- deny /sys/** rw, |
|
| 146 |
- } |
|
| 147 |
- profile /sbin/xtables-multi (attach_disconnected, complain) {
|
|
| 148 |
- /etc/ld.so.cache r, |
|
| 149 |
- /lib/** rm, |
|
| 150 |
- /sbin/xtables-multi rm, |
|
| 151 |
- /apparmor/.null w, |
|
| 152 |
- /dev/null rw, |
|
| 153 |
- |
|
| 154 |
- /proc r, |
|
| 155 |
- |
|
| 156 |
- capability net_raw, |
|
| 157 |
- capability net_admin, |
|
| 158 |
- network raw, |
|
| 159 |
- } |
|
| 160 |
- profile /sbin/zfs (attach_disconnected, complain) {
|
|
| 161 |
- file, |
|
| 162 |
- capability, |
|
| 163 |
- } |
|
| 164 |
- profile /sbin/mke2fs (complain) {
|
|
| 165 |
- /sbin/mke2fs rm, |
|
| 166 |
- |
|
| 167 |
- /lib/** rm, |
|
| 168 |
- |
|
| 169 |
- /apparmor/.null w, |
|
| 170 |
- |
|
| 171 |
- /etc/ld.so.cache r, |
|
| 172 |
- /etc/mke2fs.conf r, |
|
| 173 |
- /etc/mtab r, |
|
| 174 |
- |
|
| 175 |
- /dev/dm-* rw, |
|
| 176 |
- /dev/urandom r, |
|
| 177 |
- /dev/null rw, |
|
| 178 |
- |
|
| 179 |
- /proc/swaps r, |
|
| 180 |
- /proc/[0-9]*/mounts r, |
|
| 181 |
- } |
|
| 182 |
- profile /sbin/tune2fs (complain) {
|
|
| 183 |
- /sbin/tune2fs rm, |
|
| 184 |
- |
|
| 185 |
- /lib/** rm, |
|
| 186 |
- |
|
| 187 |
- /apparmor/.null w, |
|
| 188 |
- |
|
| 189 |
- /etc/blkid.conf r, |
|
| 190 |
- /etc/mtab r, |
|
| 191 |
- /etc/ld.so.cache r, |
|
| 192 |
- |
|
| 193 |
- /dev/null rw, |
|
| 194 |
- /dev/.blkid.tab r, |
|
| 195 |
- /dev/dm-* rw, |
|
| 196 |
- |
|
| 197 |
- /proc/swaps r, |
|
| 198 |
- /proc/[0-9]*/mounts r, |
|
| 199 |
- } |
|
| 200 |
- profile /sbin/blkid (complain) {
|
|
| 201 |
- /sbin/blkid rm, |
|
| 202 |
- |
|
| 203 |
- /lib/** rm, |
|
| 204 |
- /apparmor/.null w, |
|
| 205 |
- |
|
| 206 |
- /etc/ld.so.cache r, |
|
| 207 |
- /etc/blkid.conf r, |
|
| 208 |
- |
|
| 209 |
- /dev/null rw, |
|
| 210 |
- /dev/.blkid.tab rl, |
|
| 211 |
- /dev/.blkid.tab* rwl, |
|
| 212 |
- /dev/dm-* r, |
|
| 213 |
- |
|
| 214 |
- /sys/devices/virtual/block/** r, |
|
| 215 |
- |
|
| 216 |
- capability mknod, |
|
| 217 |
- |
|
| 218 |
- mount -> @{DOCKER_GRAPH_PATH}/**,
|
|
| 219 |
- } |
|
| 220 |
- profile /sbin/apparmor_parser (complain) {
|
|
| 221 |
- /sbin/apparmor_parser rm, |
|
| 222 |
- |
|
| 223 |
- /lib/** rm, |
|
| 224 |
- |
|
| 225 |
- /etc/ld.so.cache r, |
|
| 226 |
- /etc/apparmor/** r, |
|
| 227 |
- /etc/apparmor.d/** r, |
|
| 228 |
- /etc/apparmor.d/cache/** w, |
|
| 229 |
- |
|
| 230 |
- /dev/null rw, |
|
| 231 |
- |
|
| 232 |
- /sys/kernel/security/apparmor/** r, |
|
| 233 |
- /sys/kernel/security/apparmor/.replace w, |
|
| 234 |
- |
|
| 235 |
- /proc/[0-9]*/mounts r, |
|
| 236 |
- /proc/sys/kernel/osrelease r, |
|
| 237 |
- /proc r, |
|
| 238 |
- |
|
| 239 |
- capability mac_admin, |
|
| 240 |
- } |
|
| 241 |
-} |
| 242 | 1 |
new file mode 100644 |
| ... | ... |
@@ -0,0 +1,85 @@ |
| 0 |
+package main |
|
| 1 |
+ |
|
| 2 |
+import ( |
|
| 3 |
+ "fmt" |
|
| 4 |
+ "log" |
|
| 5 |
+ "os" |
|
| 6 |
+ "os/exec" |
|
| 7 |
+ "path" |
|
| 8 |
+ "strconv" |
|
| 9 |
+ "strings" |
|
| 10 |
+ "text/template" |
|
| 11 |
+) |
|
| 12 |
+ |
|
| 13 |
+type profileData struct {
|
|
| 14 |
+ MajorVersion int |
|
| 15 |
+ MinorVersion int |
|
| 16 |
+} |
|
| 17 |
+ |
|
| 18 |
+func main() {
|
|
| 19 |
+ if len(os.Args) < 2 {
|
|
| 20 |
+ log.Fatal("pass a filename to save the profile in.")
|
|
| 21 |
+ } |
|
| 22 |
+ |
|
| 23 |
+ // parse the arg |
|
| 24 |
+ apparmorProfilePath := os.Args[1] |
|
| 25 |
+ |
|
| 26 |
+ // get the apparmor_version version |
|
| 27 |
+ cmd := exec.Command("/sbin/apparmor_parser", "--version")
|
|
| 28 |
+ |
|
| 29 |
+ output, err := cmd.CombinedOutput() |
|
| 30 |
+ if err != nil {
|
|
| 31 |
+ log.Fatalf("getting apparmor_parser version failed: %s (%s)", err, output)
|
|
| 32 |
+ } |
|
| 33 |
+ |
|
| 34 |
+ // parse the version from the output |
|
| 35 |
+ // output is in the form of the following: |
|
| 36 |
+ // AppArmor parser version 2.9.1 |
|
| 37 |
+ // Copyright (C) 1999-2008 Novell Inc. |
|
| 38 |
+ // Copyright 2009-2012 Canonical Ltd. |
|
| 39 |
+ lines := strings.SplitN(string(output), "\n", 2) |
|
| 40 |
+ words := strings.Split(lines[0], " ") |
|
| 41 |
+ version := words[len(words)-1] |
|
| 42 |
+ // split by major minor version |
|
| 43 |
+ v := strings.Split(version, ".") |
|
| 44 |
+ if len(v) < 2 {
|
|
| 45 |
+ log.Fatalf("parsing major minor version failed for %q", version)
|
|
| 46 |
+ } |
|
| 47 |
+ |
|
| 48 |
+ majorVersion, err := strconv.Atoi(v[0]) |
|
| 49 |
+ if err != nil {
|
|
| 50 |
+ log.Fatal(err) |
|
| 51 |
+ } |
|
| 52 |
+ minorVersion, err := strconv.Atoi(v[1]) |
|
| 53 |
+ if err != nil {
|
|
| 54 |
+ log.Fatal(err) |
|
| 55 |
+ } |
|
| 56 |
+ data := profileData{
|
|
| 57 |
+ MajorVersion: majorVersion, |
|
| 58 |
+ MinorVersion: minorVersion, |
|
| 59 |
+ } |
|
| 60 |
+ fmt.Printf("apparmor_parser is of version %+v\n", data)
|
|
| 61 |
+ |
|
| 62 |
+ // parse the template |
|
| 63 |
+ compiled, err := template.New("apparmor_profile").Parse(dockerProfileTemplate)
|
|
| 64 |
+ if err != nil {
|
|
| 65 |
+ log.Fatalf("parsing template failed: %v", err)
|
|
| 66 |
+ } |
|
| 67 |
+ |
|
| 68 |
+ // make sure /etc/apparmor.d exists |
|
| 69 |
+ if err := os.MkdirAll(path.Dir(apparmorProfilePath), 0755); err != nil {
|
|
| 70 |
+ log.Fatal(err) |
|
| 71 |
+ } |
|
| 72 |
+ |
|
| 73 |
+ f, err := os.OpenFile(apparmorProfilePath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644) |
|
| 74 |
+ if err != nil {
|
|
| 75 |
+ log.Fatal(err) |
|
| 76 |
+ } |
|
| 77 |
+ defer f.Close() |
|
| 78 |
+ |
|
| 79 |
+ if err := compiled.Execute(f, data); err != nil {
|
|
| 80 |
+ log.Fatalf("executing template failed: %v", err)
|
|
| 81 |
+ } |
|
| 82 |
+ |
|
| 83 |
+ fmt.Printf("created apparmor profile for version %+v at %q\n", data, apparmorProfilePath)
|
|
| 84 |
+} |
| 0 | 85 |
new file mode 100644 |
| ... | ... |
@@ -0,0 +1,259 @@ |
| 0 |
+package main |
|
| 1 |
+ |
|
| 2 |
+const dockerProfileTemplate = `@{DOCKER_GRAPH_PATH}=/var/lib/docker
|
|
| 3 |
+ |
|
| 4 |
+profile /usr/bin/docker (attach_disconnected, complain) {
|
|
| 5 |
+ # Prevent following links to these files during container setup. |
|
| 6 |
+ deny /etc/** mkl, |
|
| 7 |
+ deny /dev/** kl, |
|
| 8 |
+ deny /sys/** mkl, |
|
| 9 |
+ deny /proc/** mkl, |
|
| 10 |
+ |
|
| 11 |
+ mount -> @{DOCKER_GRAPH_PATH}/**,
|
|
| 12 |
+ mount -> /, |
|
| 13 |
+ mount -> /proc/**, |
|
| 14 |
+ mount -> /sys/**, |
|
| 15 |
+ mount -> /run/docker/netns/**, |
|
| 16 |
+ |
|
| 17 |
+ umount, |
|
| 18 |
+ pivot_root, |
|
| 19 |
+{{if ge .MajorVersion 2}}{{if ge .MinorVersion 9}}
|
|
| 20 |
+ signal (receive) peer=@{profile_name},
|
|
| 21 |
+ signal (receive) peer=unconfined, |
|
| 22 |
+ signal (send), |
|
| 23 |
+{{end}}{{end}}
|
|
| 24 |
+ ipc rw, |
|
| 25 |
+ network, |
|
| 26 |
+ capability, |
|
| 27 |
+ owner /** rw, |
|
| 28 |
+ @{DOCKER_GRAPH_PATH}/** rwl,
|
|
| 29 |
+ @{DOCKER_GRAPH_PATH}/linkgraph.db k,
|
|
| 30 |
+ @{DOCKER_GRAPH_PATH}/network/files/boltdb.db k,
|
|
| 31 |
+ |
|
| 32 |
+ # For non-root client use: |
|
| 33 |
+ /dev/urandom r, |
|
| 34 |
+ /run/docker.sock rw, |
|
| 35 |
+ /proc/** r, |
|
| 36 |
+ /sys/kernel/mm/hugepages/ r, |
|
| 37 |
+ /etc/localtime r, |
|
| 38 |
+ /etc/ld.so.cache r, |
|
| 39 |
+ |
|
| 40 |
+{{if ge .MajorVersion 2}}{{if ge .MinorVersion 9}}
|
|
| 41 |
+ ptrace peer=@{profile_name},
|
|
| 42 |
+ ptrace (read) peer=docker-default, |
|
| 43 |
+ deny ptrace (trace) peer=docker-default, |
|
| 44 |
+ deny ptrace peer=/usr/bin/docker///bin/ps, |
|
| 45 |
+{{end}}{{end}}
|
|
| 46 |
+ |
|
| 47 |
+ /usr/lib/** rm, |
|
| 48 |
+ /lib/** rm, |
|
| 49 |
+ |
|
| 50 |
+ /usr/bin/docker pix, |
|
| 51 |
+ /sbin/xtables-multi rCx, |
|
| 52 |
+ /sbin/iptables rCx, |
|
| 53 |
+ /sbin/modprobe rCx, |
|
| 54 |
+ /sbin/auplink rCx, |
|
| 55 |
+ /sbin/mke2fs rCx, |
|
| 56 |
+ /sbin/tune2fs rCx, |
|
| 57 |
+ /sbin/blkid rCx, |
|
| 58 |
+ /bin/kmod rCx, |
|
| 59 |
+ /usr/bin/xz rCx, |
|
| 60 |
+ /bin/ps rCx, |
|
| 61 |
+ /bin/cat rCx, |
|
| 62 |
+ /sbin/zfs rCx, |
|
| 63 |
+ /sbin/apparmor_parser rCx, |
|
| 64 |
+ |
|
| 65 |
+{{if ge .MajorVersion 2}}{{if ge .MinorVersion 9}}
|
|
| 66 |
+ # Transitions |
|
| 67 |
+ change_profile -> docker-*, |
|
| 68 |
+ change_profile -> unconfined, |
|
| 69 |
+{{end}}{{end}}
|
|
| 70 |
+ |
|
| 71 |
+ profile /bin/cat (complain) {
|
|
| 72 |
+ /etc/ld.so.cache r, |
|
| 73 |
+ /lib/** rm, |
|
| 74 |
+ /dev/null rw, |
|
| 75 |
+ /proc r, |
|
| 76 |
+ /bin/cat mr, |
|
| 77 |
+ |
|
| 78 |
+ # For reading in 'docker stats': |
|
| 79 |
+ /proc/[0-9]*/net/dev r, |
|
| 80 |
+ } |
|
| 81 |
+ profile /bin/ps (complain) {
|
|
| 82 |
+ /etc/ld.so.cache r, |
|
| 83 |
+ /etc/localtime r, |
|
| 84 |
+ /etc/passwd r, |
|
| 85 |
+ /etc/nsswitch.conf r, |
|
| 86 |
+ /lib/** rm, |
|
| 87 |
+ /proc/[0-9]*/** r, |
|
| 88 |
+ /dev/null rw, |
|
| 89 |
+ /bin/ps mr, |
|
| 90 |
+ |
|
| 91 |
+{{if ge .MajorVersion 2}}{{if ge .MinorVersion 9}}
|
|
| 92 |
+ # We don't need ptrace so we'll deny and ignore the error. |
|
| 93 |
+ deny ptrace (read, trace), |
|
| 94 |
+{{end}}{{end}}
|
|
| 95 |
+ |
|
| 96 |
+ # Quiet dac_override denials |
|
| 97 |
+ deny capability dac_override, |
|
| 98 |
+ deny capability dac_read_search, |
|
| 99 |
+ deny capability sys_ptrace, |
|
| 100 |
+ |
|
| 101 |
+ /dev/tty r, |
|
| 102 |
+ /proc/stat r, |
|
| 103 |
+ /proc/cpuinfo r, |
|
| 104 |
+ /proc/meminfo r, |
|
| 105 |
+ /proc/uptime r, |
|
| 106 |
+ /sys/devices/system/cpu/online r, |
|
| 107 |
+ /proc/sys/kernel/pid_max r, |
|
| 108 |
+ /proc/ r, |
|
| 109 |
+ /proc/tty/drivers r, |
|
| 110 |
+ } |
|
| 111 |
+ profile /sbin/iptables (complain) {
|
|
| 112 |
+{{if ge .MajorVersion 2}}{{if ge .MinorVersion 9}}
|
|
| 113 |
+ signal (receive) peer=/usr/bin/docker, |
|
| 114 |
+{{end}}{{end}}
|
|
| 115 |
+ capability net_admin, |
|
| 116 |
+ } |
|
| 117 |
+ profile /sbin/auplink flags=(attach_disconnected, complain) {
|
|
| 118 |
+{{if ge .MajorVersion 2}}{{if ge .MinorVersion 9}}
|
|
| 119 |
+ signal (receive) peer=/usr/bin/docker, |
|
| 120 |
+{{end}}{{end}}
|
|
| 121 |
+ capability sys_admin, |
|
| 122 |
+ capability dac_override, |
|
| 123 |
+ |
|
| 124 |
+ @{DOCKER_GRAPH_PATH}/aufs/** rw,
|
|
| 125 |
+ @{DOCKER_GRAPH_PATH}/tmp/** rw,
|
|
| 126 |
+ # For user namespaces: |
|
| 127 |
+ @{DOCKER_GRAPH_PATH}/[0-9]*.[0-9]*/** rw,
|
|
| 128 |
+ |
|
| 129 |
+ /sys/fs/aufs/** r, |
|
| 130 |
+ /lib/** rm, |
|
| 131 |
+ /apparmor/.null r, |
|
| 132 |
+ /dev/null rw, |
|
| 133 |
+ /etc/ld.so.cache r, |
|
| 134 |
+ /sbin/auplink rm, |
|
| 135 |
+ /proc/fs/aufs/** rw, |
|
| 136 |
+ /proc/[0-9]*/mounts rw, |
|
| 137 |
+ } |
|
| 138 |
+ profile /sbin/modprobe /bin/kmod (complain) {
|
|
| 139 |
+{{if ge .MajorVersion 2}}{{if ge .MinorVersion 9}}
|
|
| 140 |
+ signal (receive) peer=/usr/bin/docker, |
|
| 141 |
+{{end}}{{end}}
|
|
| 142 |
+ capability sys_module, |
|
| 143 |
+ /etc/ld.so.cache r, |
|
| 144 |
+ /lib/** rm, |
|
| 145 |
+ /dev/null rw, |
|
| 146 |
+ /apparmor/.null rw, |
|
| 147 |
+ /sbin/modprobe rm, |
|
| 148 |
+ /bin/kmod rm, |
|
| 149 |
+ /proc/cmdline r, |
|
| 150 |
+ /sys/module/** r, |
|
| 151 |
+ /etc/modprobe.d{/,/**} r,
|
|
| 152 |
+ } |
|
| 153 |
+ # xz works via pipes, so we do not need access to the filesystem. |
|
| 154 |
+ profile /usr/bin/xz (complain) {
|
|
| 155 |
+{{if ge .MajorVersion 2}}{{if ge .MinorVersion 9}}
|
|
| 156 |
+ signal (receive) peer=/usr/bin/docker, |
|
| 157 |
+{{end}}{{end}}
|
|
| 158 |
+ /etc/ld.so.cache r, |
|
| 159 |
+ /lib/** rm, |
|
| 160 |
+ /usr/bin/xz rm, |
|
| 161 |
+ deny /proc/** rw, |
|
| 162 |
+ deny /sys/** rw, |
|
| 163 |
+ } |
|
| 164 |
+ profile /sbin/xtables-multi (attach_disconnected, complain) {
|
|
| 165 |
+ /etc/ld.so.cache r, |
|
| 166 |
+ /lib/** rm, |
|
| 167 |
+ /sbin/xtables-multi rm, |
|
| 168 |
+ /apparmor/.null w, |
|
| 169 |
+ /dev/null rw, |
|
| 170 |
+ |
|
| 171 |
+ /proc r, |
|
| 172 |
+ |
|
| 173 |
+ capability net_raw, |
|
| 174 |
+ capability net_admin, |
|
| 175 |
+ network raw, |
|
| 176 |
+ } |
|
| 177 |
+ profile /sbin/zfs (attach_disconnected, complain) {
|
|
| 178 |
+ file, |
|
| 179 |
+ capability, |
|
| 180 |
+ } |
|
| 181 |
+ profile /sbin/mke2fs (complain) {
|
|
| 182 |
+ /sbin/mke2fs rm, |
|
| 183 |
+ |
|
| 184 |
+ /lib/** rm, |
|
| 185 |
+ |
|
| 186 |
+ /apparmor/.null w, |
|
| 187 |
+ |
|
| 188 |
+ /etc/ld.so.cache r, |
|
| 189 |
+ /etc/mke2fs.conf r, |
|
| 190 |
+ /etc/mtab r, |
|
| 191 |
+ |
|
| 192 |
+ /dev/dm-* rw, |
|
| 193 |
+ /dev/urandom r, |
|
| 194 |
+ /dev/null rw, |
|
| 195 |
+ |
|
| 196 |
+ /proc/swaps r, |
|
| 197 |
+ /proc/[0-9]*/mounts r, |
|
| 198 |
+ } |
|
| 199 |
+ profile /sbin/tune2fs (complain) {
|
|
| 200 |
+ /sbin/tune2fs rm, |
|
| 201 |
+ |
|
| 202 |
+ /lib/** rm, |
|
| 203 |
+ |
|
| 204 |
+ /apparmor/.null w, |
|
| 205 |
+ |
|
| 206 |
+ /etc/blkid.conf r, |
|
| 207 |
+ /etc/mtab r, |
|
| 208 |
+ /etc/ld.so.cache r, |
|
| 209 |
+ |
|
| 210 |
+ /dev/null rw, |
|
| 211 |
+ /dev/.blkid.tab r, |
|
| 212 |
+ /dev/dm-* rw, |
|
| 213 |
+ |
|
| 214 |
+ /proc/swaps r, |
|
| 215 |
+ /proc/[0-9]*/mounts r, |
|
| 216 |
+ } |
|
| 217 |
+ profile /sbin/blkid (complain) {
|
|
| 218 |
+ /sbin/blkid rm, |
|
| 219 |
+ |
|
| 220 |
+ /lib/** rm, |
|
| 221 |
+ /apparmor/.null w, |
|
| 222 |
+ |
|
| 223 |
+ /etc/ld.so.cache r, |
|
| 224 |
+ /etc/blkid.conf r, |
|
| 225 |
+ |
|
| 226 |
+ /dev/null rw, |
|
| 227 |
+ /dev/.blkid.tab rl, |
|
| 228 |
+ /dev/.blkid.tab* rwl, |
|
| 229 |
+ /dev/dm-* r, |
|
| 230 |
+ |
|
| 231 |
+ /sys/devices/virtual/block/** r, |
|
| 232 |
+ |
|
| 233 |
+ capability mknod, |
|
| 234 |
+ |
|
| 235 |
+ mount -> @{DOCKER_GRAPH_PATH}/**,
|
|
| 236 |
+ } |
|
| 237 |
+ profile /sbin/apparmor_parser (complain) {
|
|
| 238 |
+ /sbin/apparmor_parser rm, |
|
| 239 |
+ |
|
| 240 |
+ /lib/** rm, |
|
| 241 |
+ |
|
| 242 |
+ /etc/ld.so.cache r, |
|
| 243 |
+ /etc/apparmor/** r, |
|
| 244 |
+ /etc/apparmor.d/** r, |
|
| 245 |
+ /etc/apparmor.d/cache/** w, |
|
| 246 |
+ |
|
| 247 |
+ /dev/null rw, |
|
| 248 |
+ |
|
| 249 |
+ /sys/kernel/security/apparmor/** r, |
|
| 250 |
+ /sys/kernel/security/apparmor/.replace w, |
|
| 251 |
+ |
|
| 252 |
+ /proc/[0-9]*/mounts r, |
|
| 253 |
+ /proc/sys/kernel/osrelease r, |
|
| 254 |
+ /proc r, |
|
| 255 |
+ |
|
| 256 |
+ capability mac_admin, |
|
| 257 |
+ } |
|
| 258 |
+}` |
| ... | ... |
@@ -4,7 +4,7 @@ |
| 4 | 4 |
|
| 5 | 5 |
FROM debian:jessie |
| 6 | 6 |
|
| 7 |
-RUN apt-get update && apt-get install -y bash-completion btrfs-tools build-essential curl ca-certificates debhelper dh-systemd git libapparmor-dev libdevmapper-dev libsqlite3-dev libsystemd-journal-dev --no-install-recommends && rm -rf /var/lib/apt/lists/* |
|
| 7 |
+RUN apt-get update && apt-get install -y apparmor bash-completion btrfs-tools build-essential curl ca-certificates debhelper dh-apparmor dh-systemd git libapparmor-dev libdevmapper-dev libsqlite3-dev libsystemd-journal-dev --no-install-recommends && rm -rf /var/lib/apt/lists/* |
|
| 8 | 8 |
|
| 9 | 9 |
ENV GO_VERSION 1.4.3 |
| 10 | 10 |
RUN curl -fSL "https://storage.googleapis.com/golang/go${GO_VERSION}.linux-amd64.tar.gz" | tar xzC /usr/local
|
| ... | ... |
@@ -4,7 +4,7 @@ |
| 4 | 4 |
|
| 5 | 5 |
FROM debian:stretch |
| 6 | 6 |
|
| 7 |
-RUN apt-get update && apt-get install -y bash-completion btrfs-tools build-essential curl ca-certificates debhelper dh-systemd git libapparmor-dev libdevmapper-dev libsqlite3-dev libsystemd-dev --no-install-recommends && rm -rf /var/lib/apt/lists/* |
|
| 7 |
+RUN apt-get update && apt-get install -y apparmor bash-completion btrfs-tools build-essential curl ca-certificates debhelper dh-apparmor dh-systemd git libapparmor-dev libdevmapper-dev libsqlite3-dev libsystemd-dev --no-install-recommends && rm -rf /var/lib/apt/lists/* |
|
| 8 | 8 |
|
| 9 | 9 |
ENV GO_VERSION 1.4.3 |
| 10 | 10 |
RUN curl -fSL "https://storage.googleapis.com/golang/go${GO_VERSION}.linux-amd64.tar.gz" | tar xzC /usr/local
|
| ... | ... |
@@ -4,7 +4,7 @@ |
| 4 | 4 |
|
| 5 | 5 |
FROM debian:wheezy-backports |
| 6 | 6 |
|
| 7 |
-RUN apt-get update && apt-get install -y bash-completion btrfs-tools/wheezy-backports build-essential curl ca-certificates debhelper dh-systemd git libapparmor-dev libdevmapper-dev libsqlite3-dev libsystemd-journal-dev --no-install-recommends && rm -rf /var/lib/apt/lists/* |
|
| 7 |
+RUN apt-get update && apt-get install -y apparmor bash-completion btrfs-tools/wheezy-backports build-essential curl ca-certificates debhelper dh-apparmor dh-systemd git libapparmor-dev libdevmapper-dev libsqlite3-dev libsystemd-journal-dev --no-install-recommends && rm -rf /var/lib/apt/lists/* |
|
| 8 | 8 |
|
| 9 | 9 |
ENV GO_VERSION 1.4.3 |
| 10 | 10 |
RUN curl -fSL "https://storage.googleapis.com/golang/go${GO_VERSION}.linux-amd64.tar.gz" | tar xzC /usr/local
|
| ... | ... |
@@ -45,11 +45,13 @@ for version in "${versions[@]}"; do
|
| 45 | 45 |
|
| 46 | 46 |
# this list is sorted alphabetically; please keep it that way |
| 47 | 47 |
packages=( |
| 48 |
+ apparmor # for apparmor_parser for testing the profile |
|
| 48 | 49 |
bash-completion # for bash-completion debhelper integration |
| 49 | 50 |
btrfs-tools # for "btrfs/ioctl.h" (and "version.h" if possible) |
| 50 | 51 |
build-essential # "essential for building Debian packages" |
| 51 | 52 |
curl ca-certificates # for downloading Go |
| 52 | 53 |
debhelper # for easy ".deb" building |
| 54 |
+ dh-apparmor # for apparmor debhelper |
|
| 53 | 55 |
dh-systemd # for systemd debhelper integration |
| 54 | 56 |
git # for "git commit" info in "docker -v" |
| 55 | 57 |
libapparmor-dev # for "sys/apparmor.h" |
| ... | ... |
@@ -4,7 +4,7 @@ |
| 4 | 4 |
|
| 5 | 5 |
FROM ubuntu:precise |
| 6 | 6 |
|
| 7 |
-RUN apt-get update && apt-get install -y bash-completion build-essential curl ca-certificates debhelper git libapparmor-dev libsqlite3-dev --no-install-recommends && rm -rf /var/lib/apt/lists/* |
|
| 7 |
+RUN apt-get update && apt-get install -y apparmor bash-completion build-essential curl ca-certificates debhelper dh-apparmor git libapparmor-dev libsqlite3-dev --no-install-recommends && rm -rf /var/lib/apt/lists/* |
|
| 8 | 8 |
|
| 9 | 9 |
ENV GO_VERSION 1.4.3 |
| 10 | 10 |
RUN curl -fSL "https://storage.googleapis.com/golang/go${GO_VERSION}.linux-amd64.tar.gz" | tar xzC /usr/local
|
| ... | ... |
@@ -4,7 +4,7 @@ |
| 4 | 4 |
|
| 5 | 5 |
FROM ubuntu:trusty |
| 6 | 6 |
|
| 7 |
-RUN apt-get update && apt-get install -y bash-completion btrfs-tools build-essential curl ca-certificates debhelper dh-systemd git libapparmor-dev libdevmapper-dev libsqlite3-dev libsystemd-journal-dev --no-install-recommends && rm -rf /var/lib/apt/lists/* |
|
| 7 |
+RUN apt-get update && apt-get install -y apparmor bash-completion btrfs-tools build-essential curl ca-certificates debhelper dh-apparmor dh-systemd git libapparmor-dev libdevmapper-dev libsqlite3-dev libsystemd-journal-dev --no-install-recommends && rm -rf /var/lib/apt/lists/* |
|
| 8 | 8 |
|
| 9 | 9 |
ENV GO_VERSION 1.4.3 |
| 10 | 10 |
RUN curl -fSL "https://storage.googleapis.com/golang/go${GO_VERSION}.linux-amd64.tar.gz" | tar xzC /usr/local
|
| ... | ... |
@@ -4,7 +4,7 @@ |
| 4 | 4 |
|
| 5 | 5 |
FROM ubuntu:vivid |
| 6 | 6 |
|
| 7 |
-RUN apt-get update && apt-get install -y bash-completion btrfs-tools build-essential curl ca-certificates debhelper dh-systemd git libapparmor-dev libdevmapper-dev libsqlite3-dev libsystemd-journal-dev --no-install-recommends && rm -rf /var/lib/apt/lists/* |
|
| 7 |
+RUN apt-get update && apt-get install -y apparmor bash-completion btrfs-tools build-essential curl ca-certificates debhelper dh-apparmor dh-systemd git libapparmor-dev libdevmapper-dev libsqlite3-dev libsystemd-journal-dev --no-install-recommends && rm -rf /var/lib/apt/lists/* |
|
| 8 | 8 |
|
| 9 | 9 |
ENV GO_VERSION 1.4.3 |
| 10 | 10 |
RUN curl -fSL "https://storage.googleapis.com/golang/go${GO_VERSION}.linux-amd64.tar.gz" | tar xzC /usr/local
|
| ... | ... |
@@ -4,7 +4,7 @@ |
| 4 | 4 |
|
| 5 | 5 |
FROM ubuntu:wily |
| 6 | 6 |
|
| 7 |
-RUN apt-get update && apt-get install -y bash-completion btrfs-tools build-essential curl ca-certificates debhelper dh-systemd git libapparmor-dev libdevmapper-dev libsqlite3-dev libsystemd-dev --no-install-recommends && rm -rf /var/lib/apt/lists/* |
|
| 7 |
+RUN apt-get update && apt-get install -y apparmor bash-completion btrfs-tools build-essential curl ca-certificates debhelper dh-apparmor dh-systemd git libapparmor-dev libdevmapper-dev libsqlite3-dev libsystemd-dev --no-install-recommends && rm -rf /var/lib/apt/lists/* |
|
| 8 | 8 |
|
| 9 | 9 |
ENV GO_VERSION 1.4.3 |
| 10 | 10 |
RUN curl -fSL "https://storage.googleapis.com/golang/go${GO_VERSION}.linux-amd64.tar.gz" | tar xzC /usr/local
|
| ... | ... |
@@ -10,3 +10,4 @@ contrib/init/systemd/docker.socket lib/systemd/system/ |
| 10 | 10 |
contrib/mk* usr/share/docker-engine/contrib/ |
| 11 | 11 |
contrib/nuke-graph-directory.sh usr/share/docker-engine/contrib/ |
| 12 | 12 |
contrib/syntax/nano/Dockerfile.nanorc usr/share/nano/ |
| 13 |
+contrib/apparmor/docker-engine etc/apparmor.d/ |
| ... | ... |
@@ -32,5 +32,9 @@ override_dh_installudev: |
| 32 | 32 |
# match our existing priority |
| 33 | 33 |
dh_installudev --priority=z80 |
| 34 | 34 |
|
| 35 |
+override_dh_install: |
|
| 36 |
+ dh_install |
|
| 37 |
+ dh_apparmor --profile-name=docker-engine -pdocker-engine |
|
| 38 |
+ |
|
| 35 | 39 |
%: |
| 36 | 40 |
dh $@ --with=bash-completion $(shell command -v dh_systemd_enable > /dev/null 2>&1 && echo --with=systemd) |
| ... | ... |
@@ -57,6 +57,8 @@ set -e |
| 57 | 57 |
echo 'ENV DOCKER_EXPERIMENTAL 1' >> "$DEST/$version/Dockerfile.build" |
| 58 | 58 |
fi |
| 59 | 59 |
cat >> "$DEST/$version/Dockerfile.build" <<-EOF |
| 60 |
+ RUN go build -o aagen contrib/apparmor/*.go \ |
|
| 61 |
+ && ./aagen contrib/apparmor/docker-engine |
|
| 60 | 62 |
RUN ln -sfv hack/make/.build-deb debian |
| 61 | 63 |
RUN { echo '$debSource (${debVersion}-0~${suite}) $suite; urgency=low'; echo; echo ' * Version: $VERSION'; echo; echo " -- $debMaintainer $debDate"; } > debian/changelog && cat >&2 debian/changelog
|
| 62 | 64 |
RUN dpkg-buildpackage -uc -us |
| 63 | 65 |
new file mode 100755 |
| ... | ... |
@@ -0,0 +1,57 @@ |
| 0 |
+#!/bin/bash |
|
| 1 |
+# This script is used for testing install.sh and that it works for |
|
| 2 |
+# each of component of our apt and yum repos |
|
| 3 |
+set -e |
|
| 4 |
+ |
|
| 5 |
+: ${DEB_DIR:="$(pwd)/bundles/$(cat VERSION)/build-deb"}
|
|
| 6 |
+ |
|
| 7 |
+if [[ ! -d "${DEB_DIR}" ]]; then
|
|
| 8 |
+ echo "you must first run `make deb` or hack/make/build-deb" |
|
| 9 |
+ exit 1 |
|
| 10 |
+fi |
|
| 11 |
+ |
|
| 12 |
+test_deb_install(){
|
|
| 13 |
+ # test for each Dockerfile in contrib/builder |
|
| 14 |
+ for dir in contrib/builder/deb/*/; do |
|
| 15 |
+ local from="$(awk 'toupper($1) == "FROM" { print $2; exit }' "$dir/Dockerfile")"
|
|
| 16 |
+ local dir=$(basename "$dir") |
|
| 17 |
+ |
|
| 18 |
+ if [[ ! -d "${DEB_DIR}/${dir}" ]]; then
|
|
| 19 |
+ echo "No deb found for ${dir}"
|
|
| 20 |
+ exit 1 |
|
| 21 |
+ fi |
|
| 22 |
+ |
|
| 23 |
+ local script=$(mktemp /tmp/install-XXXXXXXXXX.sh) |
|
| 24 |
+ cat <<-EOF > "${script}"
|
|
| 25 |
+ #!/bin/bash |
|
| 26 |
+ set -e |
|
| 27 |
+ set -x |
|
| 28 |
+ |
|
| 29 |
+ apt-get update && apt-get install -y apparmor |
|
| 30 |
+ |
|
| 31 |
+ dpkg -i /root/debs/*.deb || true |
|
| 32 |
+ |
|
| 33 |
+ apt-get install -yf |
|
| 34 |
+ |
|
| 35 |
+ /etc/init.d/apparmor start |
|
| 36 |
+ |
|
| 37 |
+ # this will do everything _except_ load the profile into the kernel |
|
| 38 |
+ ( |
|
| 39 |
+ cd /etc/apparmor.d |
|
| 40 |
+ /sbin/apparmor_parser --skip-kernel-load docker-engine |
|
| 41 |
+ ) |
|
| 42 |
+ EOF |
|
| 43 |
+ |
|
| 44 |
+ chmod +x "${script}"
|
|
| 45 |
+ |
|
| 46 |
+ echo "testing deb install for ${from}"
|
|
| 47 |
+ docker run --rm -i --privileged \ |
|
| 48 |
+ -v ${DEB_DIR}/${dir}:/root/debs \
|
|
| 49 |
+ -v ${script}:/install.sh \
|
|
| 50 |
+ ${from} /install.sh
|
|
| 51 |
+ |
|
| 52 |
+ rm -f ${script}
|
|
| 53 |
+ done |
|
| 54 |
+} |
|
| 55 |
+ |
|
| 56 |
+test_deb_install |