- From: Anselm Baird_Smith <abaird@www43.inria.fr>
- Date: Fri, 10 Jan 1997 09:38:46 +0100 (MET)
- To: Alexandre Rafalovitch <alex@access.com.au>
- Cc: www-jigsaw@www10.w3.org
Alexandre Rafalovitch writes:
> At 3:16 AM +1000 10/1/97, S. Alexander Jacobson wrote:
> >In Jigsaw, all resources are executed by Client threads. It strikes me as
> >difficult without substantial changes in jigsaw architecture to
> >preallocate threadgroups for client threads which correspond to the
> >various permissions profiles that one might be maintaining.
> >
> >A lookup facility that enabled a SecurityManager to check which client
> >thread was using which resource at any given moment could then return
> >permissions for the particular resource. Is such a lookup facility
> >available? How would I use it?
> >
>
> What about this method. Instead of using Standard thread object, Jigsaw
> would use w3c.jigsaw.http.ClientThread. This ClientThread would have an
> extra field and a package protected getters/setters which would be used to
> tag the resource to be run in that thread. When resource to be called is
> identified, some code in w.j.h package would call setter on the thread and
> set the proper value. SecurityManager would also be in that package and it
> would have access to getter method. Alternatively, those methods (or getter
> only) can be public but they would call securityManager to check if it can
> be called. We would have to avoid System.setSecurityManager for the nested
> levels though. :-{
I guess I am latenot uptodate on that subject, but here is roughly
what I had in mind (in order to determine the permissions for a given
resource). First of add some class loader handling in the
ResourceStore API: all resources loaded from a given resource store
would use that instance of a class loader, so each resource would have
a (new) getClassLoader() method - that might return null.
This per-resource class loader, would then be passed through to
children, for container resources: if directory D was loaded through
class loader C, then any children of D would be loaded through that
same class loader.
Security permissions would be indicated within that class loader; and
the Jigsaw Security manager would look for these bits in the class
loader to determine what operation is granted to the resource, for
example:
JigsawSecurityManagerImplementation
implements JigsawSecurityInterface
{
public boolean checkResourceStoreAccess(SecurityManager sm
, File resourcestorerepository)
throws SecurityException
{
ClassLoader cl = sm.currentClassLoader();
if ( ! cl.checkResourceAccess(resourcestorereposirory) )
throw new SecurityException();
}
}
Then the std jigsaw security manager would look like:
JigsawSecurityManager extends SecurityManager {
JigsawSecurityManagerImplementation impl ;
public boolan checkResourceStoreAccess(File repository) {
impl.checkResorceStoreAccess(this, repository);
}
}
Does this makes sense ? The thing I am missing from both Alexander and
Alex is why is some binding to threads needed here ?
> This way, we can tag each thread individually and only security manager
> would have access to that data.
>
> If that is not clear, I could provide a diagram or something, but the basic
> idea is there.
It might help, but I still need to understand the relationship with
threads.
> Also, about SecurityManagers, could we implement nested security managers
> with Jigsaw Security Manager being in control and the other
> SecurityManagers could be pluged in using Strategy Design Pattern. This
> way, we could actually implement multi-ring controls... Eg.
> JigsawSecurityManager will make sure that servlets can only write to some
> particular directory , but nested security manager, can actually limit them
> to writing only some particular types of the files.
Would chaining JigsawSecurityManagerImplementation fulfill that need,
ie in above example we would have:
JigsawSecurityManagerImplementation /* Assuming the delegatin model */
implements JigsawSecurityInterface
{
JigsawSecurityManagerImplementation chain;
public boolean checkResourceStoreAccess(SecurityManager sm
, File resourcestorerepository)
throws SecurityException
{
ClassLoader cl = sm.currentClassLoader();
if ( ! cl.checkResourceAccess(resourcestorereposirory) )
throw new SecurityException();
if ( chain != null )
chain.checkResourceStoreAccess(sm, resourcestorereposirory);
}
}
Anselm.
Received on Friday, 10 January 1997 03:38:54 UTC