All the mail mirrored from lore.kernel.org
 help / color / mirror / Atom feed
From: David Howells <dhowells@redhat.com>
To: Casey Schaufler <casey@schaufler-ca.com>
Cc: dhowells@redhat.com, linux-unionfs@vger.kernel.org,
	selinux@tycho.nsa.gov, linux-fsdevel@vger.kernel.org,
	linux-security-module@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH 0/7] Security: Provide unioned file support
Date: Thu, 06 Nov 2014 17:58:39 +0000	[thread overview]
Message-ID: <6108.1415296719@warthog.procyon.org.uk> (raw)
In-Reply-To: <545BB147.4000100@schaufler-ca.com>

Casey Schaufler <casey@schaufler-ca.com> wrote:

> I am going to have to look at this very carefully for the
> Smack implications. I cannot have a review done for several
> days. I do have some immediate comments below.

Note that Smack and Tomoyo won't compile with the patches as they are because
some changes will need to be made.  I haven't made them yet as I want to work
out the changes for SELinux first.

> >  (1) The docker source (ie. the lower layer) will all be under a single
> >  label.
> 
> What does this mean? Is the "lower layer" the "real" file, or something else?
> What is a "docker source"? What "single label" are you talking about, and
> where does it come from? What about LSMs that have multiple labels on a file?

Firstly, docker: https://www.docker.com/

What we're dealing with is unioning two filesystems.  The way it works is that
you start off with a "lower" filesystem that contains the basic files you want
to appear and you overlay on top of that another filesystem such that the
files and directories in the lower filesystem can be accessed through the
overlay (the overlay redirects queries to the lower fs).

So, say the lower fs is mounted on /foo and you mount an overlay on /bar that
points to /foo as its lower layer.  If you access /bar/bin/ls, the overlay
will pass that down, giving you a file referring to /foo/bin/ls.

The clever bit comes when you try altering /bar/bin/ls.  At that point
/foo/bin/ls is "copied up" to the overlay - to /bar/bin/ls becomes a real
file.  The writes are then made to the file in the overlay - and these files
are persistent.

In theory, any further access to /bar/bin/ls will then serve up the contents
of /bar/bin/ls and ignore /foo/bin/ls.  In practice, as things stand, if you
have a read-only fd already referring to /foo/bin/ls through /bar/bin/ls, this
will be unaffected by the copy up.

Docker uses containers and chroots to provide not-virtual-machines, using an
overlay to manage the root filesystem.  Indeed, you can provide several
overlays using the same lower fs.

So to answer your questions:

> What does this mean?

It has been decided that for the purposes of docker, all files within the
docker root fs will have the same label.  We'd have to provide policy
namespacing otherwise (I think).

> Is the "lower layer" the "real" file, or something else?

The lower layer is a filesystem, though it contains real files.  In the case
of unionmount (an alternative to overlayfs), there may be multiple ordered
lower layers.

> What is a "docker source"?

The lower layer contains the "source" files for your docker image.

> What "single label" are you talking about, and where does it come from?

The label you set on the lower layer files.

> What about LSMs that have multiple labels on a file?

Setting policy is something I'll have to leave to the docker people and the
administrators of systems that use docker.

But all I'm proposing is a way to give the LSM access to both the file in the
overlay and the file in the lower fs that is leeching through into the
overlay.

> >  (2) The docker root (ie. the overlay/union layer) will all be under a
> >      single, but different label set on the overlay mount (and each docker
> >      root may be under its own label).
> 
> No. Sorry, but this is the one notion that doesn't work. A layer should
> either be label transparent or restricted by some sort of range concept.
> Giving it a label just makes it necessary to grant everyone access to objects
> with that label.

The problem is that we're not using a virtual machine.  Labels on the docker
chroot and labels on the master root filesystem are under the same policy.

Further, we may have several docker instances that have separate overlays on
the same lower layer but should perhaps have separate labels.

> >  (3) Inodes in the overlayfs upper layer will be given the overlay label.
> 
> Could you explain your terminology? I have no idea what the "overlay label"
> might be. Is it the real one on the real filesystem? What about attributes
> other than the access label? Smack has execution labels and a transmute
> attribute as well as the access label.

The overlay label is the label on the inode in the overlay layer (overlayfs)
or that would be on the inode if it existed (unionmount).

> >  (6) An extra label slot will be placed in struct file_security_struct to
> >      hold the overlay label.
> 
> Are you assuming a single overlay layer? 

There can only be only overlay at the top.  It may have lower layers that are
also overlays, but we really want the top label.

David

WARNING: multiple messages have this Message-ID (diff)
From: David Howells <dhowells@redhat.com>
To: Casey Schaufler <casey@schaufler-ca.com>
Cc: linux-unionfs@vger.kernel.org, linux-kernel@vger.kernel.org,
	dhowells@redhat.com, linux-security-module@vger.kernel.org,
	selinux@tycho.nsa.gov, linux-fsdevel@vger.kernel.org
