From: Seth Forshee <seth.forshee-Z7WLFzj8eWMS+FvcfC7Uqw@public.gmane.org> To: "Eric W. Biederman" <ebiederm-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org>, Serge Hallyn <serge.hallyn-Z7WLFzj8eWMS+FvcfC7Uqw@public.gmane.org>, James Morris <james.l.morris-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org>, "Serge E. Hallyn" <serge-A9i7LUbDfNHQT0dZR+AlfA@public.gmane.org> Cc: linux-bcache-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-security-module-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Seth Forshee <seth.forshee-Z7WLFzj8eWMS+FvcfC7Uqw@public.gmane.org>, dm-devel-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org, Miklos Szeredi <miklos-sUDqSbJrdHQHWmgEVkV9KA@public.gmane.org>, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-raid-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, fuse-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org, Austin S Hemmelgarn <ahferroin7-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>, linux-mtd-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org, Alexander Viro <viro-RmSDqhL/yNMiFSDQTTA3OLVCufUGDwFn@public.gmane.org>, selinux-+05T5uksL2qpZYMLLGbcSA@public.gmane.org, linux-fsdevel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Subject: [PATCH RESEND v2 14/18] capabilities: Allow privileged user in s_user_ns to set security.* xattrs Date: Mon, 4 Jan 2016 12:03:53 -0600 [thread overview] Message-ID: <1451930639-94331-15-git-send-email-seth.forshee@canonical.com> (raw) In-Reply-To: <1451930639-94331-1-git-send-email-seth.forshee-Z7WLFzj8eWMS+FvcfC7Uqw@public.gmane.org> A privileged user in s_user_ns will generally have the ability to manipulate the backing store and insert security.* xattrs into the filesystem directly. Therefore the kernel must be prepared to handle these xattrs from unprivileged mounts, and it makes little sense for commoncap to prevent writing these xattrs to the filesystem. The capability and LSM code have already been updated to appropriately handle xattrs from unprivileged mounts, so it is safe to loosen this restriction on setting xattrs. The exception to this logic is that writing xattrs to a mounted filesystem may also cause the LSM inode_post_setxattr or inode_setsecurity callbacks to be invoked. SELinux will deny the xattr update by virtue of applying mountpoint labeling to unprivileged userns mounts, and Smack will deny the writes for any user without global CAP_MAC_ADMIN, so loosening the capability check in commoncap is safe in this respect as well. Signed-off-by: Seth Forshee <seth.forshee-Z7WLFzj8eWMS+FvcfC7Uqw@public.gmane.org> Acked-by: Serge Hallyn <serge.hallyn-Z7WLFzj8eWMS+FvcfC7Uqw@public.gmane.org> --- security/commoncap.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/security/commoncap.c b/security/commoncap.c index 2119421613f6..d6c80c19c449 100644 --- a/security/commoncap.c +++ b/security/commoncap.c @@ -653,15 +653,17 @@ int cap_bprm_secureexec(struct linux_binprm *bprm) int cap_inode_setxattr(struct dentry *dentry, const char *name, const void *value, size_t size, int flags) { + struct user_namespace *user_ns = dentry->d_sb->s_user_ns; + if (!strcmp(name, XATTR_NAME_CAPS)) { - if (!capable(CAP_SETFCAP)) + if (!ns_capable(user_ns, CAP_SETFCAP)) return -EPERM; return 0; } if (!strncmp(name, XATTR_SECURITY_PREFIX, sizeof(XATTR_SECURITY_PREFIX) - 1) && - !capable(CAP_SYS_ADMIN)) + !ns_capable(user_ns, CAP_SYS_ADMIN)) return -EPERM; return 0; } @@ -679,15 +681,17 @@ int cap_inode_setxattr(struct dentry *dentry, const char *name, */ int cap_inode_removexattr(struct dentry *dentry, const char *name) { + struct user_namespace *user_ns = dentry->d_sb->s_user_ns; + if (!strcmp(name, XATTR_NAME_CAPS)) { - if (!capable(CAP_SETFCAP)) + if (!ns_capable(user_ns, CAP_SETFCAP)) return -EPERM; return 0; } if (!strncmp(name, XATTR_SECURITY_PREFIX, sizeof(XATTR_SECURITY_PREFIX) - 1) && - !capable(CAP_SYS_ADMIN)) + !ns_capable(user_ns, CAP_SYS_ADMIN)) return -EPERM; return 0; } -- 1.9.1 ------------------------------------------------------------------------------
WARNING: multiple messages have this Message-ID (diff)
From: Seth Forshee <seth.forshee@canonical.com> To: "Eric W. Biederman" <ebiederm@xmission.com>, Serge Hallyn <serge.hallyn@canonical.com>, James Morris <james.l.morris@oracle.com>, "Serge E. Hallyn" <serge@hallyn.com> Cc: Alexander Viro <viro@zeniv.linux.org.uk>, Richard Weinberger <richard.weinberger@gmail.com>, Austin S Hemmelgarn <ahferroin7@gmail.com>, Miklos Szeredi <miklos@szeredi.hu>, linux-kernel@vger.kernel.org, linux-bcache@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-mtd@lists.infradead.org, linux-fsdevel@vger.kernel.org, fuse-devel@lists.sourceforge.net, linux-security-module@vger.kernel.org, selinux@tycho.nsa.gov, Seth Forshee <seth.forshee@canonical.com> Subject: [PATCH RESEND v2 14/18] capabilities: Allow privileged user in s_user_ns to set security.* xattrs Date: Mon, 4 Jan 2016 12:03:53 -0600 [thread overview] Message-ID: <1451930639-94331-15-git-send-email-seth.forshee@canonical.com> (raw) In-Reply-To: <1451930639-94331-1-git-send-email-seth.forshee@canonical.com> A privileged user in s_user_ns will generally have the ability to manipulate the backing store and insert security.* xattrs into the filesystem directly. Therefore the kernel must be prepared to handle these xattrs from unprivileged mounts, and it makes little sense for commoncap to prevent writing these xattrs to the filesystem. The capability and LSM code have already been updated to appropriately handle xattrs from unprivileged mounts, so it is safe to loosen this restriction on setting xattrs. The exception to this logic is that writing xattrs to a mounted filesystem may also cause the LSM inode_post_setxattr or inode_setsecurity callbacks to be invoked. SELinux will deny the xattr update by virtue of applying mountpoint labeling to unprivileged userns mounts, and Smack will deny the writes for any user without global CAP_MAC_ADMIN, so loosening the capability check in commoncap is safe in this respect as well. Signed-off-by: Seth Forshee <seth.forshee@canonical.com> Acked-by: Serge Hallyn <serge.hallyn@canonical.com> --- security/commoncap.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/security/commoncap.c b/security/commoncap.c index 2119421613f6..d6c80c19c449 100644 --- a/security/commoncap.c +++ b/security/commoncap.c @@ -653,15 +653,17 @@ int cap_bprm_secureexec(struct linux_binprm *bprm) int cap_inode_setxattr(struct dentry *dentry, const char *name, const void *value, size_t size, int flags) { + struct user_namespace *user_ns = dentry->d_sb->s_user_ns; + if (!strcmp(name, XATTR_NAME_CAPS)) { - if (!capable(CAP_SETFCAP)) + if (!ns_capable(user_ns, CAP_SETFCAP)) return -EPERM; return 0; } if (!strncmp(name, XATTR_SECURITY_PREFIX, sizeof(XATTR_SECURITY_PREFIX) - 1) && - !capable(CAP_SYS_ADMIN)) + !ns_capable(user_ns, CAP_SYS_ADMIN)) return -EPERM; return 0; } @@ -679,15 +681,17 @@ int cap_inode_setxattr(struct dentry *dentry, const char *name, */ int cap_inode_removexattr(struct dentry *dentry, const char *name) { + struct user_namespace *user_ns = dentry->d_sb->s_user_ns; + if (!strcmp(name, XATTR_NAME_CAPS)) { - if (!capable(CAP_SETFCAP)) + if (!ns_capable(user_ns, CAP_SETFCAP)) return -EPERM; return 0; } if (!strncmp(name, XATTR_SECURITY_PREFIX, sizeof(XATTR_SECURITY_PREFIX) - 1) && - !capable(CAP_SYS_ADMIN)) + !ns_capable(user_ns, CAP_SYS_ADMIN)) return -EPERM; return 0; } -- 1.9.1
next prev parent reply other threads:[~2016-01-04 18:03 UTC|newest] Thread overview: 68+ messages / expand[flat|nested] mbox.gz Atom feed top 2016-01-04 18:03 [PATCH RESEND v2 00/19] Support fuse mounts in user namespaces Seth Forshee 2016-01-04 18:03 ` [PATCH RESEND v2 01/18] block_dev: Support checking inode permissions in lookup_bdev() Seth Forshee 2016-01-04 18:03 ` [PATCH RESEND v2 10/18] fs: Update posix_acl support to handle user namespace mounts Seth Forshee [not found] ` <1451930639-94331-1-git-send-email-seth.forshee-Z7WLFzj8eWMS+FvcfC7Uqw@public.gmane.org> 2016-01-04 18:03 ` [PATCH RESEND v2 02/18] block_dev: Check permissions towards block device inode when mounting Seth Forshee 2016-01-04 18:03 ` Seth Forshee 2016-01-04 18:03 ` [PATCH RESEND v2 03/18] fs: Treat foreign mounts as nosuid Seth Forshee 2016-01-04 18:03 ` Seth Forshee 2016-03-15 12:09 ` [PATCH] fs: remove excess check for in_userns Pavel Tikhomirov 2016-03-15 13:45 ` Seth Forshee 2016-03-15 14:19 ` Pavel Tikhomirov 2016-03-15 14:19 ` Pavel Tikhomirov 2016-03-22 23:19 ` James Morris 2016-01-04 18:03 ` [PATCH RESEND v2 04/18] selinux: Add support for unprivileged mounts from user namespaces Seth Forshee 2016-01-04 18:03 ` Seth Forshee 2016-01-04 18:03 ` [PATCH RESEND v2 05/18] userns: Replace in_userns with current_in_userns Seth Forshee 2016-01-04 18:03 ` Seth Forshee 2016-01-04 18:03 ` [PATCH RESEND v2 06/18] Smack: Handle labels consistently in untrusted mounts Seth Forshee 2016-01-04 18:03 ` Seth Forshee 2016-01-04 18:03 ` [PATCH RESEND v2 07/18] fs: Check for invalid i_uid in may_follow_link() Seth Forshee 2016-01-04 18:03 ` Seth Forshee 2016-01-04 18:03 ` [PATCH RESEND v2 08/18] cred: Reject inodes with invalid ids in set_create_file_as() Seth Forshee 2016-01-04 18:03 ` Seth Forshee 2016-01-04 18:03 ` [PATCH RESEND v2 09/18] fs: Refuse uid/gid changes which don't map into s_user_ns Seth Forshee 2016-01-04 18:03 ` Seth Forshee 2016-01-04 18:03 ` [PATCH RESEND v2 11/18] fs: Ensure the mounter of a filesystem is privileged towards its inodes Seth Forshee 2016-01-04 18:03 ` Seth Forshee 2016-03-03 17:02 ` Seth Forshee 2016-03-04 22:43 ` Eric W. Biederman 2016-03-06 15:48 ` Seth Forshee 2016-03-06 22:07 ` Eric W. Biederman 2016-03-07 13:32 ` Seth Forshee 2016-03-28 16:59 ` Seth Forshee 2016-03-30 1:36 ` Eric W. Biederman 2016-03-30 14:58 ` Seth Forshee 2016-03-30 20:18 ` Eric W. Biederman 2016-01-04 18:03 ` [PATCH RESEND v2 12/18] fs: Don't remove suid for CAP_FSETID in s_user_ns Seth Forshee 2016-01-04 18:03 ` Seth Forshee 2016-01-04 18:03 ` [PATCH RESEND v2 13/18] fs: Allow superblock owner to access do_remount_sb() Seth Forshee 2016-01-04 18:03 ` Seth Forshee 2016-01-04 18:03 ` Seth Forshee [this message] 2016-01-04 18:03 ` [PATCH RESEND v2 14/18] capabilities: Allow privileged user in s_user_ns to set security.* xattrs Seth Forshee 2016-01-04 18:03 ` [PATCH RESEND v2 15/18] fuse: Add support for pid namespaces Seth Forshee 2016-01-04 18:03 ` Seth Forshee 2016-03-09 10:53 ` Miklos Szeredi 2016-03-09 14:17 ` Seth Forshee 2016-01-04 18:03 ` [PATCH RESEND v2 16/18] fuse: Support fuse filesystems outside of init_user_ns Seth Forshee 2016-01-04 18:03 ` Seth Forshee 2016-03-09 11:29 ` Miklos Szeredi 2016-03-09 14:18 ` Seth Forshee 2016-03-09 14:48 ` Miklos Szeredi 2016-03-09 14:48 ` Miklos Szeredi [not found] ` <CAJfpegv5JmB15yHpjYxVeOYdWWkoLMftr9-e_iS93Y_7m=t4Zw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2016-03-09 15:25 ` Seth Forshee 2016-03-09 15:25 ` Seth Forshee 2016-03-09 15:51 ` Miklos Szeredi [not found] ` <CAJfpegv5KR_Hi-79a8oyb+R+tv9W3RYqy5pngUKSyauVNk2ScQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2016-03-09 17:07 ` Seth Forshee 2016-03-09 17:07 ` Seth Forshee 2016-03-14 20:58 ` Miklos Szeredi 2016-03-25 20:31 ` Seth Forshee 2016-01-04 18:03 ` [PATCH RESEND v2 17/18] fuse: Restrict allow_other to the superblock's namespace or a descendant Seth Forshee 2016-01-04 18:03 ` Seth Forshee 2016-03-09 11:40 ` Miklos Szeredi 2016-01-04 18:03 ` [PATCH RESEND v2 18/18] fuse: Allow user namespace mounts Seth Forshee 2016-01-04 18:03 ` Seth Forshee 2016-03-09 13:08 ` Miklos Szeredi 2016-01-25 19:47 ` [PATCH RESEND v2 00/19] Support fuse mounts in user namespaces Seth Forshee 2016-01-25 20:01 ` Eric W. Biederman 2016-01-25 20:01 ` Eric W. Biederman 2016-01-25 20:36 ` 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=1451930639-94331-15-git-send-email-seth.forshee@canonical.com \ --to=seth.forshee-z7wlfzj8ewms+fvcfc7uqw@public.gmane.org \ --cc=ahferroin7-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \ --cc=dm-devel-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \ --cc=ebiederm-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org \ --cc=fuse-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org \ --cc=james.l.morris-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org \ --cc=linux-bcache-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \ --cc=linux-fsdevel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \ --cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \ --cc=linux-mtd-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \ --cc=linux-raid-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \ --cc=linux-security-module-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \ --cc=miklos-sUDqSbJrdHQHWmgEVkV9KA@public.gmane.org \ --cc=selinux-+05T5uksL2qpZYMLLGbcSA@public.gmane.org \ --cc=serge-A9i7LUbDfNHQT0dZR+AlfA@public.gmane.org \ --cc=serge.hallyn-Z7WLFzj8eWMS+FvcfC7Uqw@public.gmane.org \ --cc=viro-RmSDqhL/yNMiFSDQTTA3OLVCufUGDwFn@public.gmane.org \ /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.