default_template_linux.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. package template
  2. import (
  3. "syscall"
  4. "github.com/opencontainers/runc/libcontainer/apparmor"
  5. "github.com/opencontainers/runc/libcontainer/configs"
  6. )
  7. const defaultMountFlags = syscall.MS_NOEXEC | syscall.MS_NOSUID | syscall.MS_NODEV
  8. // SystemdCgroups indicates whether systemd cgroup implemenation is in use or not
  9. var SystemdCgroups = false
  10. // New returns the docker default configuration for libcontainer
  11. func New() *configs.Config {
  12. container := &configs.Config{
  13. Capabilities: []string{
  14. "CHOWN",
  15. "DAC_OVERRIDE",
  16. "FSETID",
  17. "FOWNER",
  18. "MKNOD",
  19. "NET_RAW",
  20. "SETGID",
  21. "SETUID",
  22. "SETFCAP",
  23. "SETPCAP",
  24. "NET_BIND_SERVICE",
  25. "SYS_CHROOT",
  26. "KILL",
  27. "AUDIT_WRITE",
  28. },
  29. Namespaces: configs.Namespaces([]configs.Namespace{
  30. {Type: "NEWNS"},
  31. {Type: "NEWUTS"},
  32. {Type: "NEWIPC"},
  33. {Type: "NEWPID"},
  34. {Type: "NEWNET"},
  35. {Type: "NEWUSER"},
  36. }),
  37. Cgroups: &configs.Cgroup{
  38. Parent: "docker",
  39. AllowAllDevices: false,
  40. MemorySwappiness: -1,
  41. },
  42. Mounts: []*configs.Mount{
  43. {
  44. Source: "proc",
  45. Destination: "/proc",
  46. Device: "proc",
  47. Flags: defaultMountFlags,
  48. },
  49. {
  50. Source: "tmpfs",
  51. Destination: "/dev",
  52. Device: "tmpfs",
  53. Flags: syscall.MS_NOSUID | syscall.MS_STRICTATIME,
  54. Data: "mode=755",
  55. },
  56. {
  57. Source: "devpts",
  58. Destination: "/dev/pts",
  59. Device: "devpts",
  60. Flags: syscall.MS_NOSUID | syscall.MS_NOEXEC,
  61. Data: "newinstance,ptmxmode=0666,mode=0620,gid=5",
  62. },
  63. {
  64. Source: "sysfs",
  65. Destination: "/sys",
  66. Device: "sysfs",
  67. Flags: defaultMountFlags | syscall.MS_RDONLY,
  68. },
  69. {
  70. Source: "cgroup",
  71. Destination: "/sys/fs/cgroup",
  72. Device: "cgroup",
  73. Flags: defaultMountFlags | syscall.MS_RDONLY,
  74. },
  75. },
  76. MaskPaths: []string{
  77. "/proc/kcore",
  78. "/proc/latency_stats",
  79. "/proc/timer_stats",
  80. },
  81. ReadonlyPaths: []string{
  82. "/proc/asound",
  83. "/proc/bus",
  84. "/proc/fs",
  85. "/proc/irq",
  86. "/proc/sys",
  87. "/proc/sysrq-trigger",
  88. },
  89. }
  90. if apparmor.IsEnabled() {
  91. container.AppArmorProfile = "docker-default"
  92. }
  93. if SystemdCgroups {
  94. container.Cgroups.Parent = "system.slice"
  95. container.Cgroups.ScopePrefix = "docker"
  96. }
  97. return container
  98. }