Subject: Re: [PATCH 0/7] Security: Provide unioned file support
Date: Thu, 06 Nov 2014 17:58:39 +0000	[thread overview]
Message-ID: <6108.1415296719@warthog.procyon.org.uk> (raw)
In-Reply-To: <545BB147.4000100@schaufler-ca.com>

Casey Schaufler <casey@schaufler-ca.com> wrote:

> I am going to have to look at this very carefully for the
> Smack implications. I cannot have a review done for several
> days. I do have some immediate comments below.

Note that Smack and Tomoyo won't compile with the patches as they are because
some changes will need to be made.  I haven't made them yet as I want to work
out the changes for SELinux first.

> >  (1) The docker source (ie. the lower layer) will all be under a single
> >  label.
> 
> What does this mean? Is the "lower layer" the "real" file, or something else?
> What is a "docker source"? What "single label" are you talking about, and
> where does it come from? What about LSMs that have multiple labels on a file?

Firstly, docker: https://www.docker.com/

What we're dealing with is unioning two filesystems.  The way it works is that
you start off with a "lower" filesystem that contains the basic files you want
to appear and you overlay on top of that another filesystem such that the
files and directories in the lower filesystem can be accessed through the
overlay (the overlay redirects queries to the lower fs).

So, say the lower fs is mounted on /foo and you mount an overlay on /bar that
points to /foo as its lower layer.  If you access /bar/bin/ls, the overlay
will pass that down, giving you a file referring to /foo/bin/ls.

The clever bit comes when you try altering /bar/bin/ls.  At that point
/foo/bin/ls is "copied up" to the overlay - to /bar/bin/ls becomes a real
file.  The writes are then made to the file in the overlay - and these files
are persistent.

In theory, any further access to /bar/bin/ls will then serve up the contents
of /bar/bin/ls and ignore /foo/bin/ls.  In practice, as things stand, if you
have a read-only fd already referring to /foo/bin/ls through /bar/bin/ls, this
will be unaffected by the copy up.

Docker uses containers and chroots to provide not-virtual-machines, using an
overlay to manage the root filesystem.  Indeed, you can provide several
overlays using the same lower fs.

So to answer your questions:

> What does this mean?

It has been decided that for the purposes of docker, all files within the
docker root fs will have the same label.  We'd have to provide policy
namespacing otherwise (I think).

> Is the "lower layer" the "real" file, or something else?

The lower layer is a filesystem, though it contains real files.  In the case
of unionmount (an alternative to overlayfs), there may be multiple ordered
lower layers.

> What is a "docker source"?

The lower layer contains the "source" files for your docker image.

> What "single label" are you talking about, and where does it come from?

The label you set on the lower layer files.

> What about LSMs that have multiple labels on a file?

Setting policy is something I'll have to leave to the docker people and the
administrators of systems that use docker.

But all I'm proposing is a way to give the LSM access to both the file in the
overlay and the file in the lower fs that is leeching through into the
overlay.

> >  (2) The docker root (ie. the overlay/union layer) will all be under a
> >      single, but different label set on the overlay mount (and each docker
> >      root may be under its own label).
> 
> No. Sorry, but this is the one notion that doesn't work. A layer should
> either be label transparent or restricted by some sort of range concept.
> Giving it a label just makes it necessary to grant everyone access to objects
> with that label.

The problem is that we're not using a virtual machine.  Labels on the docker
chroot and labels on the master root filesystem are under the same policy.

Further, we may have several docker instances that have separate overlays on
the same lower layer but should perhaps have separate labels.

> >  (3) Inodes in the overlayfs upper layer will be given the overlay label.
> 
> Could you explain your terminology? I have no idea what the "overlay label"
> might be. Is it the real one on the real filesystem? What about attributes
> other than the access label? Smack has execution labels and a transmute
> attribute as well as the access label.

The overlay label is the label on the inode in the overlay layer (overlayfs)
or that would be on the inode if it existed (unionmount).

> >  (6) An extra label slot will be placed in struct file_security_struct to
> >      hold the overlay label.
> 
> Are you assuming a single overlay layer? 

There can only be only overlay at the top.  It may have lower layers that are
also overlays, but we really want the top label.

David

  parent reply	other threads:[~2014-11-06 17:58 UTC|newest]

Thread overview: 89+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-11-05 15:42 [PATCH 0/7] Security: Provide unioned file support David Howells
2014-11-05 15:42 ` [PATCH 1/7] Security: Provide copy-up security hooks for unioned files David Howells
2014-11-06 17:46   ` Casey Schaufler
2014-11-07 14:49   ` David Howells
2014-11-07 14:49     ` David Howells
2014-11-07 21:22   ` Paul Moore
2014-11-07 21:22     ` Paul Moore
2014-11-07 22:10   ` David Howells
2014-11-07 22:10     ` David Howells
2014-11-10 15:28     ` Paul Moore
2014-11-10 15:28       ` Paul Moore
2014-11-05 15:42 ` [PATCH 2/7] Overlayfs: Use copy-up security hooks David Howells
2014-11-07 21:39   ` Paul Moore
2014-11-07 21:39     ` Paul Moore
2014-11-07 22:05   ` David Howells
2014-11-07 22:05     ` David Howells
2014-11-10 15:45     ` Paul Moore
2014-11-10 15:45       ` Paul Moore
2014-11-05 15:42 ` [PATCH 3/7] SELinux: Stub in copy-up handling David Howells
2014-11-07 21:44   ` Paul Moore
2014-11-07 21:44     ` Paul Moore
2014-11-07 22:08   ` David Howells
2014-11-07 22:08     ` David Howells
2014-11-10 15:47     ` Paul Moore
2014-11-10 15:47       ` Paul Moore
2014-11-05 15:42 ` [PATCH 4/7] Security: Pass the union-layer file path into security_file_open() David Howells
2014-11-05 15:43 ` [PATCH 5/7] SELinux: Handle opening of a unioned file David Howells
2014-11-05 16:35   ` Stephen Smalley
2014-11-06 12:03   ` David Howells
2014-11-06 12:03     ` David Howells
2014-11-06 13:13     ` Stephen Smalley
2014-11-06 13:13       ` Stephen Smalley
2014-11-06 13:34     ` David Howells
2014-11-06 13:34       ` David Howells
2014-11-27 14:15     ` David Howells
2014-11-27 14:15       ` David Howells
2014-11-06 12:27   ` David Howells
2014-11-06 12:27     ` David Howells
2014-11-06 12:27     ` David Howells
2014-11-27 17:25   ` David Howells
2014-11-27 17:25     ` David Howells
2015-06-12 15:30   ` David Howells
2015-06-12 15:30     ` David Howells
2015-06-15 12:57     ` Stephen Smalley
2015-06-15 12:57       ` Stephen Smalley
2015-06-16  9:41     ` David Howells
2015-06-16  9:41       ` David Howells
2015-06-16 16:49     ` David Howells
2015-06-16 16:49       ` David Howells
2015-06-16 17:20       ` Stephen Smalley
2015-06-16 17:20         ` Stephen Smalley
2015-06-16 21:34       ` David Howells
2015-06-16 21:34         ` David Howells
2015-06-17 14:44         ` Stephen Smalley
2015-06-17 14:44           ` Stephen Smalley
2015-06-18 10:15         ` David Howells
2015-06-18 10:15           ` David Howells
2015-06-18 12:48           ` Stephen Smalley
2015-06-18 12:48             ` Stephen Smalley
2015-06-18 15:26           ` David Howells
2015-06-18 15:26             ` David Howells
2015-06-18 10:32       ` David Howells
2015-06-18 10:32         ` David Howells
2015-06-18 12:16         ` Stephen Smalley
2015-06-18 12:16           ` Stephen Smalley
2014-11-05 15:43 ` [PATCH 6/7] SELinux: The copy-up operation must have read permission on the lower file David Howells
2014-11-05 16:43   ` Stephen Smalley
2014-11-05 17:54     ` Stephen Smalley
2014-11-06 13:39       ` Stephen Smalley
2014-11-27 14:17     ` David Howells
2014-11-27 14:17       ` David Howells
2014-11-27 14:21     ` David Howells
2014-11-27 14:21       ` David Howells
2014-11-27 14:21       ` David Howells
2014-11-05 15:43 ` [PATCH 7/7] SELinux: Check against union and lower labels for file ops on lower files David Howells
2014-11-06 17:35 ` [PATCH 0/7] Security: Provide unioned file support Casey Schaufler
2014-11-06 17:35   ` Casey Schaufler
2014-11-06 17:58 ` David Howells [this message]
2014-11-06 17:58   ` David Howells
2014-11-06 18:40   ` Casey Schaufler
2014-11-06 18:40     ` Casey Schaufler
2014-11-07 15:21   ` David Howells
2014-11-07 15:21     ` David Howells
2014-11-07 18:54     ` Daniel J Walsh
2014-11-07 18:54       ` Daniel J Walsh
2014-11-09  1:31       ` Casey Schaufler
2014-11-09  1:31         ` Casey Schaufler
2014-11-10 13:59         ` Daniel J Walsh
2014-11-10 13:59           ` Daniel J Walsh

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=6108.1415296719@warthog.procyon.org.uk \
    --to=dhowells@redhat.com \
    --cc=casey@schaufler-ca.com \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-security-module@vger.kernel.org \
    --cc=linux-unionfs@vger.kernel.org \
    --cc=selinux@tycho.nsa.gov \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.