mirror of
https://github.com/containers/podman.git
synced 2026-08-07 04:43:04 -04:00
libpod: allow userns=keep-id for root
copy the current mapping into a new user namespace, and run into a separate user namespace. Closes: https://github.com/containers/podman/issues/17337 Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
This commit is contained in:
5 files changed
+36
-45
No files matched your search
@@ -1,7 +1,6 @@
|
||||
package generate
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
@@ -194,9 +193,6 @@ func namespaceOptions(s *specgen.SpecGenerator, rt *libpod.Runtime, pod *libpod.
|
||||
// User
|
||||
switch s.UserNS.NSMode {
|
||||
case specgen.KeepID:
|
||||
if !rootless.IsRootless() {
|
||||
return nil, errors.New("keep-id is only supported in rootless mode")
|
||||
}
|
||||
opts, err := namespaces.UsernsMode(s.UserNS.String()).GetKeepIDOptions()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
||||
+24
-3
@@ -113,13 +113,34 @@ func ParseSignal(rawSignal string) (syscall.Signal, error) {
|
||||
|
||||
// GetKeepIDMapping returns the mappings and the user to use when keep-id is used
|
||||
func GetKeepIDMapping(opts *namespaces.KeepIDUserNsOptions) (*stypes.IDMappingOptions, int, int, error) {
|
||||
if !rootless.IsRootless() {
|
||||
return nil, -1, -1, errors.New("keep-id is only supported in rootless mode")
|
||||
}
|
||||
options := stypes.IDMappingOptions{
|
||||
HostUIDMapping: false,
|
||||
HostGIDMapping: false,
|
||||
}
|
||||
|
||||
if !rootless.IsRootless() {
|
||||
uids, err := rootless.ReadMappingsProc("/proc/self/uid_map")
|
||||
if err != nil {
|
||||
return nil, 0, 0, err
|
||||
}
|
||||
gids, err := rootless.ReadMappingsProc("/proc/self/uid_map")
|
||||
if err != nil {
|
||||
return nil, 0, 0, err
|
||||
}
|
||||
options.UIDMap = uids
|
||||
options.GIDMap = gids
|
||||
|
||||
uid, gid := 0, 0
|
||||
if opts.UID != nil {
|
||||
uid = int(*opts.UID)
|
||||
}
|
||||
if opts.GID != nil {
|
||||
gid = int(*opts.GID)
|
||||
}
|
||||
|
||||
return &options, uid, gid, nil
|
||||
}
|
||||
|
||||
min := func(a, b int) int {
|
||||
if a < b {
|
||||
return a
|
||||
|
||||
Reference in new issue
Block a user