From: Casey Schaufler <casey@schaufler-ca.com> To: David Howells <dhowells@redhat.com>, linux-unionfs@vger.kernel.org, selinux@tycho.nsa.gov Cc: linux-fsdevel@vger.kernel.org, linux-security-module@vger.kernel.org, linux-kernel@vger.kernel.org, Casey Schaufler <casey@schaufler-ca.com> Subject: Re: [PATCH 0/7] Security: Provide unioned file support Date: Thu, 06 Nov 2014 09:35:03 -0800 [thread overview] Message-ID: <545BB147.4000100@schaufler-ca.com> (raw) In-Reply-To: <20141105154217.2555.578.stgit@warthog.procyon.org.uk> On 11/5/2014 7:42 AM, David Howells wrote: > The attached patches provide security support for unioned files where the > security involves an object-label-based LSM (such as SELinux) rather than a > path-based LSM. 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. > > There are two problems that need addressing: > > (1) The files that the user accesses through the overlayfs filesystem don't > really exist there. Overlayfs passes the accesses directly through to > the underlying upper or lower file by means of having the dentry_open > inode op redirect where file->f_path and file->f_inode point. > > This means that SELinux (or similar) will see the security label on one > lower layer or the other - and not the label on the overlay. There are > three labels and all may be different. > > (2) file->f_path *should* point at the overlay dentry and file->f_inode > should point at the lower layer inode. > > I'm not addressing (2) in this series of patches, but will leave that to a > separate patch series. > > > After some discussion with docker people, the agreed theory of operation will > be: > > (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? > (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. > > (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. > > (4) A security_copy_up() operation will be provided to set the label on the > upper inode when it is created. > > (5) A security_copy_up_xattr() operation will be provided to vet (and maybe > modify) each xattr as it is copied up. > > (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? > > (7) security_file_open() will need to be given both the overlay and lower > dentries. > > For overlayfs, the way this probably should be done is file->f_path should > be set to point to the overlay dentry (thus getting /proc right) and > file->f_inode to the lower file and make use of d_fallthru in the overlay > dentry in common with unionmount. > > (8) When the lower file is accessed, both the lower and overlay labels should > be checked and audited. > > (9) When the upper file is accessed, only the overlay label needs to be > checked and audited. > > I need someone to examine the SELinux bits and have a look to see whether I > need to make further checks. The Smack code, too. Oh, and I have been lead to believe that upcoming AppArmor enhancements could be affected as well. > > > The patches can be found here also: > > http://git.kernel.org/cgit/linux/kernel/git/dhowells/linux-fs.git/log/?h=overlayfs > > This is based on part of Al Viro's vfs/for-next branch. > > David > --- > David Howells (7): > Security: Provide copy-up security hooks for unioned files > Overlayfs: Use copy-up security hooks > SELinux: Stub in copy-up handling > Security: Pass the union-layer file path into security_file_open() > SELinux: Handle opening of a unioned file > SELinux: The copy-up operation must have read permission on the lower file > SELinux: Check against union and lower labels for file ops on lower files > > > fs/ceph/file.c | 3 + > fs/ceph/super.h | 1 > fs/cifs/cifsfs.h | 1 > fs/cifs/dir.c | 3 + > fs/namei.c | 11 +++-- > fs/nfs/dir.c | 6 ++ > fs/nfs/nfs4_fs.h | 2 - > fs/open.c | 31 ++++++++----- > fs/overlayfs/copy_up.c | 12 +++++ > fs/overlayfs/inode.c | 8 ++- > include/linux/fs.h | 16 +++++-- > include/linux/security.h | 43 +++++++++++++++++- > security/capability.c | 17 +++++++ > security/security.c | 19 +++++++- > security/selinux/hooks.c | 89 +++++++++++++++++++++++++++++++++++-- > security/selinux/include/objsec.h | 1 > 16 files changed, 228 insertions(+), 35 deletions(-) > > -- > To unsubscribe from this list: send the line "unsubscribe linux-security-module" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html >
WARNING: multiple messages have this Message-ID (diff)
From: Casey Schaufler <casey@schaufler-ca.com> To: David Howells <dhowells@redhat.com>, linux-unionfs@vger.kernel.org, selinux@tycho.nsa.gov Cc: 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 09:35:03 -0800 [thread overview] Message-ID: <545BB147.4000100@schaufler-ca.com> (raw) In-Reply-To: <20141105154217.2555.578.stgit@warthog.procyon.org.uk> On 11/5/2014 7:42 AM, David Howells wrote: > The attached patches provide security support for unioned files where the > security involves an object-label-based LSM (such as SELinux) rather than a > path-based LSM. 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. > > There are two problems that need addressing: > > (1) The files that the user accesses through the overlayfs filesystem don't > really exist there. Overlayfs passes the accesses directly through to > the underlying upper or lower file by means of having the dentry_open > inode op redirect where file->f_path and file->f_inode point. > > This means that SELinux (or similar) will see the security label on one > lower layer or the other - and not the label on the overlay. There are > three labels and all may be different. > > (2) file->f_path *should* point at the overlay dentry and file->f_inode > should point at the lower layer inode. > > I'm not addressing (2) in this series of patches, but will leave that to a > separate patch series. > > > After some discussion with docker people, the agreed theory of operation will > be: > > (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? > (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. > > (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. > > (4) A security_copy_up() operation will be provided to set the label on the > upper inode when it is created. > > (5) A security_copy_up_xattr() operation will be provided to vet (and maybe > modify) each xattr as it is copied up. > > (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? > > (7) security_file_open() will need to be given both the overlay and lower > dentries. > > For overlayfs, the way this probably should be done is file->f_path should > be set to point to the overlay dentry (thus getting /proc right) and > file->f_inode to the lower file and make use of d_fallthru in the overlay > dentry in common with unionmount. > > (8) When the lower file is accessed, both the lower and overlay labels should > be checked and audited. > > (9) When the upper file is accessed, only the overlay label needs to be > checked and audited. > > I need someone to examine the SELinux bits and have a look to see whether I > need to make further checks. The Smack code, too. Oh, and I have been lead to believe that upcoming AppArmor enhancements could be affected as well. > > > The patches can be found here also: > > http://git.kernel.org/cgit/linux/kernel/git/dhowells/linux-fs.git/log/?h=overlayfs > > This is based on part of Al Viro's vfs/for-next branch. > > David > --- > David Howells (7): > Security: Provide copy-up security hooks for unioned files > Overlayfs: Use copy-up security hooks > SELinux: Stub in copy-up handling > Security: Pass the union-layer file path into security_file_open() > SELinux: Handle opening of a unioned file > SELinux: The copy-up operation must have read permission on the lower file > SELinux: Check against union and lower labels for file ops on lower files > > > fs/ceph/file.c | 3 + > fs/ceph/super.h | 1 > fs/cifs/cifsfs.h | 1 > fs/cifs/dir.c | 3 + > fs/namei.c | 11 +++-- > fs/nfs/dir.c | 6 ++ > fs/nfs/nfs4_fs.h | 2 - > fs/open.c | 31 ++++++++----- > fs/overlayfs/copy_up.c | 12 +++++ > fs/overlayfs/inode.c | 8 ++- > include/linux/fs.h | 16 +++++-- > include/linux/security.h | 43 +++++++++++++++++- > security/capability.c | 17 +++++++ > security/security.c | 19 +++++++- > security/selinux/hooks.c | 89 +++++++++++++++++++++++++++++++++++-- > security/selinux/include/objsec.h | 1 > 16 files changed, 228 insertions(+), 35 deletions(-) > > -- > To unsubscribe from this list: send the line "unsubscribe linux-security-module" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html >
next prev parent reply other threads:[~2014-11-06 17:34 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 ` Casey Schaufler [this message] 2014-11-06 17:35 ` [PATCH 0/7] Security: Provide unioned file support Casey Schaufler 2014-11-06 17:58 ` David Howells 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=545BB147.4000100@schaufler-ca.com \ --to=casey@schaufler-ca.com \ --cc=dhowells@redhat.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: linkBe 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.