Skip to content

Instantly share code, notes, and snippets.

@greenlaw110
Created May 17, 2013 22:16
Show Gist options
  • Save greenlaw110/5602348 to your computer and use it in GitHub Desktop.
Save greenlaw110/5602348 to your computer and use it in GitHub Desktop.
public class LoggingSecurityManager extends SecurityManager {
private AccessControlContext ctx;
private Properties properties = new Properties;
private Set missingProperties = new HashSet();
public LoggingSecurityManager() {
properties.add(
new FilePermission(System.get("java.io.tmpdir") + "/-", "read,write,delete"));
// maybe...
properties.add(
new FilePermission(System.get("user.home") + "/-", "read,write,delete"));
addSystemPropertyPermissions();
addSecurityPermissions();
addClassPathPermissions();
addOtherPropertyPermissions();
permissions.add(new RuntimePermission("accessClassInPackage.sun.reflect"));
permissions.add(new RuntimePermission("accessClassInPackage.sun.jdbc.odbc"));
permissions.add(new RuntimePermission("accessClassInPackage.sun.security.provider"));
permissions.add(new SocketPermission("localhost", "resolve"));
permissions.add(new NetPermission("getProxySelector"));
ctx = new AccessControlContext(new ProtectionDomain[] {
new ProtectionDomain(null, permissions)
});
}
/**
* Add read-only permission to read system properties.
* We may want to filter this list to remove sensitive information
*/
public void addSystemPropertyPermissions() {
for (Object key : Collections.list(System.getProperties().keys())) {
permissions.add(new PropertyPermission((String) key, "read"));
}
}
/**
* Add read-only permissions for initializing security.
*/
public void addSecurityPermissions() {
permissions.add(new SecurityPermission("getPolicy"));
permissions.add(new SecurityPermission("getProperty.random.source"));
permissions.add(new SecurityPermission("getProperty.securerandom.source"));
for (int i = 1; i < 10; i++) { // configurable limit?
permissions.add(new SecurityPermission("getProperty.security.provider." + i));
}
String s = Security.getProperty("securerandom.source");
if ((s != null) && s.startsWith("file:/")) {
permissions.add(new FilePermission(s.substring(5), "read"));
}
// should have been covered already but wasn't....
permissions.add(new FilePermission("/dev/random", "read"));
}
/**
* Add read-only permissions for everything on classpath.
*/
public void addClassPathPermissions() {
permissions.add(new FilePermission(String.format("%/lib/-",
System.getProperty("java.home")), "read"));
// add standard class path.
String pathSep = System.getProperty("path.separator");
for (String entry : System.getProperty("java.class.path").split(pathSep)) {
File f = new File(entry);
if (f.isFile()) {
permissions.add(new FilePermission(entry, "read"));
} else if (f.isDirectory()) {
permissions.add(new FilePermission(String.format("%s/-", entry), "read"));
} // or could be neither fish nor fowl
}
// add endorsed extensions.
for (String dir : System.getProperty("java.ext.dirs").split(pathSep)) {
permissions.add(new FilePermission(String.format("%s/-", dir), "read"));
}
}
/**
* Add other standard properties.
*/
public void addOtherPropertyPermissions() {
permissions.add(new PropertyPermission("jdbc.drivers", "read"));
permissions.add(new PropertyPermission("java.security.egd", "read"));
permissions.add(new PropertyPermission("socksProxyHost", "read"));
}
}
@greenlaw110
Copy link
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment