[ 
https://issues.apache.org/jira/browse/DERBY-5363?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13086668#comment-13086668
 ] 

Dag H. Wanvik edited comment on DERBY-5363 at 8/17/11 11:11 PM:
----------------------------------------------------------------

Unfortunately, we don't check whether a database exists (in 
StorageFactoryService#createServiceRoot before we have already created 
derby.log. So we would have to chose whether to use default restrictive access 
permission for derby.log. Then, when we have read system.properties we would 
know whether this database should use restrictive flags or not for the 
remainder of the booted time.

So let's see if this behavior would work: 

We have a property, derby.storage.useDefaultFilePermissions, which would only 
default to 'false' when we started a database server from the command line 
(along with Java security).

This means that in this case, derby.log would always get restrictive 
permission. (To avoid this one would henceforth need to specify the property to 
be 'true').

When connecting, if we have a *new* database, we would continue to use 
restrictive permissions for that database. We would store this fact in 
system.properties.

If we connect to an existing database, we would check system.properties for the 
presence of derby.storage.useDefaultFilePermissions. If it is not seen (soft or 
hard upgrade), we would assume the value to be true, and update 
system.properties with this fact. If it is seen, we use that value for it.

So, as far as compatibility, if the property is *not* specified when starting a 
server (as would be the case for oblivious users upgrading), the only change 
seen would be that derby.log would (usually) have more restrictive permissions 
than earlier - other (new) db files would be created with the old laxer scheme 
as before.

Does this sound acceptable?


      was (Author: dagw):
    Unfortunately, we don't check whether a database exists (in 
StorageFactoryService#createServiceRoot before we have already created 
derby.log. So we would have to chose whether to use default restrictive access 
permission for derby.log. Then, when we have read system.properties we would 
know whether this database should use restrictive flags or not for the 
remainder of the booted time.

So let's see if this behavior would work:
We have a property, derby.storage.useDefaultFilePermissions, which would only 
default to 'false' when we started a database server
from the command line (along with Java security).

This means that in this case, derby.log would always get restrictive 
permission. (To avid this one would hencforth need to specify the property to 
be 'true').

When connecting, if we have a *new* database, we would continue to use 
restrictive permissions for that database. We would store this fact in 
system.properties. 

If we connect to an existing database, we would check system.properties for the 
presence of derby.storage.useDefaultFilePermissions. If it is not seen (soft or 
hard upgrade), we would assume the value to be true, and update 
system.properties with this fact. If it is seen, we use that value for it.

So, as far as compatibility, if the property is *not* specified when starting a 
server (as would be the case for oblivious users upgrading), the only change 
seen would be that derby.log would (usually) have more restrictive permissions 
than earlier - other (new) db files would be created with the old laxer scheme 
as before.

Does this sound acceptable
  
> Tighten default permissions of DB files with >= JDK6
> ----------------------------------------------------
>
>                 Key: DERBY-5363
>                 URL: https://issues.apache.org/jira/browse/DERBY-5363
>             Project: Derby
>          Issue Type: Improvement
>            Reporter: Dag H. Wanvik
>         Attachments: permission-5.diff, permission-5.stat, permission-6.diff, 
> permission-6.stat, z.sql
>
>
> Before Java 6, files created by Derby would have the default
> permissions of the operating system context. Under Unix, this would
> depend on the effective umask of the process that started the Java VM.
> In Java 6 and 7, there are methods available that allows tightening up this
> (File.setReadable, setWritable), making it less likely that somebody
> would accidentally run Derby with a too lenient default.
> I suggest we take advantage of this, and let Derby by default (in Java
> 6 and higher) limit the visibility to the OS user that starts the VM,
> e.g. on Unix this would be equivalent to running with umask 0077. More
> secure by default is good, I think.
> We could have a flag, e.g. "derby.storage.useDefaultFilePermissions"
> that when set to true, would give the old behavior.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to