From: ebiederm@xmission.com (Eric W. Biederman)
To: "J. Bruce Fields" <bfields@fieldses.org>
Cc: linux-fsdevel@vger.kernel.org,
Linux Containers <containers@lists.linux-foundation.org>,
linux-kernel@vger.kernel.org,
"Serge E. Hallyn" <serge@hallyn.com>,
Trond Myklebust <Trond.Myklebust@netapp.com>,
Stanislav Kinsbursky <skinsbursky@parallels.com>
Subject: Re: [PATCH review 52/85] sunrpc: Properly encode kuids and kgids in auth.unix.gid rpc pipe upcalls.
Date: Wed, 13 Feb 2013 15:22:32 -0800 [thread overview]
Message-ID: <87ip5vn6iv.fsf@xmission.com> (raw)
In-Reply-To: <20130213225840.GV14195@fieldses.org> (J. Bruce Fields's message of "Wed, 13 Feb 2013 17:58:40 -0500")
"J. Bruce Fields" <bfields@fieldses.org> writes:
> On Wed, Feb 13, 2013 at 02:32:29PM -0800, Eric W. Biederman wrote:
>> "J. Bruce Fields" <bfields@fieldses.org> writes:
>>
>> > On Wed, Feb 13, 2013 at 01:29:35PM -0800, Eric W. Biederman wrote:
>> >> "J. Bruce Fields" <bfields@fieldses.org> writes:
>> >>
>> >> > On Wed, Feb 13, 2013 at 09:51:41AM -0800, Eric W. Biederman wrote:
>> >> >> From: "Eric W. Biederman" <ebiederm@xmission.com>
>> >> >>
>> >> >> When a new rpc connection is established with an in-kernel server, the
>> >> >> traffic passes through svc_process_common, and svc_set_client and down
>> >> >> into svcauth_unix_set_client if it is of type RPC_AUTH_NULL or
>> >> >> RPC_AUTH_UNIX.
>> >> >>
>> >> >> svcauth_unix_set_client then looks at the uid of the credential we
>> >> >> have assigned to the incomming client and if we don't have the groups
>> >> >> already cached makes an upcall to get a list of groups that the client
>> >> >> can use.
>> >> >>
>> >> >> The upcall encodes send a rpc message to user space encoding the uid
>> >> >> of the user whose groups we want to know. Encode the kuid of the user
>> >> >> in the initial user namespace as nfs mounts can only happen today in
>> >> >> the initial user namespace.
>> >> >
>> >> > OK, I didn't know that.
>> >> >
>> >> > (Though I'm unclear how it should matter to the server what user
>> >> > namespace the client is in?)
>> >>
>> >> Perhaps I have the description a little scrambled. The short version
>> >> is that to start I only support the initial network namespace.
>> >>
>> >> If I haven't succeeded it is my intent to initially limit the servers
>> >> to the initial user namespace as well. I should see if I can figure
>> >> that out.
>> >>
>> >> >> When a reply to an upcall comes in convert interpret the uid and gid values
>> >> >> from the rpc pipe as uids and gids in the initial user namespace and convert
>> >> >> them into kuids and kgids before processing them further.
>> >> >>
>> >> >> When reading proc files listing the uid to gid list cache convert the
>> >> >> kuids and kgids from into uids and gids the initial user namespace. As we are
>> >> >> displaying server internal details it makes sense to display these values
>> >> >> from the servers perspective.
>> >> >
>> >> > All of these caches are already per-network-namespace. Ideally wouldn't
>> >> > we also like to associate a user namespace with each cache somehow?
>> >>
>> >> Ideally yes. I read through the caches enough to figure out where there
>> >> user space interfaces were, and to make certain we had conversions
>> >> to/from kuids and kgids.
>> >>
>> >> I haven't looked at what user namespace makes sense for these
>> >> caches. For this cache my first guess is that net->user_ns
>> >> is what we want as it will be shared by all users in network namespace I
>> >> presume.
>> >
>> > Oh, I didn't know about net->user_ns--so each network namespace is
>> > associated with a single user namespace, great, that simplifies life.
>> > Yes, that sounds exactly right.
>>
>> Yes. net->user_ns is the user namespace the network namespace was
>> created in. And it is the user namespace that is used in test
>> like ns_capable(net->user_ns, CAP_NET_ADMIN) to see if you are allowed
>> to manipulate the network namespace. So looks like exactly what we
>> want for that cache.
>>
>> Could you double check my understanding of the code?
>>
>> I want to be certain that I can't _yet_ start an sunrpc server process
>> outside of the initial user namespace. While writing an earlier reply I
>> realized that I hadn't thought about where sunrpc server processes come
>> from.
>>
>> Reading through the code it looks like we can have nfs mounts outside of
>> the initial network namespace.
>
> We're talking about the server side here, not the client, so I'm not
> sure what you mean by "nfs mounts". The nfs server does use various
> pseudofilesystems ("proc", "nfsd"), and those can be mounted outside the
> initial network namespace.
Actually I was seeing that nfs clients were starting lockd. So I was
just reasoning here that anything that came from a nfs client was
ultimately in the user namespace of that client, which is ultimately
limited by the client out.
> The server can receive rpc requests over network interfaces outside the
> initial network namespace, sure. The server doesn't perform mounts on
> behalf of clients, though, it just accesses previously mounted
> filesystems on clients' behalf.
But nfsd_init_socks only creates sockets in a single network namespace,
and today we pass only &init_net.
>> But because they are mounts they are
>> still limited to the initial user namespace.
>
> OK, so that's just a limitation on any mount whatsoever for now. I'm
> catching on, slowly, thanks!
If you set in struct filesystem .fs_flags = FS_USERNS_MOUNT your
filesystem can be mounted outside of the initial user namespace. But
since that takes extra work and because unprivileged users are allowed
to create user namespaces and perform the mounts by default it is off.
>> Now looking at the nfs server, seems to be hard coded to only start
>> in the initial network namespace despite almost having support for
>> starting in more.
>
> Right, Stanislav's got 4 more patches that should finish the job; see
> http://mid.gmane.org/<20130201125210.3257.46454.stgit@localhost.localdomain>
> and followups. That should make it for 3.9, I just need to review
> them....
Ok that is interesting.
There is an interesting corner case here where an unprivileged user
can create a user namespace and then can create a network namespace.
Depending on how we interpret things when Stanislaves patches reach
there we might have to add:
if (net->user_ns != &init_user_ns)
-EINVAL
Somewhere appropriate.
>> Even more the nfs server is controlled and started through the "nfsd"
>> filesystem. Which has to be mounted before you can start the server.
>> So you can only start the server through a mount in the initial user
>> namespace.
>
> Yes.
>
>> lockd is started by either the nfs server or the nfs client.
>>
>> There are no other sunrpc servers in the kernel.
>
> There are a couple callback services on the NFS client--those should be
> associated with nfs mounts in some obvious way. There's a confusing ACL
> service that's really just an appendage of NFSv2/v3 service.
>
> I think we're fine.
Thanks.
>> I think all of that is enough to reasonably claim that you can't have
>> any sunrpc server processes outside of the initial user namespace. But
>> if I am wrong I would to find an appropriate spot to put in a line
>> that says:
>> if (current_user_ns() != &init_user)
>> return -ESORRY_CHARLEY;
>
> I think you're right.
>
> So for now it's safely confined to one user namespace, and I think we
> understand approximately what to do if we want to support nfsd's in user
> namespace in the future. (Mainly, make sure nfsd and proc can be
> mounted in them and then most things will be determined by the user_ns
> of the network namespace associated with a given rpc.)
For 3.9 the list of filesystems mountable outside the initial user
namespace is: mqueuefs, tmpfs, ramfs, devpts, sysfs, and proc.
I am a touch concerned about /proc/fs/nfsd/exports after my patches
and Stanislavs patches both come in. As I think that will allow for
cases where net->user_ns != &init_userns. But we can cross that bridge
when we come to it.
Eric
next prev parent reply other threads:[~2013-02-13 23:22 UTC|newest]
Thread overview: 109+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <87621w14vs.fsf@xmission.com>
2013-02-13 17:50 ` [PATCH review 01/85] ceph: Only allow mounts in the initial network namespace Eric W. Biederman
2013-02-13 17:50 ` [PATCH review 02/85] ceph: Translate between uid and gids in cap messages and kuids and kgids Eric W. Biederman
2013-02-13 17:50 ` [PATCH review 03/85] ceph: Translate inode uid and gid attributes to/from " Eric W. Biederman
2013-02-13 17:50 ` [PATCH review 04/85] ceph: Convert struct ceph_mds_request to use kuid_t and kgid_t Eric W. Biederman
2013-02-13 17:50 ` [PATCH review 05/85] ceph: Convert kuids and kgids before printing them Eric W. Biederman
2013-02-13 17:50 ` [PATCH review 06/85] ceph: Enable building when user namespaces are enabled Eric W. Biederman
2013-02-13 17:50 ` [PATCH review 07/85] 9p: Add 'u' and 'g' format specifies for kuids and kgids Eric W. Biederman
2013-02-13 17:50 ` [PATCH review 08/85] 9p: Transmit kuid and kgid values Eric W. Biederman
2013-02-13 17:50 ` [PATCH review 09/85] 9p: Modify the stat structures to use kuid_t and kgid_t Eric W. Biederman
2013-02-13 17:50 ` [PATCH review 10/85] 9p: Modify struct 9p_fid to use a kuid_t not a uid_t Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 11/85] 9p: Modify struct v9fs_session_info to use a kuids and kgids Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 12/85] 9p: Modify v9fs_get_fsgid_for_create to return a kgid Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 13/85] 9p: Allow building 9p with user namespaces enabled Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 14/85] afs: Remove unused structure afs_store_status Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 15/85] afs: Only allow mounting afs in the intial network namespace Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 16/85] afs: Support interacting with multiple user namespaces Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 17/85] coda: Restrict coda messages to the initial pid namespace Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 18/85] coda: Restrict coda messages to the initial user namespace Eric W. Biederman
2013-02-13 18:14 ` Jan Harkes
2013-02-13 18:44 ` Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 19/85] coda: Cache permisions in struct coda_inode_info in a kuid_t Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 20/85] coda: Allow coda to be built when user namespace support is enabled Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 21/85] ocfs2: Handle kuids and kgids in acl/xattr conversions Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 22/85] ocfs2: convert between kuids and kgids and DLM locks Eric W. Biederman
2013-02-14 8:34 ` Joel Becker
2013-02-13 17:51 ` [PATCH review 23/85] ocfs2: Convert uid and gids between in core and on disk inodes Eric W. Biederman
2013-02-14 8:35 ` Joel Becker
2013-02-14 9:10 ` Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 24/85] ocfs2: For tracing report the uid and gid values in the initial user namespace Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 25/85] ocfs2: Compare kuids and kgids using uid_eq and gid_eq Eric W. Biederman
2013-02-14 8:37 ` Joel Becker
2013-02-13 17:51 ` [PATCH review 26/85] ocfs2: Enable building with user namespaces enabled Eric W. Biederman
2013-02-14 8:38 ` Joel Becker
2013-02-13 17:51 ` [PATCH review 27/85] gfs2: Remove improper checks in gfs2_set_dqblk Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 28/85] gfs2: Split NO_QUOTA_CHANGE inot NO_UID_QUTOA_CHANGE and NO_GID_QUTOA_CHANGE Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 29/85] gfs2: Report quotas in the caller's user namespace Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 30/85] gfs2: Introduce qd2index Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 31/85] gfs2: Modify struct gfs2_quota_change_host to use struct kqid Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 32/85] gfs2: Modify qdsb_get to take a " Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 33/85] gfs2: Convert gfs2_quota_refresh to take a kqid Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 34/85] gfs2: Store qd_id in struct gfs2_quota_data as a struct kqid Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 35/85] gfs2: Remove the QUOTA_USER and QUOTA_GROUP defines Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 36/85] gfs2: Use kuid_t and kgid_t types where appropriate Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 37/85] gfs2: Use uid_eq and gid_eq " Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 38/85] gfs2: Convert uids and gids between dinodes and vfs inodes Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 39/85] gfs2: Enable building with user namespaces enabled Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 40/85] ncpfs: Support interacting with multiple user namespaces Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 41/85] nfs_common: Update the translation between nfsv3 acls linux posix acls Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 42/85] sunrpc: Use userns friendly constants Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 43/85] sunrpc: Use kuid_t and kgid_t where appropriate Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 44/85] sunrpc: Use uid_eq and gid_eq " Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 45/85] sunrpc: Simplify auth_unix now that everything is a kgid_t Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 46/85] sunrpc: Convert kuids and kgids to uids and gids for printing Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 47/85] sunrpc: Use gid_valid to test for gid != INVALID_GID Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 48/85] sunrpc: Update gss uid to security context mapping Eric W. Biederman
2013-02-13 20:35 ` J. Bruce Fields
2013-02-13 21:17 ` Eric W. Biederman
2013-02-13 21:24 ` J. Bruce Fields
2013-02-13 17:51 ` [PATCH review 49/85] sunrpc: Update svcgss xdr handle to rpsec_contect cache Eric W. Biederman
2013-03-04 14:12 ` J. Bruce Fields
2013-03-04 17:11 ` Eric W. Biederman
2013-03-05 23:10 ` J. Bruce Fields
2013-03-05 23:43 ` Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 50/85] sunrpc: Hash uids by first computing their value in the initial userns Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 51/85] sunrpc: Properly encode kuids and kgids in RPC_AUTH_UNIX credentials Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 52/85] sunrpc: Properly encode kuids and kgids in auth.unix.gid rpc pipe upcalls Eric W. Biederman
2013-02-13 21:05 ` J. Bruce Fields
2013-02-13 21:29 ` Eric W. Biederman
2013-02-13 21:50 ` J. Bruce Fields
2013-02-13 22:32 ` Eric W. Biederman
2013-02-13 22:58 ` J. Bruce Fields
2013-02-13 23:22 ` Eric W. Biederman [this message]
2013-02-14 7:12 ` Stanislav Kinsbursky
2013-02-14 8:42 ` Eric W. Biederman
2013-02-15 17:00 ` J. Bruce Fields
2013-02-15 18:47 ` Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 53/85] sunrpc: Properly decode kuids and kgids in RPC_AUTH_UNIX credentials Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 54/85] nfs: Pass GLOBAL_ROOT_UID and GLOBAL_ROOT_GID to keyring alloc Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 55/85] nfs: Convert struct nfs_fattr to Use kuid_t and kgid_t Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 56/85] nfs: Convert idmap to use kuids and kgids Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 57/85] nfs: Convert nfs2xdr " Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 58/85] nfs: Convert nfs3xdr " Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 59/85] nfs: Convert nfs4xdr " Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 60/85] nfs: kuid and kgid conversions for nfs/inode.c Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 61/85] nfs: Enable building with user namespaces enabled Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 62/85] nfsd: Remove declaration of nonexistent nfs4_acl_permisison Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 63/85] nfsd: idmap use u32 not uid_t as the intermediate type Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 64/85] nfsd: Convert idmap to use kuids and kgids Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 65/85] nfsd: Remove nfsd_luid, nfsd_lgid, nfsd_ruid and nfsd_rgid Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 66/85] nfsd: Convert nfs3xdr to use kuids and kgids Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 67/85] nfsd: Convert nfsxdr " Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 68/85] nfsd: Handle kuids and kgids in the nfs4acl to posix_acl conversion Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 69/85] nfsd: Modify nfsd4_cb_sec to use kuids and kgids Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 70/85] nfsd: Store ex_anon_uid and ex_anon_gid as " Eric W. Biederman
2013-02-13 17:52 ` [PATCH review 71/85] nfsd: Properly compare and initialize " Eric W. Biederman
2013-02-13 17:52 ` [PATCH review 72/85] nfsd: Enable building with user namespaces enabled Eric W. Biederman
2013-02-13 17:52 ` [PATCH review 73/85] cifs: Override unmappable incoming uids and gids Eric W. Biederman
2013-02-13 17:52 ` [PATCH review 74/85] cifs: Use BUILD_BUG_ON to validate uids and gids are the same size Eric W. Biederman
2013-02-13 17:52 ` [PATCH review 75/85] cifs: Pass GLOBAL_ROOT_UID and GLOBAL_ROOT_GID to keyring_alloc Eric W. Biederman
2013-02-13 17:52 ` [PATCH review 76/85] cifs: Use kuids and kgids SID to uid/gid mapping Eric W. Biederman
2013-02-13 17:52 ` [PATCH review 77/85] cifs: Convert from a kuid before printing current_fsuid Eric W. Biederman
2013-02-13 17:52 ` [PATCH review 78/85] cifs: Modify struct cifs_unix_set_info_args to hold a kuid_t and a kgid_t Eric W. Biederman
2013-02-13 17:52 ` [PATCH review 79/85] cifs: Convert struct tcon_link to use a kuid Eric W. Biederman
2013-02-13 17:52 ` [PATCH review 80/85] cifs: Convert struct cifs_fattr to use kuid and kgids Eric W. Biederman
2013-02-13 17:52 ` [PATCH review 81/85] cifs: Convert struct cifsFileInfo to use a kuid Eric W. Biederman
2013-02-13 17:52 ` [PATCH review 82/85] cifs: Modify struct smb_vol to use kuids and kgids Eric W. Biederman
2013-02-13 17:52 ` [PATCH review 83/85] cifs: Convert struct cifs_sb_info " Eric W. Biederman
2013-02-13 17:52 ` [PATCH review 84/85] cifs: Convert struct cifs_ses to use a kuid_t and a kgid_t Eric W. Biederman
2013-02-13 17:52 ` [PATCH review 85/85] cifs: Enable building with user namespaces enabled Eric W. Biederman
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=87ip5vn6iv.fsf@xmission.com \
--to=ebiederm@xmission.com \
--cc=Trond.Myklebust@netapp.com \
--cc=bfields@fieldses.org \
--cc=containers@lists.linux-foundation.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=serge@hallyn.com \
--cc=skinsbursky@parallels.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox