Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

userns mappings and reusing existing userns from a specified path #961

Open
alban opened this issue Mar 22, 2018 · 3 comments
Open

userns mappings and reusing existing userns from a specified path #961

alban opened this issue Mar 22, 2018 · 3 comments

Comments

@alban
Copy link
Contributor

alban commented Mar 22, 2018

When the config reuses an existing userns:

    "namespaces": [
        {
            "type": "user",
            "path": "/proc/1234/ns/user"
        },

It is unclear how mappings should be specified:

    "uidMappings": [
        {
            "containerID": 0,
            "hostID": 1000,
            "size": 32000
        }
    ],

If the existing userns already has mappings configured, the runtime will not be able to write to /proc/$$/uid_map again (see man 7 user_namespaces).

Questions for the runtimes:

  • Should the runtime ignore any uidMappings or gidMappings sections when a path is specified for userns?
  • Or should it check that the current mappings are already configured exactly as specified in config.json?
  • Or should it return an error when it fails to configure the mappings again?
  • Should runtimes support using existing userns with unconfigured mappings? (That does not seem useful to me because how would several containers share the same userns? That seems racy.)

Questions for the users:

  • Should users avoid specifying the uidMappings or gidMappings sections?
  • Or should they specify the mappings and ensure the specified path refers to a userns with the same mappings?

Note that runtimes might need to know the mappings for mounting some tmpfs with options like ,uid=1000,gid=1000.

@wking
Copy link
Contributor

wking commented Mar 22, 2018

  • Or should it return an error when it fails to configure the mappings again?

This is my preference.

I agree that the unmapped case doesn't seem very useful, but don't think it's worth adding spec language to forbid it.

Note that runtimes might need to know the mappings for mounting some tmpfs with options like ,uid=1000,gid=1000.

Do you need to know the mapping for this? Don't you just need to know what IDs are mapped inside the container? Either way, if you're joining an existing user namespace, you can always look this up ahead of time before writing your config.

@alban
Copy link
Contributor Author

alban commented Mar 23, 2018

Or should it return an error when it fails to configure the mappings again?
This is my preference.

Ok. Should it be a "MUST"?

I agree that the unmapped case doesn't seem very useful, but don't think it's worth adding spec language to forbid it.

Fair enough.

Note that runtimes might need to know the mappings for mounting some tmpfs with options like ,uid=1000,gid=1000.

Do you need to know the mapping for this? Don't you just need to know what IDs are mapped inside the container?

I am not sure, I just noticed those options in /proc/self/mountinfo inside the container. But maybe it is displayed by the kernel in mountinfo but does not need to be given at the mount() syscall: I don't see it in runc.

Either way, if you're joining an existing user namespace, you can always look this up ahead of time before writing your config.

Ok.

@wking
Copy link
Contributor

wking commented Mar 23, 2018

Or should it return an error when it fails to configure the mappings again?

This is my preference.

Ok. Should it be a "MUST"?

It's already covered by this MUST.

Note that runtimes might need to know the mappings for mounting some tmpfs with options like ,uid=1000,gid=1000.

Do you need to know the mapping for this? Don't you just need to know what IDs are mapped inside the container?

I am not sure, I just noticed those options in /proc/self/mountinfo inside the container. But maybe it is displayed by the kernel in mountinfo but does not need to be given at the mount() syscall: I don't see it in runc.

It would get to runc via a caller-specified options entry like here. And yeah, they're optional.

dongsupark pushed a commit to kinvolk-archives/runtime-tools that referenced this issue May 23, 2018
Enable UID/GID mappings for user namespaces, to be able to test user
namespaces with most container runtimes. According to discussions in
opencontainers/runtime-spec#961, it's clear
that we can safely enable UID/GID mappings.

Also add some comments about cgroup namespaces, which is not supported
by runc yet.

Signed-off-by: Dongsu Park <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants