From d28af8a28b39501470524aab9f7002ba20143fb6 Mon Sep 17 00:00:00 2001 From: kaiyou <dev@kaiyou.fr> Date: Wed, 14 Sep 2022 23:32:44 +0200 Subject: [PATCH] Mount systemd cgroups properly --- pkg/selfcontain/defaults.go | 42 ++++++++++++++++++++++++++----------- 1 file changed, 30 insertions(+), 12 deletions(-) diff --git a/pkg/selfcontain/defaults.go b/pkg/selfcontain/defaults.go index 3388ba3..714233b 100644 --- a/pkg/selfcontain/defaults.go +++ b/pkg/selfcontain/defaults.go @@ -52,6 +52,18 @@ var defaultMounts = []*configs.Mount{ Device: "proc", Flags: unix.MS_NOEXEC | unix.MS_NOSUID | unix.MS_NODEV, }, + { + Source: "sysfs", + Destination: "/sys", + Device: "sysfs", + Flags: unix.MS_NOEXEC | unix.MS_NOSUID | unix.MS_NODEV, + }, + { + Source: "cgroup", + Destination: "/sys/fs/cgroup", + Device: "cgroup", + Flags: unix.MS_NOEXEC | unix.MS_NOSUID | unix.MS_NODEV, + }, { Source: "tmpfs", Destination: "/dev", @@ -66,6 +78,13 @@ var defaultMounts = []*configs.Mount{ Flags: unix.MS_NOSUID | unix.MS_NOEXEC, Data: "newinstance,ptmxmode=0666,mode=0620,gid=5", }, + { + Source: "tmpfs", + Destination: "/tmp", + Device: "tmpfs", + Flags: unix.MS_NOSUID | unix.MS_STRICTATIME, + Data: "mode=755", + }, } // Restrict capabilities to strictly required capabilities @@ -110,14 +129,6 @@ func makeConfig(name string, newRoot string, self string) *configs.Config { for _, device := range allowedDevices { deviceRules = append(deviceRules, &device.Rule) } - // Unshare all namespace types except uid - namespaces := []configs.Namespace{} - for _, namespace := range configs.NamespaceTypes() { - if namespace == configs.NEWUSER { - continue - } - namespaces = append(namespaces, configs.Namespace{Type: namespace}) - } // Finally returns the configuration return &configs.Config{ Rootfs: newRoot, @@ -129,11 +140,18 @@ func makeConfig(name string, newRoot string, self string) *configs.Config { Permitted: capabilities, Ambient: capabilities, }, - Namespaces: configs.Namespaces(namespaces), - Devices: allowedDevices, + Namespaces: []configs.Namespace{ + {Type: configs.NEWNS}, + {Type: configs.NEWUTS}, + {Type: configs.NEWIPC}, + {Type: configs.NEWPID}, + {Type: configs.NEWNET}, + {Type: configs.NEWCGROUP}, + }, + Devices: allowedDevices, Cgroups: &configs.Cgroup{ - Name: name, - Parent: "system", + Name: name, + Systemd: true, Resources: &configs.Resources{ MemorySwappiness: nil, Devices: deviceRules, -- GitLab