dd38613d0c
The Linux kernel never sets the Inheritable capability flag to anything
other than empty. Moby should have the same behavior, and leave it to
userspace code within the container to set a non-empty value if desired.
Reported-by: Andrew G. Morgan <morgan@kernel.org>
Signed-off-by: Samuel Karp <skarp@amazon.com>
(cherry picked from commit 0d9a37d0c2
)
Signed-off-by: Samuel Karp <skarp@amazon.com>
193 lines
4.3 KiB
Go
193 lines
4.3 KiB
Go
package oci // import "github.com/docker/docker/oci"
|
|
|
|
import (
|
|
"os"
|
|
"runtime"
|
|
|
|
"github.com/docker/docker/oci/caps"
|
|
specs "github.com/opencontainers/runtime-spec/specs-go"
|
|
)
|
|
|
|
func iPtr(i int64) *int64 { return &i }
|
|
func u32Ptr(i int64) *uint32 { u := uint32(i); return &u }
|
|
func fmPtr(i int64) *os.FileMode { fm := os.FileMode(i); return &fm }
|
|
|
|
// DefaultSpec returns the default spec used by docker for the current Platform
|
|
func DefaultSpec() specs.Spec {
|
|
return DefaultOSSpec(runtime.GOOS)
|
|
}
|
|
|
|
// DefaultOSSpec returns the spec for a given OS
|
|
func DefaultOSSpec(osName string) specs.Spec {
|
|
if osName == "windows" {
|
|
return DefaultWindowsSpec()
|
|
}
|
|
return DefaultLinuxSpec()
|
|
}
|
|
|
|
// DefaultWindowsSpec create a default spec for running Windows containers
|
|
func DefaultWindowsSpec() specs.Spec {
|
|
return specs.Spec{
|
|
Version: specs.Version,
|
|
Windows: &specs.Windows{},
|
|
Process: &specs.Process{},
|
|
Root: &specs.Root{},
|
|
}
|
|
}
|
|
|
|
// DefaultLinuxSpec create a default spec for running Linux containers
|
|
func DefaultLinuxSpec() specs.Spec {
|
|
s := specs.Spec{
|
|
Version: specs.Version,
|
|
Process: &specs.Process{
|
|
Capabilities: &specs.LinuxCapabilities{
|
|
Bounding: caps.DefaultCapabilities(),
|
|
Permitted: caps.DefaultCapabilities(),
|
|
Effective: caps.DefaultCapabilities(),
|
|
},
|
|
},
|
|
Root: &specs.Root{},
|
|
}
|
|
s.Mounts = []specs.Mount{
|
|
{
|
|
Destination: "/proc",
|
|
Type: "proc",
|
|
Source: "proc",
|
|
Options: []string{"nosuid", "noexec", "nodev"},
|
|
},
|
|
{
|
|
Destination: "/dev",
|
|
Type: "tmpfs",
|
|
Source: "tmpfs",
|
|
Options: []string{"nosuid", "strictatime", "mode=755", "size=65536k"},
|
|
},
|
|
{
|
|
Destination: "/dev/pts",
|
|
Type: "devpts",
|
|
Source: "devpts",
|
|
Options: []string{"nosuid", "noexec", "newinstance", "ptmxmode=0666", "mode=0620", "gid=5"},
|
|
},
|
|
{
|
|
Destination: "/sys",
|
|
Type: "sysfs",
|
|
Source: "sysfs",
|
|
Options: []string{"nosuid", "noexec", "nodev", "ro"},
|
|
},
|
|
{
|
|
Destination: "/sys/fs/cgroup",
|
|
Type: "cgroup",
|
|
Source: "cgroup",
|
|
Options: []string{"ro", "nosuid", "noexec", "nodev"},
|
|
},
|
|
{
|
|
Destination: "/dev/mqueue",
|
|
Type: "mqueue",
|
|
Source: "mqueue",
|
|
Options: []string{"nosuid", "noexec", "nodev"},
|
|
},
|
|
{
|
|
Destination: "/dev/shm",
|
|
Type: "tmpfs",
|
|
Source: "shm",
|
|
Options: []string{"nosuid", "noexec", "nodev", "mode=1777"},
|
|
},
|
|
}
|
|
|
|
s.Linux = &specs.Linux{
|
|
MaskedPaths: []string{
|
|
"/proc/asound",
|
|
"/proc/acpi",
|
|
"/proc/kcore",
|
|
"/proc/keys",
|
|
"/proc/latency_stats",
|
|
"/proc/timer_list",
|
|
"/proc/timer_stats",
|
|
"/proc/sched_debug",
|
|
"/proc/scsi",
|
|
"/sys/firmware",
|
|
},
|
|
ReadonlyPaths: []string{
|
|
"/proc/bus",
|
|
"/proc/fs",
|
|
"/proc/irq",
|
|
"/proc/sys",
|
|
"/proc/sysrq-trigger",
|
|
},
|
|
Namespaces: []specs.LinuxNamespace{
|
|
{Type: "mount"},
|
|
{Type: "network"},
|
|
{Type: "uts"},
|
|
{Type: "pid"},
|
|
{Type: "ipc"},
|
|
},
|
|
// Devices implicitly contains the following devices:
|
|
// null, zero, full, random, urandom, tty, console, and ptmx.
|
|
// ptmx is a bind mount or symlink of the container's ptmx.
|
|
// See also: https://github.com/opencontainers/runtime-spec/blob/master/config-linux.md#default-devices
|
|
Devices: []specs.LinuxDevice{},
|
|
Resources: &specs.LinuxResources{
|
|
Devices: []specs.LinuxDeviceCgroup{
|
|
{
|
|
Allow: false,
|
|
Access: "rwm",
|
|
},
|
|
{
|
|
Allow: true,
|
|
Type: "c",
|
|
Major: iPtr(1),
|
|
Minor: iPtr(5),
|
|
Access: "rwm",
|
|
},
|
|
{
|
|
Allow: true,
|
|
Type: "c",
|
|
Major: iPtr(1),
|
|
Minor: iPtr(3),
|
|
Access: "rwm",
|
|
},
|
|
{
|
|
Allow: true,
|
|
Type: "c",
|
|
Major: iPtr(1),
|
|
Minor: iPtr(9),
|
|
Access: "rwm",
|
|
},
|
|
{
|
|
Allow: true,
|
|
Type: "c",
|
|
Major: iPtr(1),
|
|
Minor: iPtr(8),
|
|
Access: "rwm",
|
|
},
|
|
{
|
|
Allow: true,
|
|
Type: "c",
|
|
Major: iPtr(5),
|
|
Minor: iPtr(0),
|
|
Access: "rwm",
|
|
},
|
|
{
|
|
Allow: true,
|
|
Type: "c",
|
|
Major: iPtr(5),
|
|
Minor: iPtr(1),
|
|
Access: "rwm",
|
|
},
|
|
{
|
|
Allow: false,
|
|
Type: "c",
|
|
Major: iPtr(10),
|
|
Minor: iPtr(229),
|
|
Access: "rwm",
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
// For LCOW support, populate a blank Windows spec
|
|
if runtime.GOOS == "windows" {
|
|
s.Windows = &specs.Windows{}
|
|
}
|
|
|
|
return s
|
|
}
|