github.com/walkingsparrow/docker@v1.4.2-0.20151218153551-b708a2249bfa/contrib/apparmor/template.go (about)

     1  package main
     2  
     3  const dockerProfileTemplate = `@{DOCKER_GRAPH_PATH}=/var/lib/docker
     4  
     5  profile /usr/bin/docker (attach_disconnected, complain) {
     6    # Prevent following links to these files during container setup.
     7    deny /etc/** mkl,
     8    deny /dev/** kl,
     9    deny /sys/** mkl,
    10    deny /proc/** mkl,
    11  
    12    mount -> @{DOCKER_GRAPH_PATH}/**,
    13    mount -> /,
    14    mount -> /proc/**,
    15    mount -> /sys/**,
    16    mount -> /run/docker/netns/**,
    17    mount -> /.pivot_root[0-9]*/,
    18  
    19    / r,
    20  
    21    umount,
    22    pivot_root,
    23  {{if ge .MajorVersion 2}}{{if ge .MinorVersion 9}}
    24    signal (receive) peer=@{profile_name},
    25    signal (receive) peer=unconfined,
    26    signal (send),
    27  {{end}}{{end}}
    28    network,
    29    capability,
    30    owner /** rw,
    31    @{DOCKER_GRAPH_PATH}/** rwl,
    32    @{DOCKER_GRAPH_PATH}/linkgraph.db k,
    33    @{DOCKER_GRAPH_PATH}/network/files/boltdb.db k,
    34    @{DOCKER_GRAPH_PATH}/network/files/local-kv.db k,
    35    @{DOCKER_GRAPH_PATH}/[0-9]*.[0-9]*/linkgraph.db k,
    36  
    37    # For non-root client use:
    38    /dev/urandom r,
    39    /dev/null rw,
    40    /dev/pts/[0-9]* rw,
    41    /run/docker.sock rw,
    42    /proc/** r,
    43    /proc/[0-9]*/attr/exec w,
    44    /sys/kernel/mm/hugepages/ r,
    45    /etc/localtime r,
    46    /etc/ld.so.cache r,
    47    /etc/passwd r,
    48  
    49  {{if ge .MajorVersion 2}}{{if ge .MinorVersion 9}}
    50    ptrace peer=@{profile_name},
    51    ptrace (read) peer=docker-default,
    52    deny ptrace (trace) peer=docker-default,
    53    deny ptrace peer=/usr/bin/docker///bin/ps,
    54  {{end}}{{end}}
    55  
    56    /usr/lib/** rm,
    57    /lib/** rm,
    58  
    59    /usr/bin/docker pix,
    60    /sbin/xtables-multi rCx,
    61    /sbin/iptables rCx,
    62    /sbin/modprobe rCx,
    63    /sbin/auplink rCx,
    64    /sbin/mke2fs rCx,
    65    /sbin/tune2fs rCx,
    66    /sbin/blkid rCx,
    67    /bin/kmod rCx,
    68    /usr/bin/xz rCx,
    69    /bin/ps rCx,
    70    /bin/cat rCx,
    71    /sbin/zfs rCx,
    72    /sbin/apparmor_parser rCx,
    73  
    74  {{if ge .MajorVersion 2}}{{if ge .MinorVersion 9}}
    75    # Transitions
    76    change_profile -> docker-*,
    77    change_profile -> unconfined,
    78  {{end}}{{end}}
    79  
    80    profile /bin/cat (complain) {
    81      /etc/ld.so.cache r,
    82      /lib/** rm,
    83      /dev/null rw,
    84      /proc r,
    85      /bin/cat mr,
    86  
    87      # For reading in 'docker stats':
    88      /proc/[0-9]*/net/dev r,
    89    }
    90    profile /bin/ps (complain) {
    91      /etc/ld.so.cache r,
    92      /etc/localtime r,
    93      /etc/passwd r,
    94      /etc/nsswitch.conf r,
    95      /lib/** rm,
    96      /proc/[0-9]*/** r,
    97      /dev/null rw,
    98      /bin/ps mr,
    99  
   100  {{if ge .MajorVersion 2}}{{if ge .MinorVersion 9}}
   101      # We don't need ptrace so we'll deny and ignore the error.
   102      deny ptrace (read, trace),
   103  {{end}}{{end}}
   104  
   105      # Quiet dac_override denials
   106      deny capability dac_override,
   107      deny capability dac_read_search,
   108      deny capability sys_ptrace,
   109  
   110      /dev/tty r,
   111      /proc/stat r,
   112      /proc/cpuinfo r,
   113      /proc/meminfo r,
   114      /proc/uptime r,
   115      /sys/devices/system/cpu/online r,
   116      /proc/sys/kernel/pid_max r,
   117      /proc/ r,
   118      /proc/tty/drivers r,
   119    }
   120    profile /sbin/iptables (complain) {
   121  {{if ge .MajorVersion 2}}{{if ge .MinorVersion 9}}
   122      signal (receive) peer=/usr/bin/docker,
   123  {{end}}{{end}}
   124      capability net_admin,
   125    }
   126    profile /sbin/auplink flags=(attach_disconnected, complain) {
   127  {{if ge .MajorVersion 2}}{{if ge .MinorVersion 9}}
   128      signal (receive) peer=/usr/bin/docker,
   129  {{end}}{{end}}
   130      capability sys_admin,
   131      capability dac_override,
   132  
   133      @{DOCKER_GRAPH_PATH}/aufs/** rw,
   134      @{DOCKER_GRAPH_PATH}/tmp/** rw,
   135      # For user namespaces:
   136      @{DOCKER_GRAPH_PATH}/[0-9]*.[0-9]*/** rw,
   137  
   138      /sys/fs/aufs/** r,
   139      /lib/** rm,
   140      /apparmor/.null r,
   141      /dev/null rw,
   142      /etc/ld.so.cache r,
   143      /sbin/auplink rm,
   144      /proc/fs/aufs/** rw,
   145      /proc/[0-9]*/mounts rw,
   146    }
   147    profile /sbin/modprobe /bin/kmod (complain) {
   148  {{if ge .MajorVersion 2}}{{if ge .MinorVersion 9}}
   149      signal (receive) peer=/usr/bin/docker,
   150  {{end}}{{end}}
   151      capability sys_module,
   152      /etc/ld.so.cache r,
   153      /lib/** rm,
   154      /dev/null rw,
   155      /apparmor/.null rw,
   156      /sbin/modprobe rm,
   157      /bin/kmod rm,
   158      /proc/cmdline r,
   159      /sys/module/** r,
   160      /etc/modprobe.d{/,/**} r,
   161    }
   162    # xz works via pipes, so we do not need access to the filesystem.
   163    profile /usr/bin/xz (complain) {
   164  {{if ge .MajorVersion 2}}{{if ge .MinorVersion 9}}
   165      signal (receive) peer=/usr/bin/docker,
   166  {{end}}{{end}}
   167      /etc/ld.so.cache r,
   168      /lib/** rm,
   169      /usr/bin/xz rm,
   170      deny /proc/** rw,
   171      deny /sys/** rw,
   172    }
   173    profile /sbin/xtables-multi (attach_disconnected, complain) {
   174      /etc/ld.so.cache r,
   175      /lib/** rm,
   176      /sbin/xtables-multi rm,
   177      /apparmor/.null w,
   178      /dev/null rw,
   179  
   180      /proc r,
   181  
   182      capability net_raw,
   183      capability net_admin,
   184      network raw,
   185    }
   186    profile /sbin/zfs (attach_disconnected, complain) {
   187      file,
   188      capability,
   189    }
   190    profile /sbin/mke2fs (complain) {
   191      /sbin/mke2fs rm,
   192  
   193      /lib/** rm,
   194  
   195      /apparmor/.null w,
   196  
   197      /etc/ld.so.cache r,
   198      /etc/mke2fs.conf r,
   199      /etc/mtab r,
   200  
   201      /dev/dm-* rw,
   202      /dev/urandom r,
   203      /dev/null rw,
   204  
   205      /proc/swaps r,
   206      /proc/[0-9]*/mounts r,
   207    }
   208    profile /sbin/tune2fs (complain) {
   209      /sbin/tune2fs rm,
   210  
   211      /lib/** rm,
   212  
   213      /apparmor/.null w,
   214  
   215      /etc/blkid.conf r,
   216      /etc/mtab r,
   217      /etc/ld.so.cache r,
   218  
   219      /dev/null rw,
   220      /dev/.blkid.tab r,
   221      /dev/dm-* rw,
   222  
   223      /proc/swaps r,
   224      /proc/[0-9]*/mounts r,
   225    }
   226    profile /sbin/blkid (complain) {
   227      /sbin/blkid rm,
   228  
   229      /lib/** rm,
   230      /apparmor/.null w,
   231  
   232      /etc/ld.so.cache r,
   233      /etc/blkid.conf r,
   234  
   235      /dev/null rw,
   236      /dev/.blkid.tab rl,
   237      /dev/.blkid.tab* rwl,
   238      /dev/dm-* r,
   239  
   240      /sys/devices/virtual/block/** r,
   241  
   242      capability mknod,
   243  
   244      mount -> @{DOCKER_GRAPH_PATH}/**,
   245    }
   246    profile /sbin/apparmor_parser (complain) {
   247      /sbin/apparmor_parser rm,
   248  
   249      /lib/** rm,
   250  
   251      /etc/ld.so.cache r,
   252      /etc/apparmor/** r,
   253      /etc/apparmor.d/** r,
   254      /etc/apparmor.d/cache/** w,
   255  
   256      /dev/null rw,
   257  
   258      /sys/kernel/security/apparmor/** r,
   259      /sys/kernel/security/apparmor/.replace w,
   260  
   261      /proc/[0-9]*/mounts r,
   262      /proc/sys/kernel/osrelease r,
   263      /proc r,
   264  
   265      capability mac_admin,
   266    }
   267  }`