* filesystem client mapping of uid_t/gid_t field in lookup @ 2005-05-13 22:50 Steve French 2005-05-14 6:37 ` Trond Myklebust 0 siblings, 1 reply; 7+ messages in thread From: Steve French @ 2005-05-13 22:50 UTC (permalink / raw) To: linux-fsdevel RFC 1813 states: Using user ids and group ids implies that the client and server either share the same ID list or do local user and group ID mapping. Servers and clients must agree on the mapping from user to uid and from group to gid, for those sites that do not implement a consistent user ID and group ID space. In practice, such mapping is typically performed on the server, following a static mapping scheme or a mapping established by the user from a client at mount time. which implies that other network filesystem clients passed in a table of uid mappings at mount time. This would be extremely useful, but seems unwieldy to pass in via mount. Without adding an ioctl to set the uids for a particular mount (actually in my case it would probably be for all mounts on the client to the same sharename (export) and/or a particular server), would this be better to pass in via proc (which also seems awkward due to size of proc writes presumably getting bigger than 4K if there were a lot of mappings). ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: filesystem client mapping of uid_t/gid_t field in lookup 2005-05-13 22:50 filesystem client mapping of uid_t/gid_t field in lookup Steve French @ 2005-05-14 6:37 ` Trond Myklebust 2005-05-14 11:38 ` Jamie Lokier ` (2 more replies) 0 siblings, 3 replies; 7+ messages in thread From: Trond Myklebust @ 2005-05-14 6:37 UTC (permalink / raw) To: Steve French; +Cc: linux-fsdevel fr den 13.05.2005 Klokka 17:50 (-0500) skreiv Steve French: > RFC 1813 states: > Using user > ids and group ids implies that the client and server either > share the same ID list or do local user and group ID mapping. > Servers and clients must agree on the mapping from user to uid > and from group to gid, for those sites that do not implement a > consistent user ID and group ID space. In practice, such mapping > is typically performed on the server, following a static mapping > scheme or a mapping established by the user from a client at > mount time. > > which implies that other network filesystem clients passed in a table of > uid mappings at mount time. Woah...All it says is that the NFSv3 client and server must have matching uid/gid mappings. It says nothing about implementation details. Doing that sort of thing by trying to define static mappings at mount time is an implementation that will never scale. In NFSv4 (which is the only NFS implementation that supports native uid/gid mapping since it defines a globally unique username/groupname space for use on the wire) the uid/gid mapping is done using upcalls to a userland daemon on both the client and server side. A cache is used in order to avoid too many upcalls. Why would this sort of approach be impractical for CIFS? Cheers, Trond ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: filesystem client mapping of uid_t/gid_t field in lookup 2005-05-14 6:37 ` Trond Myklebust @ 2005-05-14 11:38 ` Jamie Lokier 2005-05-15 22:37 ` Steve French 2005-05-16 18:18 ` Bryan Henderson 2 siblings, 0 replies; 7+ messages in thread From: Jamie Lokier @ 2005-05-14 11:38 UTC (permalink / raw) To: Trond Myklebust; +Cc: Steve French, linux-fsdevel Trond Myklebust wrote: > In NFSv4 (which is the only NFS implementation that supports native > uid/gid mapping since it defines a globally unique username/groupname > space for use on the wire) the uid/gid mapping is done using upcalls to > a userland daemon on both the client and server side. A cache is used in > order to avoid too many upcalls. Why would this sort of approach be > impractical for CIFS? It would be even nicer if they could share the same mapping daemon. -- Jamie ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: filesystem client mapping of uid_t/gid_t field in lookup 2005-05-14 6:37 ` Trond Myklebust 2005-05-14 11:38 ` Jamie Lokier @ 2005-05-15 22:37 ` Steve French 2005-05-16 18:18 ` Bryan Henderson 2 siblings, 0 replies; 7+ messages in thread From: Steve French @ 2005-05-15 22:37 UTC (permalink / raw) To: Trond Myklebust; +Cc: linux-fsdevel Trond Myklebust wrote: >the uid/gid mapping is done using upcalls to >a userland daemon on both the client and server side. A cache is used in >order to avoid too many upcalls. Why would this sort of approach be >impractical for CIFS? > >Cheers, > Trond > > > It could be done with upcalls which populate a cache of uid mappings, but I was worried about avoiding all deadlock cases - not just the problem of making sure the user space daemon never dies, and the performance implications, but what worried me more was having to do a task switch in lookup (and readdir etc.) to an upcall thread to resolve some mappings might result in deadlock if the upcall thread could ever get blocked on writeback of inode data that the kernel code has to page out. This also means that the upcall thread has to be aware of which smb_uid (smb session) and/or which tree connection (mount to the same target UNC name) the mapping is for which is possible but perhaps harder to implement than the approach that RFC1813 mentions ie "mapping established by the user from a client at mount time." ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: filesystem client mapping of uid_t/gid_t field in lookup 2005-05-14 6:37 ` Trond Myklebust 2005-05-14 11:38 ` Jamie Lokier 2005-05-15 22:37 ` Steve French @ 2005-05-16 18:18 ` Bryan Henderson 2005-05-16 19:03 ` Spencer Shepler 2005-05-16 22:23 ` Trond Myklebust 2 siblings, 2 replies; 7+ messages in thread From: Bryan Henderson @ 2005-05-16 18:18 UTC (permalink / raw) To: Trond Myklebust; +Cc: linux-fsdevel, Steve French >> RFC 1813 states: >> Using user >> ids and group ids implies that the client and server either >> share the same ID list or do local user and group ID mapping. >> Servers and clients must agree on the mapping from user to uid >> and from group to gid, for those sites that do not implement a >> consistent user ID and group ID space. In practice, such mapping >> is typically performed on the server, following a static mapping >> scheme or a mapping established by the user from a client at >> mount time. >> >> which implies that other network filesystem clients passed in a table of >> uid mappings at mount time. > >Woah...All it says is that the NFSv3 client and server must have >matching uid/gid mappings. It says nothing about implementation details. Then what do you make of the sentence that starts, "In practice, such mapping is typically performed..."? That's nothing if not a statement about implementation details. And I agree that this sentence implies what Steve says. It's somewhat of a surprise, however, because I always thought the mapping was _typically_ done, if at all, by a table installed on the server without client involvement. A table that says, "whenever client A mounts, consider his uid 8 to be our uid 13." I base this on a vague memory, though. Correct me if I'm wrong. The only uid-mapping NFS server I've ever used myself does neither. The client establishes the mapping via a login protocol which is independent of mount. Come to think of it, the login protocol in this system doesn't have to be initiated by the client. A third party can tell the server, "consider uid 8 from Client A to be uid 13." -- Bryan Henderson IBM Almaden Research Center San Jose CA Filesystems ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: filesystem client mapping of uid_t/gid_t field in lookup 2005-05-16 18:18 ` Bryan Henderson @ 2005-05-16 19:03 ` Spencer Shepler 2005-05-16 22:23 ` Trond Myklebust 1 sibling, 0 replies; 7+ messages in thread From: Spencer Shepler @ 2005-05-16 19:03 UTC (permalink / raw) To: Bryan Henderson; +Cc: Trond Myklebust, linux-fsdevel, Steve French On Mon, Bryan Henderson wrote: > >> RFC 1813 states: > >> Using user > >> ids and group ids implies that the client and server either > >> share the same ID list or do local user and group ID mapping. > >> Servers and clients must agree on the mapping from user to uid > >> and from group to gid, for those sites that do not implement a > >> consistent user ID and group ID space. In practice, such mapping > >> is typically performed on the server, following a static mapping > >> scheme or a mapping established by the user from a client at > >> mount time. > >> > >> which implies that other network filesystem clients passed in a table > of > >> uid mappings at mount time. > > > >Woah...All it says is that the NFSv3 client and server must have > >matching uid/gid mappings. It says nothing about implementation details. > > Then what do you make of the sentence that starts, "In practice, such > mapping is typically performed..."? That's nothing if not a statement > about implementation details. And I agree that this sentence implies what > Steve says. > > It's somewhat of a surprise, however, because I always thought the mapping > was _typically_ done, if at all, by a table installed on the server > without client involvement. A table that says, "whenever client A mounts, > consider his uid 8 to be our uid 13." I base this on a vague memory, > though. Correct me if I'm wrong. > > The only uid-mapping NFS server I've ever used myself does neither. The > client establishes the mapping via a login protocol which is independent > of mount. Come to think of it, the login protocol > in this system doesn't have to be initiated by the client. A third party > can tell the server, "consider uid 8 from Client A to be uid 13." At the time that RFC was crafted, the login protocol most commonly used was the PCNFS protocol that most DOS/Windows NFS implementations to map the username to a uid to be used over the wire. All of that mapping was done at user level at the server. The rest of the mapping reference is the classic uid/gid mapping done via /etc/passwd or NIS, etc. That was the intent at least. Spencer ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: filesystem client mapping of uid_t/gid_t field in lookup 2005-05-16 18:18 ` Bryan Henderson 2005-05-16 19:03 ` Spencer Shepler @ 2005-05-16 22:23 ` Trond Myklebust 1 sibling, 0 replies; 7+ messages in thread From: Trond Myklebust @ 2005-05-16 22:23 UTC (permalink / raw) To: Bryan Henderson; +Cc: linux-fsdevel, Steve French må den 16.05.2005 Klokka 11:18 (-0700) skreiv Bryan Henderson: > >> RFC 1813 states: > >> Using user > >> ids and group ids implies that the client and server either > >> share the same ID list or do local user and group ID mapping. > >> Servers and clients must agree on the mapping from user to uid > >> and from group to gid, for those sites that do not implement a > >> consistent user ID and group ID space. In practice, such mapping > >> is typically performed on the server, following a static mapping > >> scheme or a mapping established by the user from a client at > >> mount time. > >> > >> which implies that other network filesystem clients passed in a table > of > >> uid mappings at mount time. > > > >Woah...All it says is that the NFSv3 client and server must have > >matching uid/gid mappings. It says nothing about implementation details. > > Then what do you make of the sentence that starts, "In practice, such > mapping is typically performed..."? That's nothing if not a statement > about implementation details. And I agree that this sentence implies what > Steve says. I read Steve's proposal as involving pushing static uid/gid mappings down into the kernel on the client at mount time. I don't read the RFC as implying that as being a scheme that is mandatory to implement. In fact I can think of very few clients that do so. The cases of client-side mapping that leap to mind are the old PCNFS clients that Spencer mentioned, and stuff like the old VMS implementations. In both those cases the real problem was that the clients needed to map their local non-uid/gid based naming schemes into an AUTH_SYS credential. That is basically the same mapping that we expect to be performed on login using /etc/passwd, /etc/group and friends on Linux. > It's somewhat of a surprise, however, because I always thought the mapping > was _typically_ done, if at all, by a table installed on the server > without client involvement. A table that says, "whenever client A mounts, > consider his uid 8 to be our uid 13." I base this on a vague memory, > though. Correct me if I'm wrong. That is far more typical. The server uses this information in order to enforce security, so it makes sense for it to be involved in deciding which remote uids/gids are trusted to be mapped into local uids/gids. root_squash and all_squash are the only mappings currently supported by Linux knfsd (at least in the case of AUTH_SYS) but other servers may support more complex mappings. > The only uid-mapping NFS server I've ever used myself does neither. The > client establishes the mapping via a login protocol which is independent > of mount. Come to think of it, the login protocol > in this system doesn't have to be initiated by the client. A third party > can tell the server, "consider uid 8 from Client A to be uid 13." RPCSEC_GSS basically boils down to "consider this strongly authenticated channel from Client A to be whatever uid the principal maps to on your server", so we've already got some support for that sort of thing. Cheers, Trond - To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2005-05-16 22:23 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2005-05-13 22:50 filesystem client mapping of uid_t/gid_t field in lookup Steve French 2005-05-14 6:37 ` Trond Myklebust 2005-05-14 11:38 ` Jamie Lokier 2005-05-15 22:37 ` Steve French 2005-05-16 18:18 ` Bryan Henderson 2005-05-16 19:03 ` Spencer Shepler 2005-05-16 22:23 ` Trond Myklebust
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox