On 15/06/2021 2:23 am, David Lloyd wrote:

On Mon, Jun 14, 2021 at 2:38 AM Peter Firmstone
<peter.firmst...@zeus.net.au> wrote:
  1. Develop authorization layer security provider services in OpenJDK,
     back port it to Java 8 and Java 11 (these provide most of the
     utilised functionality of SecurityManager, allowing developers to
     only implement those which they need, without enabling
     SecurityManager and editing policy files).
  2. Remove SecurityManager, Policy and Policy provider in OpenJDK 19.
The SecurityManager class itself already is *exactly* an authorization
provider.  I don't think it makes sense to consider removing the
security manager class to replace it with something that has basically
exactly the same API

Logic behind this choice:

SecurityManager depends on Permission, currently there are Permission checks throughout the JVM, however Permission implementation classes will be removed, although the Permission class itself won't be.

Permission references can be replaced with Guard references (which Permissions are instances of).

The Permission implementations of Guard::check call SecurityManager, so checks will continue working as expected, but it allows us to intercept them and do something different.

By replacing Permission references with Guard, it allows us to implement our own checks in these locations, and OpenJDK doesn't need to maintain Permission instances, and or, we don't need to make use of unmaintained Permission implementations.

There are already issues with Permission implementations, take for example SocketPermission, it consults DNS and it isn't possible to enter a range of IP addresses (such as the local subnet, and a list of public IP addresses), for now, every single IP address must be entered and this isn't practical.   The proposed API would allow us to re-implement SocketPermission functionality, as well as other Permission implementations.

This proposal also allows every existing component of the SM architecture to be removed, while retaining the most important component, the checks themselves, such that you or I or anyone else for that matter can re-implement the functionality of SM.

SM and friends will be removed eventually, so now is our opportunity to get something in place that has minimal impact on OpenJDK maintenance, that will remain.

(specifically, a single method for each general
authorization check that can be called without constructing any new
objects, if and only if the authorization provider is installed).  See
my other proposal where, post-"removal", SecurityManager (the class)
is retained but made abstract (and sans a few methods).  All of the
existing code which performs authorization checks would be retained
and the problem solved in essentially the way you're describing, just
using existing APIs.

The security manager implementation itself can implement any kind of
authorization behavior whatsoever, based mainly on the Permission
types (which work just fine for this purpose, and anyway are already
retained by the current JEP).  Policy and its supporting classes are
completely unnecessary for implementing a security policy.  In fact,
this is the case today already.

On Mon, Jun 14, 2021 at 12:57 AM Alan Bateman <alan.bate...@oracle.com> wrote:
AccessController::doPriv just runs the action.
TBH this should have always been the case.  Implementation-wise, if
one were constructing an access control context based on stack
walking, one would stop at points where `AccessController` is on the
stack (which is easily determinable) to do special work on assembling
the access control context based on the method called at that frame.

Yes, one can do that, but these classes will also eventually be removed.

--

Regards,
Peter Firmstone
0498 286 363
Zeus Project Services Pty Ltd.

Reply via email to