Yes, that is basically what I was saying.

And you got me there - I do. I just get nervous when they are 1000 miles away and hacking indiscriminately. Those two are pretty creative so I like to make sure we're on track. I'm sure this lively discussion is just that - a sign of a good thing! :)

Rob Ross 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

Reply via email to