LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
From: Miklos Szeredi <miklos@szeredi.hu>
To: akpm@linux-foundation.org, serue@us.ibm.com,
viro@ftp.linux.org.uk, linuxram@us.ibm.com,
ebiederm@xmission.com
Cc: linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org,
containers@lists.osdl.org
Subject: [patch] unprivileged mounts update
Date: Wed, 25 Apr 2007 09:45:31 +0200 [thread overview]
Message-ID: <E1HgcBv-00049Z-00@dorka.pomaz.szeredi.hu> (raw)
From: Miklos Szeredi <mszeredi@suse.cz>
- refine adding "nosuid" and "nodev" flags for unprivileged mounts:
o add "nosuid", only if mounter doesn't have CAP_SETUID capability
o add "nodev", only if mounter doesn't have CAP_MKNOD capability
- allow unprivileged forced unmount, but only for FS_SAFE filesystems
- allow mounting over special files, but not symlinks
- for mounting and umounting check "fsuid" instead of "ruid"
Thanks to everyone for the comments, with special thanks to Serge
Hallyn and Eric Biederman.
For testing the new functionality provided by this patchset a simple
tool similar in syntax to mount(8) is available from:
http://www.kernel.org/pub/linux/kernel/people/mszeredi/mmount
Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
---
Index: linux/fs/namespace.c
===================================================================
--- linux.orig/fs/namespace.c 2007-04-22 17:48:18.000000000 +0200
+++ linux/fs/namespace.c 2007-04-22 18:19:51.000000000 +0200
@@ -252,10 +252,12 @@ static int reserve_user_mount(void)
static void __set_mnt_user(struct vfsmount *mnt)
{
BUG_ON(mnt->mnt_flags & MNT_USER);
- mnt->mnt_uid = current->uid;
+ mnt->mnt_uid = current->fsuid;
mnt->mnt_flags |= MNT_USER;
- if (!capable(CAP_SYS_ADMIN))
- mnt->mnt_flags |= MNT_NOSUID | MNT_NODEV;
+ if (!capable(CAP_SETUID))
+ mnt->mnt_flags |= MNT_NOSUID;
+ if (!capable(CAP_MKNOD))
+ mnt->mnt_flags |= MNT_NODEV;
}
static void set_mnt_user(struct vfsmount *mnt)
@@ -725,10 +727,10 @@ static bool permit_umount(struct vfsmoun
if (!(mnt->mnt_flags & MNT_USER))
return false;
- if (flags & MNT_FORCE)
+ if ((flags & MNT_FORCE) && !(mnt->mnt_sb->s_type->fs_flags & FS_SAFE))
return false;
- return mnt->mnt_uid == current->uid;
+ return mnt->mnt_uid == current->fsuid;
}
/*
@@ -792,13 +794,13 @@ static bool permit_mount(struct nameidat
if (type && !(type->fs_flags & FS_SAFE))
return false;
- if (!S_ISDIR(inode->i_mode) && !S_ISREG(inode->i_mode))
+ if (S_ISLNK(inode->i_mode))
return false;
if (!(nd->mnt->mnt_flags & MNT_USER))
return false;
- if (nd->mnt->mnt_uid != current->uid)
+ if (nd->mnt->mnt_uid != current->fsuid)
return false;
*flags |= MS_SETUSER;
next reply other threads:[~2007-04-25 7:47 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-04-25 7:45 Miklos Szeredi [this message]
2007-04-25 15:18 ` Miklos Szeredi
2007-04-25 16:55 ` H. Peter Anvin
2007-04-25 17:20 ` Serge E. Hallyn
2007-04-25 17:46 ` Eric W. Biederman
2007-04-25 17:56 ` Serge E. Hallyn
2007-04-25 18:41 ` Eric W. Biederman
2007-04-25 18:52 ` Serge E. Hallyn
2007-04-25 19:33 ` Miklos Szeredi
2007-04-26 14:57 ` Serge E. Hallyn
2007-04-26 15:23 ` Miklos Szeredi
2007-04-26 16:19 ` Serge E. Hallyn
2007-04-26 16:29 ` Miklos Szeredi
2007-04-26 19:42 ` Serge E. Hallyn
2007-04-26 19:56 ` Miklos Szeredi
2007-04-27 2:10 ` Serge E. Hallyn
2007-04-25 17:21 ` Eric W. Biederman
2007-04-25 17:30 ` Serge E. Hallyn
2007-04-26 19:10 ` Jan Engelhardt
2007-04-26 20:27 ` Miklos Szeredi
2007-04-27 4:10 ` Eric W. Biederman
2007-04-27 7:01 ` Jan Engelhardt
2007-04-25 19:33 ` Andrew Morton
2007-04-25 19:45 ` Miklos Szeredi
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=E1HgcBv-00049Z-00@dorka.pomaz.szeredi.hu \
--to=miklos@szeredi.hu \
--cc=akpm@linux-foundation.org \
--cc=containers@lists.osdl.org \
--cc=ebiederm@xmission.com \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linuxram@us.ibm.com \
--cc=serue@us.ibm.com \
--cc=viro@ftp.linux.org.uk \
--subject='Re: [patch] unprivileged mounts update' \
/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
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).