Walt - Thanks for clearing everything up. For some reason I was having a lot of trouble trying to explain how we were using capabilities.
Rob - You're absolutely correct. The capabilities are trusted and can only come from servers. If a client gets a hold of one it's assumed that some server determined the client had a need for the capability. Servers are able to create capabilities for themselves that allow them to do anything. Everyone - Right now I haven't had a need to differentiate between client and server requests. However, in the case of batch create I'd really like to prevent a client from having access to this capability. For the moment the only client state machine to use batch create is sys-symlink, and even then the state machine only creates one handle. Above all I want everyone to know that I'm very open to suggestion. Of course I realize that in the future new client state machines could make use of the batch create request. But for now, at least, only the servers have a legitimate need for this request. Nick On Thu, Jun 25, 2009 at 7:48 AM, Rob Ross <rr...@mcs.anl.gov> wrote: > Hi Walt, > > Thanks for the explanation. So to make sure I understand how one would > differentiate between servers and clients (if that is importatn), basically > servers would never hand out a capability allowing someone to perform an > operation we didn't want clients to perform (e.g., a batch create, if that's > the solution chosen). Then only servers could perform the operation, because > they can create a capability for themselves that allows them to do the > operation (because they are trusted). Right? > > I thought you liked it when the students ran off and started hacking on > their own :)? Or did you get tired of that after a while :)? > > Rob > > > On Jun 25, 2009, at 12:33 AM, Walter Ligon wrote: > > The short version goes like this - every request has a signed capability >> included with it that states the request is authorized. The capability is >> created by one of the servers, which we trust. We don't need to know the >> source of any given message because we can verify the source of the >> capability. >> >> Now, as Rob surmised, the server that creates the capability normally >> checks whatever permission is involved before creating it. In the case of >> creating an object, this is generally inherent in the permissions on the >> directory in which the final file (dir, symlink, etc.) is going to be >> placed. >> >> If the creation of files and such are moved to a server, then the >> create-file request would normally include the handle of the parent >> directory, on which permissions can be checked. The server-to-server >> request to to create datafile objects and so on can be authorized by the >> server doing the create. Normal users can be prevented from running such a >> request by simply never giving them a capability for that request. >> >> I think the problem comes that where we used to have a request that >> created one object, we now have a request that creates many objects, and the >> current capability can limit which request you run, but not the arguments to >> it, so a capability that allow you to create 1 allows you to create many. >> If this request is only used server-to-server, the we need not ever give a >> client a capability to use it, but if we want to let a client run this >> request, we either have to risk a malicious user chewing through handles, or >> we have to modify the capabilities to be more flexible. >> >> So one solution is to never allow clients to just create and object, >> moving all creation routines to the servers. Another solution is to have >> two requests a single create request and a bulk-create request and only >> every allow clients to run the single. Still another is to modify the >> create capability to specify how many objects can be created. >> >> Oddly enough, the last might be the best approach - especially if we find >> that this is the only case where we need to do that, and the only options we >> need are 1 and many. In this case it becomes pretty easy. >> >> Finally I might also point out that David and Nick did not consult with me >> before deciding how to deal with this. I guess they figure they don't need >> me any more. >> >> Walt >> >> Sam Lang wrote: >> >>> On Jun 24, 2009, at 3:55 PM, Sam Lang wrote: >>> >>>> >>>> It sounds like your approach to eliminating security holes is with >>>> "security by obscurity". In other words, if the client (or some rogue >>>> process acting as a client) does not know that the interface is there, he >>>> can't abuse it. I don't think that's the right approach, especially since >>>> PVFS is completely open source, and anyone can just look at the code. >>>> >>> Rob points out that I don't really know about your security approach, so >>> my above comments may not be entirely appropriate. I guess what I was >>> trying to say is that it wasn't clear to me from a security perspective that >>> moving batch_create to the server would be helpful for you. I'd be >>> interested to hear about your security approach though, and will refrain >>> from making comments about it until I have a better understanding of it. >>> :-) >>> In a different context, Phil and I have discussed the issue of the server >>> knowing the source of a request. It turns out this isn't an easy thing to >>> do, at least for BMI tcp. Phil has added some code to BMI tcp in a separate >>> branch that provides the functionality internally in BMI, and it shouldn't >>> be hard to export the info through a get_info call. Let us know if that's >>> something you're interested in! >>> -sam >>> _______________________________________________ >>> Pvfs2-developers mailing list >>> Pvfs2-developers@beowulf-underground.org >>> http://www.beowulf-underground.org/mailman/listinfo/pvfs2-developers >>> >> _______________________________________________ >> Pvfs2-developers mailing list >> Pvfs2-developers@beowulf-underground.org >> http://www.beowulf-underground.org/mailman/listinfo/pvfs2-developers >> > >
_______________________________________________ Pvfs2-developers mailing list Pvfs2-developers@beowulf-underground.org http://www.beowulf-underground.org/mailman/listinfo/pvfs2-developers