Merge pull request #606 from estesp/mount-perm-userns
Properly setuid/setgid after entering userns
This commit is contained in:
commit
ad2c520c6e
|
@ -325,9 +325,10 @@ func setupRlimits(config *configs.Config) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func setOomScoreAdj(oomScoreAdj int) error {
|
func setOomScoreAdj(oomScoreAdj int, pid int) error {
|
||||||
path := "/proc/self/oom_score_adj"
|
path := fmt.Sprintf("/proc/%d/oom_score_adj", pid)
|
||||||
return ioutil.WriteFile(path, []byte(strconv.Itoa(oomScoreAdj)), 0700)
|
|
||||||
|
return ioutil.WriteFile(path, []byte(strconv.Itoa(oomScoreAdj)), 0600)
|
||||||
}
|
}
|
||||||
|
|
||||||
// killCgroupProcesses freezes then iterates over all the processes inside the
|
// killCgroupProcesses freezes then iterates over all the processes inside the
|
||||||
|
|
|
@ -368,6 +368,16 @@ static void process_nl_attributes(int pipenum, char *data, int data_size)
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (setuid(0) == -1) {
|
||||||
|
pr_perror("setuid failed");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (setgid(0) == -1) {
|
||||||
|
pr_perror("setgid failed");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
if (consolefd != -1) {
|
if (consolefd != -1) {
|
||||||
if (ioctl(consolefd, TIOCSCTTY, 0) == -1) {
|
if (ioctl(consolefd, TIOCSCTTY, 0) == -1) {
|
||||||
pr_perror("ioctl TIOCSCTTY failed");
|
pr_perror("ioctl TIOCSCTTY failed");
|
||||||
|
|
|
@ -88,6 +88,10 @@ func (p *setnsProcess) start() (err error) {
|
||||||
if err := utils.WriteJSON(p.parentPipe, p.config); err != nil {
|
if err := utils.WriteJSON(p.parentPipe, p.config); err != nil {
|
||||||
return newSystemError(err)
|
return newSystemError(err)
|
||||||
}
|
}
|
||||||
|
// set oom_score_adj
|
||||||
|
if err := setOomScoreAdj(p.config.Config.OomScoreAdj, p.pid()); err != nil {
|
||||||
|
return newSystemError(err)
|
||||||
|
}
|
||||||
|
|
||||||
if err := syscall.Shutdown(int(p.parentPipe.Fd()), syscall.SHUT_WR); err != nil {
|
if err := syscall.Shutdown(int(p.parentPipe.Fd()), syscall.SHUT_WR); err != nil {
|
||||||
return newSystemError(err)
|
return newSystemError(err)
|
||||||
|
@ -276,6 +280,10 @@ loop:
|
||||||
if err := p.manager.Set(p.config.Config); err != nil {
|
if err := p.manager.Set(p.config.Config); err != nil {
|
||||||
return newSystemError(err)
|
return newSystemError(err)
|
||||||
}
|
}
|
||||||
|
// set oom_score_adj
|
||||||
|
if err := setOomScoreAdj(p.config.Config.OomScoreAdj, p.pid()); err != nil {
|
||||||
|
return newSystemError(err)
|
||||||
|
}
|
||||||
// call prestart hooks
|
// call prestart hooks
|
||||||
if !p.config.Config.Namespaces.Contains(configs.NEWNS) {
|
if !p.config.Config.Namespaces.Contains(configs.NEWNS) {
|
||||||
if p.config.Config.Hooks != nil {
|
if p.config.Config.Hooks != nil {
|
||||||
|
|
|
@ -31,9 +31,6 @@ func (l *linuxSetnsInit) Init() error {
|
||||||
if err := setupRlimits(l.config.Config); err != nil {
|
if err := setupRlimits(l.config.Config); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := setOomScoreAdj(l.config.Config.OomScoreAdj); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if l.config.NoNewPrivileges {
|
if l.config.NoNewPrivileges {
|
||||||
if err := system.Prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0); err != nil {
|
if err := system.Prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0); err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
|
@ -76,9 +76,7 @@ func (l *linuxStandardInit) Init() error {
|
||||||
if err := setupRlimits(l.config.Config); err != nil {
|
if err := setupRlimits(l.config.Config); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := setOomScoreAdj(l.config.Config.OomScoreAdj); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
label.Init()
|
label.Init()
|
||||||
// InitializeMountNamespace() can be executed only for a new mount namespace
|
// InitializeMountNamespace() can be executed only for a new mount namespace
|
||||||
if l.config.Config.Namespaces.Contains(configs.NEWNS) {
|
if l.config.Config.Namespaces.Contains(configs.NEWNS) {
|
||||||
|
|
Loading…
Reference in New Issue