On 2022/10/28 19:14, John Johansen wrote:
On 10/26/22 03:19, Tetsuo Handa wrote:
> On 2022/10/26 7:41, Casey Schaufler wrote:
>> You need a built-in LSM that loads and manages loadable
>> security modules.
>
> That is no longer loadable LSM modules. A loadable LSM module must be capable of
> loading any code and using any interface that is allowed to loadable kernel modules
> using /sbin/insmod command. That is my understanding of what you have promised (and
> the reason I am allowing you to continue working on LSM stacking before I make
> CONFIG_SECURITY_TOMOYO=m).
>
Tetsuo, think of it this way. LSM stacking is going to make it much easier for new
LSM modules because they won't automatically be excluded because one of the other
LSMs is needed.
The problem of loadable LSM modules is orthogonal, and Casey shouldn't need to
solve it in this patch series. That is further work to be taken up by another,
as Casey has clearly stated its work he is not interested in doing.
However the real problem you are trying to solve won't be solved by loadable LSM
modules, though they may help. Just having loadable LSMs modules won't mean a
distro will build an LSM as a loadable module instead of disabling it, nor does
it mean a distro will allow loading an out of tree LSM module. Even if the
upstream kernel doesn't provide an option to block loading them, distros will.
What do you think the background of
Ultimately the challenge is getting userspace developers to accept a
change that is not part of the upstream Linux Kernel and thus not
guaranteed under the usual "don't break userspace" kernel API promise.
is? I consider that the reason is because
We do care about userspace programs and users who are using userspace programs.
. If we don't care about userspace and users, we would not mind breaking APIs.
This reasoning is more stronger than "we don't care about out-of-tree code"
reasoning.
Distributors have rights to block loading loadable kernel modules which are
not included in upstream kernels. But for example Red Hat is not excising
the rights to block loading loadable kernel modules (e.g.
https://access.redhat.com/solutions/1376133 ). What do you think about the
reasons of not blocking loading loadable kernel modules which are not included
in upstream kernels? I consider that the reason is because
Allowing loadable kernel modules which cannot be supported by distributors
to exist and to be loaded into distributor kernels is more beneficial for
users.
That is, we have been allowing out-of-tree kernel code to exist because
out-of-tree kernel code can be beneficial for users despite distributors cannot
afford supporting out-of-tree kernel code.
If you really think that we have the rights to lock out out-of-tree kernel code
and/or disable loading of out-of-tree kernel code via /sbin/insmod, firstly achieve
(1) Disallow loading of non-GPL kernel modules. (It is a trivial change.)
(2) Disallow loading of out-of-tree kernel code via /sbin/insmod .
(I don't know how we can technically enforce such change. Unlike not assigning
LSM id value to LSM modules, we need to somehow be able to check whether an
arbitrary file is in-tree (e.g. forbid "git add some_file") and
unmodified
(e.g. forbid "patch -p1 < some_patch").
before you enforce requiring an LSM id value in order to register an LSM module.
I don't accept "I'm not interested in making such changes". It is your
duty to
achieve if you use "we don't care about out-of-tree code" as a rationale
for
requiring an LSM id value in order to register an LSM module.
Nowadays, many software is developed using programming languages which can generate code
for multiple operating systems. That is, people are getting indifferent with operating
systems they run their software. Then, what is an advantage of choosing Linux as
operating
systems for running their software, if Linux kernel does not provide freedom for
customization depending on user's needs?
As web application developers increases, developers who can understand C language (and
system call) are decreasing. As a result, it is getting more and more difficult to let
them
understand and manage fine-grained allowlisting-based access controls like SELinux. Then,
what is an advantage of choosing Linux as operating systems for running their software,
if
LSM does not provide freedom for using whatever simpler LSM modules users want?
Windows operating system provides WSL (Windows Subsystem for Linux) which allows running
CUI programs and servers which are designed for Linux. Windows users can run CUI programs
and servers without requiring real Linux kernels and can run GUI programs via Windows
kernels. Neither SELinux nor AppArmor is required for protecting programs/servers, for
antivirus software for Windows will provide protection. Then, what is an advantage of
using
real Linux kernels, if we cannot allow Linux kernels to use whatever LSM modules users
want?
I believe that it is time to get out of "we don't care about out-of-tree
code".
The "we don't care about out-of-tree code" reasoning is a brain freeze that
leads to
forget about users who still continue using Linux as platform for running their software.