Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 205D7200D33 for ; Wed, 8 Nov 2017 15:04:10 +0100 (CET) Received: by cust-asf.ponee.io (Postfix) id 1D5E2160BE0; Wed, 8 Nov 2017 14:04:10 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 3D101160BDA for ; Wed, 8 Nov 2017 15:04:09 +0100 (CET) Received: (qmail 67740 invoked by uid 500); 8 Nov 2017 14:04:08 -0000 Mailing-List: contact yarn-issues-help@hadoop.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Delivered-To: mailing list yarn-issues@hadoop.apache.org Received: (qmail 67729 invoked by uid 99); 8 Nov 2017 14:04:08 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd3-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 08 Nov 2017 14:04:08 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd3-us-west.apache.org (ASF Mail Server at spamd3-us-west.apache.org) with ESMTP id 905D9180870 for ; Wed, 8 Nov 2017 14:04:07 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd3-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: -100.002 X-Spam-Level: X-Spam-Status: No, score=-100.002 tagged_above=-999 required=6.31 tests=[RP_MATCHES_RCVD=-0.001, SPF_PASS=-0.001, USER_IN_WHITELIST=-100] autolearn=disabled Received: from mx1-lw-eu.apache.org ([10.40.0.8]) by localhost (spamd3-us-west.apache.org [10.40.0.10]) (amavisd-new, port 10024) with ESMTP id pN32ulPbelY9 for ; Wed, 8 Nov 2017 14:04:02 +0000 (UTC) Received: from mailrelay1-us-west.apache.org (mailrelay1-us-west.apache.org [209.188.14.139]) by mx1-lw-eu.apache.org (ASF Mail Server at mx1-lw-eu.apache.org) with ESMTP id 9A9965FE5F for ; Wed, 8 Nov 2017 14:04:01 +0000 (UTC) Received: from jira-lw-us.apache.org (unknown [207.244.88.139]) by mailrelay1-us-west.apache.org (ASF Mail Server at mailrelay1-us-west.apache.org) with ESMTP id 94EDDE0ECE for ; Wed, 8 Nov 2017 14:04:00 +0000 (UTC) Received: from jira-lw-us.apache.org (localhost [127.0.0.1]) by jira-lw-us.apache.org (ASF Mail Server at jira-lw-us.apache.org) with ESMTP id 37C1B241A2 for ; Wed, 8 Nov 2017 14:04:00 +0000 (UTC) Date: Wed, 8 Nov 2017 14:04:00 +0000 (UTC) From: "Shane Kumpf (JIRA)" To: yarn-issues@hadoop.apache.org Message-ID: In-Reply-To: References: Subject: [jira] [Commented] (YARN-7430) User and Group mapping are incorrect in docker container MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394 archived-at: Wed, 08 Nov 2017 14:04:10 -0000 [ https://issues.apache.org/jira/browse/YARN-7430?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16243982#comment-16243982 ] Shane Kumpf commented on YARN-7430: ----------------------------------- {quote} This is not true, see the following examples: {quote} I guess I don't understand what those examples are trying to convey. I become root with or without privileged if I don't supply the --user/uid flags. The centos image has no USER entry, so this is what I would expect. {code} [foo@localhost ~]$ docker run -it centos:latest bash [root@00f0c3ac84cf /]# id uid=0(root) gid=0(root) groups=0(root) [foo@localhost ~]$ docker run -it --privileged centos:latest bash [root@955eb326cb66 /]# id uid=0(root) gid=0(root) groups=0(root) {code} With user remapping disabled, which is the default, the {{docker run}} form is different than what you are testing. It is {{docker run --detach=true --user= ...}} (not --user=) - that doesn't seem to suffer from the issue you call out where the primary group is missing, since the container fails to start if the user doesn't exist in the container. {code:java} [foo@localhost ~]$ docker run -it --user=foo centos:latest bash docker: Error response from daemon: linux spec user: unable to find user foo: no matching entries in passwd file {code} At this point, I'm confused on exactly what conditions result in this exploit. Can you clarify? I've yet to see the form you tested occur anywhere. I see the following: * Without user remapping: docker run --user='skumpf' ... * With user remapping: docker run --user='501:502' --group-add='502' ... {quote} When --privileged=true and --user are set, the container is started with root privilegs and drop to the user privileges. If there is sticky bits binary in the container file system, it is possible for process to resume root privileges. If the container filesystem can be tainted by pushing custom image with sticky bits, then jailbreak is possible. {quote} I don't understand how that is exploitable. The ENTRYPOINT/CMD will be run as the user supplied by YARN. If the ENTRYPOINT/CMD is a setuid binary that gives that user root access in the container, this becomes true, but I can do that without a privileged container. {quote} Docker does not make any change to the file permission. {quote} That's my point. Consider the following Dockerfile: {code} FROM centos USERADD foo USER foo COPY run.sh / CMD /run.sh {code} I then submit an application as user "skumpf" that uses the image above. The localized resources and container launch script is owned by "skumpf" on the host and will be bind mounted into the container. With the current behavior using {{docker run}} and {{--user}} the the launch script will be ran as "skumpf" (per our docs skumpf must exist in the container and have the same UID as the host), even in the privileged case. If we remove {{--user}} from {{docker run}} in the the privileged case, then now the the launch script will be executed by user "foo" in my container, using whatever UID "foo" has in the container. User "foo" in the container does not have permission to execute the launch script owned by "skumpf" and thus the container will fail to launch with a permission denied error. We need the {{--user/uid}} option even if privileged is requested, because without it, we have no idea what user the container will run as. > User and Group mapping are incorrect in docker container > -------------------------------------------------------- > > Key: YARN-7430 > URL: https://issues.apache.org/jira/browse/YARN-7430 > Project: Hadoop YARN > Issue Type: Sub-task > Components: security, yarn > Affects Versions: 2.9.0, 3.0.0 > Reporter: Eric Yang > Assignee: Eric Yang > Priority: Blocker > Attachments: YARN-7430.001.patch > > > In YARN-4266, the recommendation was to use -u [uid]:[gid] numeric values to enforce user and group for the running user. In YARN-6623, this translated to --user=test --group-add=group1. The code no longer enforce group correctly for launched process. > In addition, the implementation in YARN-6623 requires the user and group information to exist in container to translate username and group to uid/gid. For users on LDAP, there is no good way to populate container with user and group information. -- This message was sent by Atlassian JIRA (v6.4.14#64029) --------------------------------------------------------------------- To unsubscribe, e-mail: yarn-issues-unsubscribe@hadoop.apache.org For additional commands, e-mail: yarn-issues-help@hadoop.apache.org