diff --git a/libpod/runtime.go b/libpod/runtime.go index 38d404e21e..df5bf0ef49 100644 --- a/libpod/runtime.go +++ b/libpod/runtime.go @@ -420,13 +420,14 @@ func makeRuntime(runtime *Runtime) (retErr error) { } logrus.Debugf("Set libpod namespace to %q", runtime.config.Engine.Namespace) - hasCapSysAdmin, err := unshare.HasCapSysAdmin() - if err != nil { - return err + needsUserns := os.Geteuid() != 0 + if !needsUserns { + hasCapSysAdmin, err := unshare.HasCapSysAdmin() + if err != nil { + return err + } + needsUserns = !hasCapSysAdmin } - - needsUserns := !hasCapSysAdmin - // Set up containers/storage var store storage.Store if needsUserns { diff --git a/pkg/rootless/rootless_linux.go b/pkg/rootless/rootless_linux.go index d9bc8da52d..1937a1330d 100644 --- a/pkg/rootless/rootless_linux.go +++ b/pkg/rootless/rootless_linux.go @@ -172,7 +172,7 @@ func joinUserAndMountNS(pid uint, pausePid string) (bool, int, error) { if err != nil { return false, 0, err } - if hasCapSysAdmin || os.Getenv("_CONTAINERS_USERNS_CONFIGURED") != "" { + if (os.Geteuid() == 0 && hasCapSysAdmin) || os.Getenv("_CONTAINERS_USERNS_CONFIGURED") != "" { return false, 0, nil } @@ -248,7 +248,7 @@ func becomeRootInUserNS(pausePid, fileToRead string, fileOutput *os.File) (_ boo return false, 0, err } - if hasCapSysAdmin || os.Getenv("_CONTAINERS_USERNS_CONFIGURED") != "" { + if (os.Geteuid() == 0 && hasCapSysAdmin) || os.Getenv("_CONTAINERS_USERNS_CONFIGURED") != "" { if os.Getenv("_CONTAINERS_USERNS_CONFIGURED") == "init" { return false, 0, runInUser() }