All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stephen Smalley <sds@tycho.nsa.gov>
To: Seth Forshee <seth.forshee@canonical.com>
Cc: Serge Hallyn <serge.hallyn@canonical.com>,
	selinux@tycho.nsa.gov, linux-kernel@vger.kernel.org,
	Andy Lutomirski <luto@amacapital.net>,
	linux-security-module@vger.kernel.org,
	Alexander Viro <viro@zeniv.linux.org.uk>,
	James Morris <james.l.morris@oracle.com>,
	linux-fsdevel@vger.kernel.org
Subject: Re: [PATCH 6/7] selinux: Ignore security labels on user namespace mounts
Date: Wed, 22 Jul 2015 16:40:29 -0400	[thread overview]
Message-ID: <55AFFFBD.8040907@tycho.nsa.gov> (raw)
In-Reply-To: <55AFFC32.6070701@tycho.nsa.gov>

On 07/22/2015 04:25 PM, Stephen Smalley wrote:
> On 07/22/2015 12:14 PM, Seth Forshee wrote:
>> On Wed, Jul 22, 2015 at 12:02:13PM -0400, Stephen Smalley wrote:
>>> On 07/16/2015 09:23 AM, Stephen Smalley wrote:
>>>> On 07/15/2015 03:46 PM, Seth Forshee wrote:
>>>>> Unprivileged users should not be able to supply security labels
>>>>> in filesystems, nor should they be able to supply security
>>>>> contexts in unprivileged mounts. For any mount where s_user_ns is
>>>>> not init_user_ns, force the use of SECURITY_FS_USE_NONE behavior
>>>>> and return EPERM if any contexts are supplied in the mount
>>>>> options.
>>>>>
>>>>> Signed-off-by: Seth Forshee <seth.forshee@canonical.com>
>>>>
>>>> I think this is obsoleted by the subsequent discussion, but just for the
>>>> record: this patch would cause the files in the userns mount to be left
>>>> with the "unlabeled" label, and therefore under typical policies,
>>>> completely inaccessible to any process in a confined domain.
>>>
>>> The right way to handle this for SELinux would be to automatically use
>>> mountpoint labeling (SECURITY_FS_USE_MNTPOINT, normally set by
>>> specifying a context= mount option), with the sbsec->mntpoint_sid set
>>> from some related object (e.g. the block device file context, as in your
>>> patches for Smack).  That will cause SELinux to use that value instead
>>> of any xattr value from the filesystem and will cause attempts by
>>> userspace to set the security.selinux xattr to fail on that filesystem.
>>>  That is how SELinux normally deals with untrusted filesystems, except
>>> that it is normally specified as a mount option by a trusted mounting
>>> process, whereas in your case you need to automatically set it.
>>
>> Excellent, thank you for the advice. I'll start on this when I've
>> finished with Smack.
> 
> Not tested, but something like this should work. Note that it should
> come after the call to security_fs_use() so we know whether SELinux
> would even try to use xattrs supplied by the filesystem in the first place.
> 
> diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c
> index 564079c..84da3a2 100644
> --- a/security/selinux/hooks.c
> +++ b/security/selinux/hooks.c
> @@ -745,6 +745,30 @@ static int selinux_set_mnt_opts(struct super_block *sb,
>                         goto out;
>                 }
>         }
> +
> +       /*
> +        * If this is a user namespace mount, no contexts are allowed
> +        * on the command line and security labels must be ignored.
> +        */
> +       if (sb->s_user_ns != &init_user_ns) {
> +               if (context_sid || fscontext_sid || rootcontext_sid ||
> +                   defcontext_sid) {
> +                       rc = -EACCES;
> +                       goto out;
> +               }
> +               if (sbsec->behavior == SECURITY_FS_USE_XATTR) {
> +                       struct block_device *bdev = sb->s_bdev;
> +                       sbsec->behavior = SECURITY_FS_USE_MNTPOINT;
> +                       if (bdev) {
> +                               struct inode_security_struct *isec =
> bdev->bd_inode;

That should be bdev->bd_inode->i_security.

> +                               sbsec->mntpoint_sid = isec->sid;
> +                       } else {
> +                               sbsec->mntpoint_sid = current_sid();
> +                       }
> +               }
> +               goto out_set_opts;
> +       }
> +
>         /* sets the context of the superblock for the fs being mounted. */
>         if (fscontext_sid) {
>                 rc = may_context_mount_sb_relabel(fscontext_sid, sbsec,
> cred);
> @@ -813,6 +837,7 @@ static int selinux_set_mnt_opts(struct super_block *sb,
>                 sbsec->def_sid = defcontext_sid;
>         }
> 
> +out_set_opts:
>         rc = sb_finish_set_opts(sb);
>  out:
>         mutex_unlock(&sbsec->lock);
> 
> _______________________________________________
> Selinux mailing list
> Selinux@tycho.nsa.gov
> To unsubscribe, send email to Selinux-leave@tycho.nsa.gov.
> To get help, send an email containing "help" to Selinux-request@tycho.nsa.gov.
> 


WARNING: multiple messages have this Message-ID (diff)
From: Stephen Smalley <sds@tycho.nsa.gov>
To: Seth Forshee <seth.forshee@canonical.com>
Cc: Serge Hallyn <serge.hallyn@canonical.com>,
	James Morris <james.l.morris@oracle.com>,
	linux-kernel@vger.kernel.org,
	Andy Lutomirski <luto@amacapital.net>,
	linux-security-module@vger.kernel.org,
	Alexander Viro <viro@zeniv.linux.org.uk>,
	selinux@tycho.nsa.gov, linux-fsdevel@vger.kernel.org
Subject: Re: [PATCH 6/7] selinux: Ignore security labels on user namespace mounts
Date: Wed, 22 Jul 2015 16:40:29 -0400	[thread overview]
Message-ID: <55AFFFBD.8040907@tycho.nsa.gov> (raw)
In-Reply-To: <55AFFC32.6070701@tycho.nsa.gov>

On 07/22/2015 04:25 PM, Stephen Smalley wrote:
> On 07/22/2015 12:14 PM, Seth Forshee wrote:
>> On Wed, Jul 22, 2015 at 12:02:13PM -0400, Stephen Smalley wrote:
>>> On 07/16/2015 09:23 AM, Stephen Smalley wrote:
>>>> On 07/15/2015 03:46 PM, Seth Forshee wrote:
>>>>> Unprivileged users should not be able to supply security labels
>>>>> in filesystems, nor should they be able to supply security
>>>>> contexts in unprivileged mounts. For any mount where s_user_ns is
>>>>> not init_user_ns, force the use of SECURITY_FS_USE_NONE behavior
>>>>> and return EPERM if any contexts are supplied in the mount
>>>>> options.
>>>>>
>>>>> Signed-off-by: Seth Forshee <seth.forshee@canonical.com>
>>>>
>>>> I think this is obsoleted by the subsequent discussion, but just for the
>>>> record: this patch would cause the files in the userns mount to be left
>>>> with the "unlabeled" label, and therefore under typical policies,
>>>> completely inaccessible to any process in a confined domain.
>>>
>>> The right way to handle this for SELinux would be to automatically use
>>> mountpoint labeling (SECURITY_FS_USE_MNTPOINT, normally set by
>>> specifying a context= mount option), with the sbsec->mntpoint_sid set
>>> from some related object (e.g. the block device file context, as in your
>>> patches for Smack).  That will cause SELinux to use that value instead
>>> of any xattr value from the filesystem and will cause attempts by
>>> userspace to set the security.selinux xattr to fail on that filesystem.
>>>  That is how SELinux normally deals with untrusted filesystems, except
>>> that it is normally specified as a mount option by a trusted mounting
>>> process, whereas in your case you need to automatically set it.
>>
>> Excellent, thank you for the advice. I'll start on this when I've
>> finished with Smack.
> 
> Not tested, but something like this should work. Note that it should
> come after the call to security_fs_use() so we know whether SELinux
> would even try to use xattrs supplied by the filesystem in the first place.
> 
> diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c
> index 564079c..84da3a2 100644
> --- a/security/selinux/hooks.c
> +++ b/security/selinux/hooks.c
> @@ -745,6 +745,30 @@ static int selinux_set_mnt_opts(struct super_block *sb,
>                         goto out;
>                 }
>         }
> +
> +       /*
> +        * If this is a user namespace mount, no contexts are allowed
> +        * on the command line and security labels must be ignored.
> +        */
> +       if (sb->s_user_ns != &init_user_ns) {
> +               if (context_sid || fscontext_sid || rootcontext_sid ||
> +                   defcontext_sid) {
> +                       rc = -EACCES;
> +                       goto out;
> +               }
> +               if (sbsec->behavior == SECURITY_FS_USE_XATTR) {
> +                       struct block_device *bdev = sb->s_bdev;
> +                       sbsec->behavior = SECURITY_FS_USE_MNTPOINT;
> +                       if (bdev) {
> +                               struct inode_security_struct *isec =
> bdev->bd_inode;

That should be bdev->bd_inode->i_security.

> +                               sbsec->mntpoint_sid = isec->sid;
> +                       } else {
> +                               sbsec->mntpoint_sid = current_sid();
> +                       }
> +               }
> +               goto out_set_opts;
> +       }
> +
>         /* sets the context of the superblock for the fs being mounted. */
>         if (fscontext_sid) {
>                 rc = may_context_mount_sb_relabel(fscontext_sid, sbsec,
> cred);
> @@ -813,6 +837,7 @@ static int selinux_set_mnt_opts(struct super_block *sb,
>                 sbsec->def_sid = defcontext_sid;
>         }
> 
> +out_set_opts:
>         rc = sb_finish_set_opts(sb);
>  out:
>         mutex_unlock(&sbsec->lock);
> 
> _______________________________________________
> Selinux mailing list
> Selinux@tycho.nsa.gov
> To unsubscribe, send email to Selinux-leave@tycho.nsa.gov.
> To get help, send an email containing "help" to Selinux-request@tycho.nsa.gov.
> 

  reply	other threads:[~2015-07-22 20:42 UTC|newest]

Thread overview: 210+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-07-15 19:46 [PATCH 0/7] Initial support for user namespace owned mounts Seth Forshee
2015-07-15 19:46 ` Seth Forshee
2015-07-15 19:46 ` [PATCH 1/7] fs: Add user namesapace member to struct super_block Seth Forshee
2015-07-15 19:46   ` Seth Forshee
2015-07-16  2:47   ` Eric W. Biederman
2015-07-16  2:47     ` Eric W. Biederman
2015-08-05 21:03     ` Seth Forshee
2015-08-05 21:03       ` Seth Forshee
2015-08-05 21:19       ` Eric W. Biederman
2015-08-05 21:19         ` Eric W. Biederman
2015-08-06 14:20         ` Seth Forshee
2015-08-06 14:20           ` Seth Forshee
2015-08-06 14:51           ` Stephen Smalley
2015-08-06 14:51             ` Stephen Smalley
2015-08-06 15:44             ` Seth Forshee
2015-08-06 15:44               ` Seth Forshee
2015-08-06 16:11               ` Stephen Smalley
2015-08-06 16:11                 ` Stephen Smalley
2015-08-07 14:16                 ` Seth Forshee
2015-08-07 14:16                   ` Seth Forshee
2015-08-07 14:32           ` Seth Forshee
2015-08-07 14:32             ` Seth Forshee
2015-08-07 18:35             ` Casey Schaufler
2015-08-07 18:35               ` Casey Schaufler
2015-08-07 18:57               ` Seth Forshee
2015-08-07 18:57                 ` Seth Forshee
2015-07-15 19:46 ` [PATCH 2/7] userns: Simpilify MNT_NODEV handling Seth Forshee
2015-07-15 19:46   ` Seth Forshee
2015-07-15 19:46 ` [PATCH 3/7] fs: Ignore file caps in mounts from other user namespaces Seth Forshee
2015-07-15 19:46   ` Seth Forshee
2015-07-15 21:48   ` Serge E. Hallyn
2015-07-15 21:48     ` Serge E. Hallyn
2015-07-15 21:50     ` Andy Lutomirski
2015-07-15 21:50       ` Andy Lutomirski
2015-07-15 22:35       ` Eric W. Biederman
2015-07-15 22:35         ` Eric W. Biederman
2015-07-16  1:14         ` Seth Forshee
2015-07-16  1:14           ` Seth Forshee
2015-07-16  1:23           ` Andy Lutomirski
2015-07-16  1:23             ` Andy Lutomirski
2015-07-16 13:06             ` Seth Forshee
2015-07-16 13:06               ` Seth Forshee
2015-07-16  1:19         ` Andy Lutomirski
2015-07-16  1:19           ` Andy Lutomirski
2015-07-16  4:23           ` Eric W. Biederman
2015-07-16  4:23             ` Eric W. Biederman
2015-07-16  4:49             ` Andy Lutomirski
2015-07-16  4:49               ` Andy Lutomirski
2015-07-16  5:04               ` Eric W. Biederman
2015-07-16  5:04                 ` Eric W. Biederman
2015-07-16  5:15                 ` Andy Lutomirski
2015-07-16  5:15                   ` Andy Lutomirski
2015-07-16  5:44                   ` Eric W. Biederman
2015-07-16  5:44                     ` Eric W. Biederman
2015-07-16 13:13                     ` Seth Forshee
2015-07-16 13:13                       ` Seth Forshee
2015-07-17  0:43                       ` Eric W. Biederman
2015-07-17  0:43                         ` Eric W. Biederman
2015-07-29 16:04                 ` Serge E. Hallyn
2015-07-29 16:04                   ` Serge E. Hallyn
2015-07-29 16:18                   ` Serge E. Hallyn
2015-07-29 16:18                     ` Serge E. Hallyn
2015-07-15 19:46 ` [PATCH 4/7] fs: Treat foreign mounts as nosuid Seth Forshee
2015-07-15 19:46   ` Seth Forshee
2015-07-17  6:46   ` Nikolay Borisov
2015-07-17  6:46     ` Nikolay Borisov
2015-07-15 19:46 ` [PATCH 5/7] security: Restrict security attribute updates for userns mounts Seth Forshee
2015-07-15 19:46   ` Seth Forshee
2015-07-15 19:46 ` [PATCH 6/7] selinux: Ignore security labels on user namespace mounts Seth Forshee
2015-07-15 19:46   ` Seth Forshee
2015-07-16 13:23   ` Stephen Smalley
2015-07-22 16:02     ` Stephen Smalley
2015-07-22 16:14       ` Seth Forshee
2015-07-22 16:14         ` Seth Forshee
2015-07-22 20:25         ` Stephen Smalley
2015-07-22 20:25           ` Stephen Smalley
2015-07-22 20:40           ` Stephen Smalley [this message]
2015-07-22 20:40             ` Stephen Smalley
2015-07-23 13:57             ` Stephen Smalley
2015-07-23 13:57               ` Stephen Smalley
2015-07-23 14:39               ` Seth Forshee
2015-07-23 14:39                 ` Seth Forshee
2015-07-23 15:36                 ` Stephen Smalley
2015-07-23 15:36                   ` Stephen Smalley
2015-07-23 16:23                   ` Seth Forshee
2015-07-23 16:23                     ` Seth Forshee
2015-07-24 15:11                     ` Seth Forshee
2015-07-24 15:11                       ` Seth Forshee
2015-07-30 15:57                       ` Stephen Smalley
2015-07-30 15:57                         ` Stephen Smalley
2015-07-30 16:24                         ` Seth Forshee
2015-07-30 16:24                           ` Seth Forshee
2015-07-15 19:46 ` [PATCH 7/7] smack: Don't use security labels for " Seth Forshee
2015-07-15 19:46   ` Seth Forshee
2015-07-15 20:43   ` Casey Schaufler
2015-07-15 20:43     ` Casey Schaufler
2015-07-15 20:36 ` [PATCH 0/7] Initial support for user namespace owned mounts Casey Schaufler
2015-07-15 20:36   ` Casey Schaufler
2015-07-15 21:06   ` Eric W. Biederman
2015-07-15 21:06     ` Eric W. Biederman
2015-07-15 21:48     ` Seth Forshee
2015-07-15 21:48       ` Seth Forshee
2015-07-15 22:28       ` Eric W. Biederman
2015-07-15 22:28         ` Eric W. Biederman
2015-07-16  1:05         ` Andy Lutomirski
2015-07-16  1:05           ` Andy Lutomirski
2015-07-16  2:20           ` Eric W. Biederman
2015-07-16  2:20             ` Eric W. Biederman
2015-07-16 13:12           ` Stephen Smalley
2015-07-16 13:12             ` Stephen Smalley
2015-07-15 23:04       ` Casey Schaufler
2015-07-15 23:04         ` Casey Schaufler
2015-07-15 22:39     ` Casey Schaufler
2015-07-15 22:39       ` Casey Schaufler
2015-07-16  1:08       ` Andy Lutomirski
2015-07-16  1:08         ` Andy Lutomirski
2015-07-16  2:54         ` Casey Schaufler
2015-07-16  2:54           ` Casey Schaufler
2015-07-16  4:47           ` Eric W. Biederman
2015-07-16  4:47             ` Eric W. Biederman
2015-07-17  0:09             ` Dave Chinner
2015-07-17  0:09               ` Dave Chinner
2015-07-17  0:42               ` Eric W. Biederman
2015-07-17  0:42                 ` Eric W. Biederman
2015-07-17  2:47                 ` Dave Chinner
2015-07-17  2:47                   ` Dave Chinner
2015-07-21 17:37                   ` J. Bruce Fields
2015-07-21 17:37                     ` J. Bruce Fields
2015-07-22  7:56                     ` Dave Chinner
2015-07-22  7:56                       ` Dave Chinner
2015-07-22 14:09                       ` J. Bruce Fields
2015-07-22 14:09                         ` J. Bruce Fields
2015-07-22 16:52                         ` Austin S Hemmelgarn
2015-07-22 16:52                           ` Austin S Hemmelgarn
2015-07-22 17:41                           ` J. Bruce Fields
2015-07-22 17:41                             ` J. Bruce Fields
2015-07-23  1:51                             ` Dave Chinner
2015-07-23  1:51                               ` Dave Chinner
2015-07-23 13:19                               ` J. Bruce Fields
2015-07-23 13:19                                 ` J. Bruce Fields
2015-07-23 23:48                                 ` Dave Chinner
2015-07-23 23:48                                   ` Dave Chinner
2015-07-18  0:07                 ` Serge E. Hallyn
2015-07-18  0:07                   ` Serge E. Hallyn
2015-07-20 17:54             ` Colin Walters
2015-07-20 17:54               ` Colin Walters
2015-07-16 11:16     ` Lukasz Pawelczyk
2015-07-16 11:16       ` Lukasz Pawelczyk
2015-07-17  0:10       ` Eric W. Biederman
2015-07-17  0:10         ` Eric W. Biederman
2015-07-17 10:13         ` Lukasz Pawelczyk
2015-07-17 10:13           ` Lukasz Pawelczyk
2015-07-16  3:15 ` Eric W. Biederman
2015-07-16  3:15   ` Eric W. Biederman
2015-07-16 13:59   ` Seth Forshee
2015-07-16 13:59     ` Seth Forshee
2015-07-16 15:09     ` Casey Schaufler
2015-07-16 15:09       ` Casey Schaufler
2015-07-16 18:57       ` Seth Forshee
2015-07-16 18:57         ` Seth Forshee
2015-07-16 21:42         ` Casey Schaufler
2015-07-16 21:42           ` Casey Schaufler
2015-07-16 22:27           ` Andy Lutomirski
2015-07-16 22:27             ` Andy Lutomirski
2015-07-16 23:08             ` Casey Schaufler
2015-07-16 23:08               ` Casey Schaufler
2015-07-16 23:29               ` Andy Lutomirski
2015-07-16 23:29                 ` Andy Lutomirski
2015-07-17  0:45                 ` Casey Schaufler
2015-07-17  0:45                   ` Casey Schaufler
2015-07-17  0:59                   ` Andy Lutomirski
2015-07-17  0:59                     ` Andy Lutomirski
2015-07-17 14:28                     ` Serge E. Hallyn
2015-07-17 14:28                       ` Serge E. Hallyn
2015-07-17 14:56                       ` Seth Forshee
2015-07-17 14:56                         ` Seth Forshee
2015-07-21 20:35                     ` Seth Forshee
2015-07-21 20:35                       ` Seth Forshee
2015-07-22  1:52                       ` Casey Schaufler
2015-07-22  1:52                         ` Casey Schaufler
2015-07-22 15:56                         ` Seth Forshee
2015-07-22 15:56                           ` Seth Forshee
2015-07-22 18:10                           ` Casey Schaufler
2015-07-22 18:10                             ` Casey Schaufler
2015-07-22 19:32                             ` Seth Forshee
2015-07-22 19:32                               ` Seth Forshee
2015-07-23  0:05                               ` Casey Schaufler
2015-07-23  0:05                                 ` Casey Schaufler
2015-07-23  0:15                                 ` Eric W. Biederman
2015-07-23  0:15                                   ` Eric W. Biederman
2015-07-23  5:15                                   ` Seth Forshee
2015-07-23  5:15                                     ` Seth Forshee
2015-07-23 21:48                                   ` Casey Schaufler
2015-07-23 21:48                                     ` Casey Schaufler
2015-07-28 20:40                                 ` Seth Forshee
2015-07-28 20:40                                   ` Seth Forshee
2015-07-30 16:18                                   ` Casey Schaufler
2015-07-30 16:18                                     ` Casey Schaufler
2015-07-30 17:05                                     ` Eric W. Biederman
2015-07-30 17:05                                       ` Eric W. Biederman
2015-07-30 17:25                                       ` Seth Forshee
2015-07-30 17:25                                         ` Seth Forshee
2015-07-30 17:33                                         ` Eric W. Biederman
2015-07-30 17:33                                           ` Eric W. Biederman
2015-07-17 13:21           ` Seth Forshee
2015-07-17 13:21             ` Seth Forshee
2015-07-17 17:14             ` Casey Schaufler
2015-07-17 17:14               ` Casey Schaufler
2015-07-16 15:59     ` Seth Forshee
2015-07-16 15:59       ` Seth Forshee

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=55AFFFBD.8040907@tycho.nsa.gov \
    --to=sds@tycho.nsa.gov \
    --cc=james.l.morris@oracle.com \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-security-module@vger.kernel.org \
    --cc=luto@amacapital.net \
    --cc=selinux@tycho.nsa.gov \
    --cc=serge.hallyn@canonical.com \
    --cc=seth.forshee@canonical.com \
    --cc=viro@zeniv.linux.org.uk \
    /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.