Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752833AbbBKOFD (ORCPT ); Wed, 11 Feb 2015 09:05:03 -0500 Received: from out02.mta.xmission.com ([166.70.13.232]:35611 "EHLO out02.mta.xmission.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752011AbbBKOE5 (ORCPT ); Wed, 11 Feb 2015 09:04:57 -0500 From: ebiederm@xmission.com (Eric W. Biederman) To: mtk.manpages@gmail.com Cc: Linux Containers , Josh Triplett , Andrew Morton , Kees Cook , Linux API , linux-man , "linux-kernel\@vger.kernel.org" , LSM , Casey Schaufler , "Serge E. Hallyn" , Richard Weinberger , Kenton Varda , stable , Andy Lutomirski References: <52e0643bd47b1e5c65921d6e00aea1f724bb510a.1417281801.git.luto@amacapital.net> <87h9x5re41.fsf_-_@x220.int.ebiederm.org> <87mw6xpzb0.fsf_-_@x220.int.ebiederm.org> <87ppbtn4mv.fsf@x220.int.ebiederm.org> <87a92xn2io.fsf@x220.int.ebiederm.org> <87r3w8liw4.fsf@x220.int.ebiederm.org> <87iohklfvj.fsf_-_@x220.int.ebiederm.org> <87fvcok11h.fsf_-_@x220.int.ebiederm.org> <971ad3f6-90fd-4e3f-916c-8988af3c826d@email.android.com> <87wq5zf83t.fsf@x220.int.ebiederm.org> <87iohh3c9c.fsf@x220.int.ebiederm.org> <8761dh3b7k.fsf_-_@x220.int.ebiederm.org> <878uicy1r9.fsf_-_@x220.int.ebiederm.org> <87ppbo1ql4.fsf_-_@x220.int.ebiederm.org> <54CF99BF.8050401@gmail.com> Date: Wed, 11 Feb 2015 08:01:36 -0600 In-Reply-To: (Michael Kerrisk's message of "Wed, 11 Feb 2015 09:02:30 +0100") Message-ID: <87egpwk0n3.fsf@x220.int.ebiederm.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-XM-AID: U2FsdGVkX18oEqDzvXLV0WUNiYBbSFgbtqL4Emx8XKE= X-SA-Exim-Connect-IP: 70.59.163.10 X-SA-Exim-Mail-From: ebiederm@xmission.com X-Spam-Report: * -1.0 ALL_TRUSTED Passed through trusted hosts only via SMTP * 0.0 TVD_RCVD_IP Message was received from an IP address * 0.7 XMSubLong Long Subject * 1.5 XMNoVowels Alpha-numberic number with no vowels * 0.0 T_TM2_M_HEADER_IN_MSG BODY: No description available. * 0.8 BAYES_50 BODY: Bayes spam probability is 40 to 60% * [score: 0.5000] * -0.0 DCC_CHECK_NEGATIVE Not listed in DCC * [sa04 1397; Body=1 Fuz1=1 Fuz2=1] * 1.0 T_XMDrugObfuBody_08 obfuscated drug references * 0.0 T_TooManySym_02 5+ unique symbols in subject * 0.5 XM_Body_Dirty_Words Contains a dirty word * 0.0 T_TooManySym_01 4+ unique symbols in subject X-Spam-DCC: XMission; sa04 1397; Body=1 Fuz1=1 Fuz2=1 X-Spam-Combo: ***;mtk.manpages@gmail.com X-Spam-Relay-Country: X-Spam-Timing: total 1444 ms - load_scoreonly_sql: 0.04 (0.0%), signal_user_changed: 2.8 (0.2%), b_tie_ro: 1.92 (0.1%), parse: 1.20 (0.1%), extract_message_metadata: 31 (2.1%), get_uri_detail_list: 4.5 (0.3%), tests_pri_-1000: 44 (3.0%), tests_pri_-950: 1.56 (0.1%), tests_pri_-900: 1.26 (0.1%), tests_pri_-400: 75 (5.2%), check_bayes: 74 (5.1%), b_tokenize: 27 (1.9%), b_tok_get_all: 11 (0.8%), b_comp_prob: 3.7 (0.3%), b_tok_touch_all: 2.2 (0.2%), b_finish: 0.63 (0.0%), tests_pri_0: 1277 (88.4%), tests_pri_500: 7 (0.5%), rewrite_mail: 0.00 (0.0%) Subject: Re: [PATCH 2/2] user_namespaces.7: Update the documention to reflect the fixes for negative groups X-Spam-Flag: No X-SA-Exim-Version: 4.2.1 (built Wed, 24 Sep 2014 11:00:52 -0600) X-SA-Exim-Scanned: Yes (on in01.mta.xmission.com) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 5302 Lines: 155 "Michael Kerrisk (man-pages)" writes: > Hi Eric, > > Ping! > > Cheers, > > Michael > > > On 2 February 2015 at 16:37, Michael Kerrisk (man-pages) > wrote: >> Hi Eric, >> >> Thanks for writing this up! >> >> On 12/12/2014 10:54 PM, Eric W. Biederman wrote: >>> >>> Files with access permissions such as ---rwx---rwx give fewer >>> permissions to their group then they do to everyone else. Which means >>> dropping groups with setgroups(0, NULL) actually grants a process >>> privileges. >>> >>> The uprivileged setting of gid_map turned out not to be safe after ^^^^^^^^^^^ unprivileged -- typo fix >>> this change. Privilege setting of gid_map can be interpreted as >>> meaning yes it is ok to drop groups. >> >> I had trouble to parse that sentence (and I'd like to make sure that >> the right sentence ends up in the commit message). Did you mean: >> >> "*Unprivileged* setting of gid_map can be interpreted as meaning >> yes it is ok to drop groups" >> ? >> >> Or something else? I meant: Setting of gid_map with privilege has been clarified to mean that dropping groups is ok. This allows existing programs that set gid_map with privilege to work without changes. That is newgidmap continues to work unchanged. >>> To prevent this problem and future problems user namespaces were >>> changed in such a way as to guarantee a user can not obtain >>> credentials without privilege they could not obtain without the >>> help of user namespaces. >>> >>> This meant testing the effective user ID and not the filesystem user >>> ID as setresuid and setregid allow setting any process uid or gid >>> (except the supplemental groups) to the effective ID. >>> >>> Furthermore to preserve in some form the useful applications that have >>> been setting gid_map without privilege the file /proc/[pid]/setgroups >>> was added to allow disabling setgroups. With the setgroups system >>> call permanently disabled in a user namespace it again becomes safe to >>> allow writes to gid_map without privilege. >>> >>> Here is my meager attempt to update user_namespaces.7 to reflect these >>> issues. >> >> It looked pretty serviceable as patch, IMO. So, thanks again. I've applied, >> tweaking some wordings afterward, but changing nothing essential. See below >> for a question. >> >>> Signed-off-by: "Eric W. Biederman" >>> --- >>> man7/user_namespaces.7 | 52 +++++++++++++++++++++++++++++++++++++++++++++++--- >>> 1 file changed, 49 insertions(+), 3 deletions(-) >>> >>> diff --git a/man7/user_namespaces.7 b/man7/user_namespaces.7 >>> index d76721d9a0a1..f8333a762308 100644 >>> --- a/man7/user_namespaces.7 >>> +++ b/man7/user_namespaces.7 >>> @@ -533,11 +533,16 @@ One of the following is true: >>> The data written to >>> .I uid_map >>> .RI ( gid_map ) >>> -consists of a single line that maps the writing process's filesystem user ID >>> +consists of a single line that maps the writing process's effective user ID >>> (group ID) in the parent user namespace to a user ID (group ID) >>> in the user namespace. >>> -The usual case here is that this single line provides a mapping for user ID >>> -of the process that created the namespace. >>> +The writing process must have the same effective user ID as the process >>> +that created the user namespace. >>> +In the case of >>> +.I gid_map >>> +the >>> +.I setgroups >>> +file must have been written to earlier and disabled the setgroups system call. >>> .IP * 3 >>> The opening process has the >>> .BR CAP_SETUID >>> @@ -552,6 +557,47 @@ Writes that violate the above rules fail with the error >>> .\" >>> .\" ============================================================ >>> .\" >>> +.SS Interaction with system calls that change the uid or gid values >>> +When in a user namespace where the >>> +.I uid_map >>> +or >>> +.I gid_map >>> +file has not been written the system calls that change user IDs >>> +or group IDs respectively will fail. After the >>> +.I uid_map >>> +and >>> +.I gid_map >>> +file have been written only the mapped values may be used in >>> +system calls that change user IDs and group IDs. >>> + >>> +For user IDs these system calls include >>> +.BR setuid , >>> +.BR setfsuid , >>> +.BR setreuid , >>> +and >>> +.BR setresuid . >>> + >>> +For group IDs these system calls include >>> +.BR setgid , >>> +.BR setfsgid , >>> +.BR setregid , >>> +.BR setresgid , >>> +and >>> +.BR setgroups. >>> + >>> +Writing >>> +.BR deny >>> +to the >>> +.I /proc/[pid]/setgroups >>> +file before writing to >>> +.I /proc/[pid]/gid_map >>> +will permanently disable the setgroups system call in a user namespace >>> +and allow writing to >>> +.I /proc/[pid]/gid_map >>> +without >>> +.BR CAP_SETGID >>> +in the parent user namespace. >> >> I just want to double check: you really did mean to write "*parent* namespace" >> above, right? Yes. At this point only privilege in the *parent* user namespace is meaningful, as applications in the new user namespace have all privileges. Eric -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/