Received: by 2002:ac0:a582:0:0:0:0:0 with SMTP id m2-v6csp584084imm; Wed, 3 Oct 2018 23:18:34 -0700 (PDT) X-Google-Smtp-Source: ACcGV63ImEJD8tIxY7XGJmn/3Z56kNiLFy55vb8RNhfelcdrlSD1fZ7ZD3Hztz4j2UMvoZCsGOv9 X-Received: by 2002:a63:81c8:: with SMTP id t191-v6mr4360351pgd.399.1538633914277; Wed, 03 Oct 2018 23:18:34 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1538633914; cv=none; d=google.com; s=arc-20160816; b=gaDVH+nEDDzw4kOqKSaqMy8r0a0drVF3WtNcREp81FaJsQGVfYr1wPfz+jUjTM3H6L Mlwt+rQPA7QoMBKstU1obHED9TMZ0b/+nKP3fFdHAcU8HqTsw3kNx4VWoiHbIMViaRUe jvix/RT8p14EQwwrnZEnY0BICTGi0lhY5csmaXQUfU1aG9hQF9dlq3FpOYIHYX46MlS6 r5UfPYKLyvswqtFkeQBqjESsTwTnbCL2KhhwnwhT/OoOZMJgz0N32oyNvK6BbZ/7haas fBaoN5pVM/kLHj20iqxU2ssAhUNUr8TyyFiW2HAQl4uDK6bW7DseiugLeeLox9VdQ3EQ e1eQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :content-language:in-reply-to:mime-version:user-agent:date :message-id:organization:autocrypt:openpgp:from:references:cc:to :subject; bh=LEw1M6Nzz8Cjhc1hMD+WN+NSqlNWqHEnTwV3eumSJYI=; b=llwhDjW849wwElAT9AseVOemarD7Uhf9dLQ9vsMGNxxdAe3tPALbQPoyYWWuQ2M4t3 MKr274BKNgGCJruIFSejn+MaFXMNLprNhZ1Dwso9OcvxkCS5BOCbw7JY8eV59Xvz5WGM b9Z7E0T0J8hiYOE8+DZdPHSQhcwr0f9PY9gRweOo1G5SVhF3HnmAKjZqXvvT803RF0Yy qqaHTgo5HyAJd7XJD5hIoJ8pDg+5xiLh04Z3vojyQhjpRBUglugP6tGt/6wMYVOr75VH k+jRyY8ZUx9xSKOhksQKPJW5viSsZtwj6Bd/wF2Bjl0+D5OCRikZtPTlDzrzBVCd9/Qi Bl/g== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=canonical.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id k25-v6si3408852pgl.239.2018.10.03.23.18.18; Wed, 03 Oct 2018 23:18:34 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=canonical.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727150AbeJDNJu (ORCPT + 99 others); Thu, 4 Oct 2018 09:09:50 -0400 Received: from youngberry.canonical.com ([91.189.89.112]:36471 "EHLO youngberry.canonical.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726808AbeJDNJt (ORCPT ); Thu, 4 Oct 2018 09:09:49 -0400 Received: from static-50-53-48-205.bvtn.or.frontiernet.net ([50.53.48.205] helo=[192.168.192.153]) by youngberry.canonical.com with esmtpsa (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.76) (envelope-from ) id 1g7wxZ-0002Ih-Ds; Thu, 04 Oct 2018 06:18:05 +0000 Subject: Re: [PATCH security-next v4 23/32] selinux: Remove boot parameter To: Kees Cook , James Morris Cc: Jordan Glover , Stephen Smalley , Paul Moore , Casey Schaufler , Tetsuo Handa , "Schaufler, Casey" , linux-security-module , Jonathan Corbet , "open list:DOCUMENTATION" , linux-arch , LKML References: <20181002005505.6112-1-keescook@chromium.org> <809f1cfd-077b-ee58-51ba-b22daf46d12b@tycho.nsa.gov> <5955f5ce-b803-4f58-8b07-54c291e33da5@canonical.com> From: John Johansen Openpgp: preference=signencrypt Autocrypt: addr=john.johansen@canonical.com; prefer-encrypt=mutual; keydata= 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 Organization: Canonical Message-ID: <88b0cc69-cd42-1798-6ce4-d3cfbbc79d83@canonical.com> Date: Wed, 3 Oct 2018 23:18:01 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.9.1 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-GB Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 10/03/2018 04:55 PM, Kees Cook wrote: > On Wed, Oct 3, 2018 at 2:34 PM, James Morris wrote: >> On Wed, 3 Oct 2018, Kees Cook wrote: >> >>> On Wed, Oct 3, 2018 at 11:28 AM, James Morris wrote: >>>> On Wed, 3 Oct 2018, Kees Cook wrote: >>>> >>>>> On Wed, Oct 3, 2018 at 11:17 AM, James Morris wrote: >>>>>> On Tue, 2 Oct 2018, John Johansen wrote: >>>>>>> To me a list like >>>>>>> lsm.enable=X,Y,Z >>>>>> >>>>>> What about even simpler: >>>>>> >>>>>> lsm=selinux,!apparmor,yama >>>>> >>>>> We're going to have lsm.order=, so I'd like to keep it with a dot >>>>> separator (this makes it more like module parameters, too). You want >>>>> to mix enable/disable in the same string? That implies you'd want >>>>> implicit enabling (i.e. it complements the builtin enabling), which is >>>>> opposite from what John wanted. >>>>> >>>> >>>> Why can't this be the order as well? >>> >>> That was covered extensively in the earlier threads. It boils down to >>> making sure we do not create a pattern of leaving LSMs disabled by >>> default when they are added to the kernel. The v1 series used >>> security= like this: >>> >>> + security= [SECURITY] An ordered comma-separated list of >>> + security modules to attempt to enable at boot. If >>> + this boot parameter is not specified, only the >>> + security modules asking for initialization will be >>> + enabled (see CONFIG_DEFAULT_SECURITY). Duplicate >>> + or invalid security modules will be ignored. The >>> + capability module is always loaded first, without >>> + regard to this parameter. >>> >>> This meant booting "security=apparmor" would disable all the other >>> LSMs, which wasn't friendly at all. So "security=" was left alone (to >>> leave it to only select the "major" LSM: all major LSMs not matching >>> "security=" would be disabled). So I proposed "lsm.order=" to specify >>> the order things were going to be initialized in, but to avoid kernels >>> booting with newly added LSMs forced-off due to not being listed in >>> "lsm.order=", it had to have implicit fall-back for unlisted LSMs. >>> (i.e. anything missing from lsm.order would then follow their order in >>> CONFIG_LSM_ORDER, and anything missing there would fall back to >>> link-time ordering.) However, then the objection was raised that this >>> didn't provide a way to explicitly disable an LSM. So I proposed >>> lsm.enable/disable, and John argued for CONFIG_LSM_ENABLE over >>> CONFIG_LSM_DISABLE. >> >> Ok, but it may end up being clearer, simpler, and thus more secure to just >> have a single way to configure LSM. >> >> For example: >> >> - All LSMs which are built are NOT enabled by default >> >> - You specify enablement and order via a Kconfig: >> >> CONFIG_LSM="selinux,yama" >> >> - This can be entirely overridden by a boot param: >> >> lsm="apparmor,landlock" > > This doesn't work with how SELinux and AppArmor do their bootparams, > unfortunately. (And Paul and Stephen have expressed that the > documented selinux on/off must continue to work.) For example, let's > say you've built an Ubuntu kernel with: > > CONFIG_SELINUX=y > ... > CONFIG_LSM="yama,apparmor" > > (i.e. you want SELinux available, but not enabled, so it's left out of > CONFIG_LSM) > > Then someone boots the system with: > > selinux=1 security=selinux > > In what order does selinux get initialized relative to yama? > (apparmor, flagged as a "legacy major", would have been disabled by > the "security=" not matching it.) > > > The LSM order needs to be defined externally to enablement because > something may become enabled when not listed in the order. > it doesn't have to be that way. The only argument I can see for ordering being separate from enablement are - the order doesn't matter to some LSMs but other LSMs (like landlock) need to be in a specific order. Separating the ordering from enablement means the user doesn't have to take this into account when overriding a default enablement. > Now, maybe I misunderstood your earlier suggestion, and what you meant > was to do something like: > > CONFIG_LSM="yama,apparmor,!selinux" > > to mean "put selinux here in the order, but don't enable it". Then the > problem becomes what happens to an LSM that has been built in but not > listed in CONFIG_LSM? > it should be disabled. I know that is not what we have today but does current behavior of splitting how minor and major LSM enablement is done was a mistake > Related to that, this means that when new LSMs are added, they will > need to be added to any custom CONFIG_LSM= or lsm= parameters. If > that's really how we have to go, I'll accept it, but I think it's a > bit unfriendly. :P > That is exactly was will happen in at least some distros. Distros are committed to maintaining a certain configuration. If some new LSM comes along it shouldn't change the support config until the distro can evaluate any interaction will the current supported configuration. As a concrete example, the Ubuntu hwe kernels (newer kernels on LTS releases, are going to want to specify the hwe kernel config is the same as the release kernel except for few well vetted exceptions. > Another reason I don't like it is because it requires users to know > about all the LSMs to make changes. One LSM can't be added/removed The don't have to know about all LSMs, but they do need to know what the distro has as default set. > without specifying ALL of the LSMs. (i.e. there is no trivial way to > enable/disable a single LSM without it growing its own enable/disable > code as in SELinux/AppArmor. I'd hoped to make that easier for both > users and developers.) Again, I can live with it, but I think it's > unfriendly. > well unfriendly to who, and define users :) - its probably unfriendly to the developer wanting to work with a specific LSM. - a user messing with the different LSMs, yeah probably - a regular user, generally shouldn't have to know. - a distro trying to support a specific configuration, very much wants to define what is enabled/supported. Whether through individual LSM logic, or a centralized place > I just want to have a direct I can go that meets all the requirements. > :) I'm fine to ignore my sense of aesthetics if everyone can agree on > the code. > >> And that's it. >> >> Of course, capabilities is always enabled and not be visible to kconfig or >> boot params. > > Correct. I've made sure that's true in all the versions. > > BTW, there doesn't seem to be disagreement about the earlier part of > the series, though (patches 1-10). Could these go into -next just so I > don't have to keep sending them? :) > > LSM: Correctly announce start of LSM initialization > vmlinux.lds.h: Avoid copy/paste of security_init section > LSM: Rename .security_initcall section to .lsm_info > LSM: Remove initcall tracing > LSM: Convert from initcall to struct lsm_info > vmlinux.lds.h: Move LSM_TABLE into INIT_DATA > LSM: Convert security_initcall() into DEFINE_LSM() > LSM: Record LSM name in struct lsm_info > LSM: Provide init debugging infrastructure > LSM: Don't ignore initialization failures > > Thanks! > > -Kees >