58 lines
1.3 KiB
Go
58 lines
1.3 KiB
Go
// +build linux
|
|
|
|
package main
|
|
|
|
import (
|
|
"os"
|
|
|
|
"github.com/opencontainers/runc/libcontainer/system"
|
|
"github.com/urfave/cli"
|
|
)
|
|
|
|
func shouldUseRootlessCgroupManager(context *cli.Context) (bool, error) {
|
|
if context != nil {
|
|
b, err := parseBoolOrAuto(context.GlobalString("rootless"))
|
|
if err != nil {
|
|
return false, err
|
|
}
|
|
if b != nil {
|
|
return *b, nil
|
|
}
|
|
// nil b stands for "auto detect"
|
|
}
|
|
if context.GlobalBool("systemd-cgroup") {
|
|
return false, nil
|
|
}
|
|
if os.Geteuid() != 0 {
|
|
return true, nil
|
|
}
|
|
if !system.RunningInUserNS() {
|
|
// euid == 0 , in the initial ns (i.e. the real root)
|
|
return false, nil
|
|
}
|
|
// euid = 0, in a userns.
|
|
// As we are unaware of cgroups path, we can't determine whether we have the full
|
|
// access to the cgroups path.
|
|
// Either way, we can safely decide to use the rootless cgroups manager.
|
|
return true, nil
|
|
}
|
|
|
|
func shouldHonorXDGRuntimeDir() bool {
|
|
if os.Getenv("XDG_RUNTIME_DIR") == "" {
|
|
return false
|
|
}
|
|
if os.Geteuid() != 0 {
|
|
return true
|
|
}
|
|
if !system.RunningInUserNS() {
|
|
// euid == 0 , in the initial ns (i.e. the real root)
|
|
// in this case, we should use /run/runc and ignore
|
|
// $XDG_RUNTIME_DIR (e.g. /run/user/0) for backward
|
|
// compatibility.
|
|
return false
|
|
}
|
|
// euid = 0, in a userns.
|
|
u, ok := os.LookupEnv("USER")
|
|
return !ok || u != "root"
|
|
}
|