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

linux: username: how to figure out uid reliably #38

Closed
philips opened this issue Jun 30, 2015 · 8 comments
Closed

linux: username: how to figure out uid reliably #38

philips opened this issue Jun 30, 2015 · 8 comments

Comments

@philips
Copy link
Contributor

philips commented Jun 30, 2015

Right now the spec says you need to specify an OS relevant user id for the process to exec on behalf of. Many people don't think about this low-level primitive and rely on user databases like /etc/passwd. In order to support a user saying apache in the open container configuration we would need to do hacks on Linux: Sadly this requires hacks:

  • parse /etc/passwd (if it exists!)
  • call getent passwd inside of the filesystem

This spec likely should make a recommendation on what needs to be done here and in what order if we are to support a "username".

This issues replaces #10 and is being refiled since we made a decision to be more explicit and simple for the initial draft milestone.

@philips philips added this to the draft-next milestone Jun 30, 2015
@wking
Copy link
Contributor

wking commented Sep 6, 2015

On Tue, Jun 30, 2015 at 04:14:17PM -0700, Brandon Philips wrote:

Right now the spec says you need to specify an OS relevant user id
for the process to exec on behalf of. Many people don't think about
this low-level primitive and rely on user databases like
/etc/passwd. In order to support a user saying apache in the
open container configuration…

I don't think we need to do this. Using UID/GID is easy for the
runtime 1, and ‘id -u apache’, etc., is easy for bundle authors.

@wking
Copy link
Contributor

wking commented Sep 7, 2015

On Sun, Sep 06, 2015 at 02:01:42PM -0700, W. Trevor King wrote:

I don't think we need to do this. Using UID/GID is easy for the
runtime [1], and ‘id -u apache’, etc., is easy for bundle authors.

Of course, they'd have to enter the bundle for that ‘id’ call to work
;). So maybe not super-trivial, but I still think we should be
offloading the UID/GID lookup to bundle-author tooling.

@julz
Copy link
Contributor

julz commented Sep 15, 2015

bumping this since we're getting past the first milestone and starting to talk about usability now. I can't think of a good way to implement a pretty common use case like docker run -u myuser /bin/bash without mapping usernames to uids. I think this becomes particularly important where you're trying to support 'runc exec' or having multiple bundles that share a namespace. If you consider a case where the second bundle wants to log in as a user added/modified by the first bundle, it doesn't make sense to try to create the bundle with a pre-mapped uid: the user literally may not exist (or may exist with the wrong uid) when the bundle is created. The only sane way I can think of to handle this is for the runtime to do the mapping before executing the second bundle.

User is already a platform-specific structure so I'm struggling to think of great arguments to not allow specifying a username that the runtime will map to a uid. Does anyone actually feel strongly about the runtime not mapping username->uid once the first draft is done?

@julz
Copy link
Contributor

julz commented Sep 15, 2015

Coming back to the original issue, parsing /etc/passwd seems better to me because I don't think we can rely on getent existing in the rootfs (I can imagine cut-down rootfses that don't have it). The appc spec wording seems pretty great here imho.

@wking
Copy link
Contributor

wking commented Sep 15, 2015

On Tue, Sep 15, 2015 at 01:49:14PM -0700, Julian Friedman wrote:

Coming back to the original issue, parsing /etc/passwd seems better
to me because I don't think we can rely on getent existing in the
rootfs…

We might not have the entry in /etc/passwd though (maybe the bundle
intends to use NIS or LDAP to lookup the user you're asking for).

On the other hand, all my bundles will have users in /etc/passwd, so
I'm ok going with “just parse /etc/passwd” until we hear complaints
from folks using alternative systems.

The appc spec wording seems pretty great here imho.

That looks good to me too, although strangely they require numeric IDs
for supplementaryGids. I think we should use whatever logic we decide
on for both the user, group, and additionalGids.

@vbatts
Copy link
Member

vbatts commented Mar 16, 2016

Is this really required for the spec? uid is sufficient, and if username can not be resolved, then it's undefined behavior.

@wking
Copy link
Contributor

wking commented Mar 16, 2016

On Wed, Mar 16, 2016 at 10:49:27AM -0700, Vincent Batts wrote:

Is this really required for the spec?

@crosbymichael closed #191 as out-of-scope for the runtime 1, which
sounds fine to me 2.

vbatts added a commit to vbatts/oci-runtime-spec that referenced this issue Mar 17, 2016
Closes opencontainers#38

Signed-off-by: Vincent Batts <vbatts@hashbangbash.com>
@philips
Copy link
Contributor Author

philips commented Mar 21, 2016

Closing this. I agree with the assessment in #191

@philips philips closed this as completed Mar 21, 2016
@crosbymichael crosbymichael modified the milestones: by-1.0.0, 1.0.0 May 25, 2016
Mashimiao pushed a commit to Mashimiao/specs that referenced this issue Aug 19, 2016
Closes opencontainers#38

Signed-off-by: Vincent Batts <vbatts@hashbangbash.com>
wking referenced this issue in opencontainers/umoci Nov 10, 2016
Use libcontainer/user to parse the /etc/{passwd,group} files inside the
container rootfs to allow us to handle string versions of user:group
specifications.

This also allows us to fill the AdditionalGids fields.

Signed-off-by: Aleksa Sarai <asarai@suse.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

5 participants