Merge pull request #10741 from mbaynton/userns-allow-setgroups
Allow `setgroups` in user namespaces
This commit is contained in:
commit
963c216048
@ -49,10 +49,11 @@ func UnshareAfterEnterUserns(uidMap, gidMap string, unshareFlags uintptr, f func
|
|||||||
proc, err := os.StartProcess("/proc/self/exe", []string{"UnshareAfterEnterUserns"}, &os.ProcAttr{
|
proc, err := os.StartProcess("/proc/self/exe", []string{"UnshareAfterEnterUserns"}, &os.ProcAttr{
|
||||||
Sys: &syscall.SysProcAttr{
|
Sys: &syscall.SysProcAttr{
|
||||||
// clone new user namespace first and then unshare
|
// clone new user namespace first and then unshare
|
||||||
Cloneflags: unix.CLONE_NEWUSER,
|
Cloneflags: unix.CLONE_NEWUSER,
|
||||||
Unshareflags: unshareFlags,
|
Unshareflags: unshareFlags,
|
||||||
UidMappings: uidMaps,
|
UidMappings: uidMaps,
|
||||||
GidMappings: gidMaps,
|
GidMappings: gidMaps,
|
||||||
|
GidMappingsEnableSetgroups: true,
|
||||||
// NOTE: It's reexec but it's not heavy because subprocess
|
// NOTE: It's reexec but it's not heavy because subprocess
|
||||||
// be in PTRACE_TRACEME mode before performing execve.
|
// be in PTRACE_TRACEME mode before performing execve.
|
||||||
Ptrace: true,
|
Ptrace: true,
|
||||||
|
@ -85,6 +85,10 @@ func testUnshareAfterEnterUsernsShouldWork(t *testing.T) {
|
|||||||
data, err = os.ReadFile(fmt.Sprintf("/proc/%d/gid_map", pid))
|
data, err = os.ReadFile(fmt.Sprintf("/proc/%d/gid_map", pid))
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, " 0 1000 10\n", string(data))
|
require.Equal(t, " 0 1000 10\n", string(data))
|
||||||
|
|
||||||
|
data, err = os.ReadFile(fmt.Sprintf("/proc/%d/setgroups", pid))
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, "allow\n", string(data))
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
require.NoError(t, uerr)
|
require.NoError(t, uerr)
|
||||||
|
Loading…
Reference in New Issue
Block a user