From 3e4914e9afaab3448aa7dd63c4d94b9961cd312e Mon Sep 17 00:00:00 2001 From: Michael Crosby Date: Mon, 24 Feb 2014 13:52:56 -0800 Subject: [PATCH] Honor user passed on container in nsinit Docker-DCO-1.1-Signed-off-by: Michael Crosby (github: crosbymichael) Upstream-commit: 1c79b747bb10a389249aba90ad217ca0128afb74 Component: engine --- .../engine/pkg/libcontainer/nsinit/init.go | 34 ++++++++++++++----- components/engine/pkg/system/calls_linux.go | 8 +++++ 2 files changed, 33 insertions(+), 9 deletions(-) diff --git a/components/engine/pkg/libcontainer/nsinit/init.go b/components/engine/pkg/libcontainer/nsinit/init.go index cdedc14769..23303cd704 100644 --- a/components/engine/pkg/libcontainer/nsinit/init.go +++ b/components/engine/pkg/libcontainer/nsinit/init.go @@ -8,6 +8,7 @@ import ( "github.com/dotcloud/docker/pkg/libcontainer/capabilities" "github.com/dotcloud/docker/pkg/libcontainer/network" "github.com/dotcloud/docker/pkg/system" + "github.com/dotcloud/docker/pkg/user" "log" "os" "os/exec" @@ -110,15 +111,30 @@ func resolveRootfs(uncleanRootfs string) (string, error) { } func setupUser(container *libcontainer.Container) error { - // TODO: honor user passed on container - if err := system.Setgroups(nil); err != nil { - return err - } - if err := system.Setresgid(0, 0, 0); err != nil { - return err - } - if err := system.Setresuid(0, 0, 0); err != nil { - return err + if container.User != "" { + uid, gid, suppGids, err := user.GetUserGroupSupplementary(container.User, syscall.Getuid(), syscall.Getgid()) + if err != nil { + return err + } + if err := system.Setgroups(suppGids); err != nil { + return err + } + if err := system.Setgid(gid); err != nil { + return err + } + if err := system.Setuid(uid); err != nil { + return err + } + } else { + if err := system.Setgroups(nil); err != nil { + return err + } + if err := system.Setresgid(0, 0, 0); err != nil { + return err + } + if err := system.Setresuid(0, 0, 0); err != nil { + return err + } } return nil } diff --git a/components/engine/pkg/system/calls_linux.go b/components/engine/pkg/system/calls_linux.go index 42afa349c2..0bf42e3c71 100644 --- a/components/engine/pkg/system/calls_linux.go +++ b/components/engine/pkg/system/calls_linux.go @@ -71,6 +71,14 @@ func Setresuid(ruid, euid, suid int) error { return syscall.Setresuid(ruid, euid, suid) } +func Setgid(gid int) error { + return syscall.Setgid(gid) +} + +func Setuid(uid int) error { + return syscall.Setuid(uid) +} + func Sethostname(name string) error { return syscall.Sethostname([]byte(name)) }