<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<body link="#355491" alink="#4262a1" vlink="#355491" style="background: #e2e2e2; margin: 0; padding: 20px;">

<div>
        <table cellpadding="0" bgcolor="#FFFFFF" border="0" cellspacing="0" style="border: 1px solid #dadada; margin-bottom: 30px; width: 100%; -moz-border-radius: 6px; -webkit-border-radius: 6px;">
                <tbody>
                        <tr>

                                <td>

                                        <table border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF" style="border: solid 2px #ccc; background: #dadada; width: 100%; -moz-border-radius: 6px; -webkit-border-radius: 6px;">
                                                <tbody>
                                                        <tr>
                                                                <td bgcolor="#000000" valign="middle" height="58px" style="border-bottom: 1px solid #ccc; padding: 20px; -moz-border-radius-topleft: 3px; -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 5px; -webkit-border-top-left-radius: 5px;">
                                                                        <h1 style="color: #333333; font: bold 22px Arial, Helvetica, sans-serif; margin: 0; display: block !important;">
                                                                        <!-- To have a header image/logo replace the name below with your img tag -->
                                                                        <!-- Email clients will render the images when the message is read so any image -->
                                                                        <!-- must be made available on a public server, so that all recipients can load the image. -->
                                                                        <a href="http://community.jboss.org/index.jspa" style="text-decoration: none; color: #E1E1E1">JBoss Community</a></h1>
                                                                </td>

                                                        </tr>
                                                        <tr>
                                                                <td bgcolor="#FFFFFF" style="font: normal 12px Arial, Helvetica, sans-serif; color:#333333; padding: 20px;  -moz-border-radius-bottomleft: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 5px; -webkit-border-bottom-left-radius: 5px;"><h3 style="margin: 10px 0 5px; font-size: 17px; font-weight: normal;">
    JBoss AS7: Security : Running under a Java Security Manager
</h3>
<span style="margin-bottom: 10px;">
    created by <a href="http://community.jboss.org/people/anil.saldhana">Anil Saldhana</a> in <i>PicketBox Development</i> - <a href="http://community.jboss.org/docs/DOC-17431">View the full document</a>
</span>
<hr style="margin: 20px 0; border: none; background-color: #dadada; height: 1px;">

<div class="jive-rendered-content"><p>This article will discuss ways by which you can run a JBoss AS 7.1 instance under the Java Security Manager.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><h2>Prerequisites</h2><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>A general understanding about configuring security permissions in a Java Security Manager policy file.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><h2></h2><h2>Configuration</h2><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>We need the following two mandatory system properties</p><ol><li style="text-align: start;">-Djava.security.manager</li><li style="text-align: start;">-Djava.security.policy</li></ol><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p style="text-align: start;">The following is what I have at the end of the standalone.conf file</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><pre class="jive-pre"><code class="jive-code">JAVA_OPTS="$JAVA_OPTS -Djava.security.manager -Djboss.home.dir=$PWD/.. -Djava.security.policy==$PWD/server.policy -Djava.security.debug=failure"
</code></pre><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Note here that I pass in the java.security.policy property a server.policy file that is in the bin directory. (I created the server.policy file)</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><h2></h2><h2>server.policy file</h2><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><pre class="jive-pre"><code class="jive-code">// ***************************************
// Trusted core Java code
//***************************************
grant codeBase "file:${java.home}/lib/ext/-" {
&#160;&#160; permission java.security.AllPermission;
};
grant codeBase "file:${java.home}/lib/*" {
&#160;&#160; permission java.security.AllPermission;
};
// For java.home pointing to the JDK jre directory
grant codeBase "file:${java.home}/../lib/*" {
&#160;&#160; permission java.security.AllPermission;
};


//********************************************
// Trusted core JBoss code
//********************************************
grant codeBase "file:${jboss.home.dir}/jboss-modules.jar" {
&#160;&#160; permission java.security.AllPermission;
};

//********************************************
// Trusted JBoss AS Modules
//********************************************
grant codeBase "file:${jboss.home.dir}/modules/org/jboss/as/jmx/main/-" {
&#160;&#160; permission java.security.AllPermission;
};

grant codeBase "file:${jboss.home.dir}/modules/org/jboss/as/server/main/-" {
&#160;&#160; permission java.security.AllPermission;
};

grant codeBase "file:${jboss.home.dir}/modules/org/jboss/as/process-controller/main/-" {
&#160;&#160; permission java.security.AllPermission;
};

grant codeBase "file:${jboss.home.dir}/modules/org/jboss/as/controller/main/-" {
&#160;&#160; permission java.security.AllPermission;
};

grant codeBase "file:${jboss.home.dir}/modules/org/jboss/as/controller-client/main/-" {
&#160;&#160; permission java.security.AllPermission;
};

grant codeBase "file:${jboss.home.dir}/modules/org/jboss/as/connector/main/-" {
&#160;&#160; permission java.security.AllPermission;
};

grant codeBase "file:${jboss.home.dir}/modules/org/jboss/as/clustering/infinispan/main/-" {
&#160;&#160; permission java.security.AllPermission;
};

grant codeBase "file:${jboss.home.dir}/modules/org/jboss/as/deployment-repository/main/-" {
&#160;&#160; permission java.security.AllPermission;
};

grant codeBase "file:${jboss.home.dir}/modules/org/jboss/as/remoting/main/-" {
&#160;&#160; permission java.security.AllPermission;
};

grant codeBase "file:${jboss.home.dir}/modules/org/jboss/as/platform-mbean/main/-" {
&#160;&#160; permission java.security.AllPermission;
};

//********************************************
// Trusted JBoss Modules
//********************************************

grant codeBase "file:${jboss.home.dir}/modules/org/jboss/logmanager/main/-" {
&#160;&#160; permission java.security.AllPermission;
};

grant codeBase "file:${jboss.home.dir}/modules/org/jboss/logmanager/log4j/main/-" {
&#160;&#160; permission java.security.AllPermission;
};

grant codeBase "file:${jboss.home.dir}/modules/org/jboss/logging/main/-" {
&#160;&#160; permission java.security.AllPermission;
};

grant codeBase "file:${jboss.home.dir}/modules/org/jboss/stdio/main/-" {
&#160;&#160; permission java.security.AllPermission;
};

grant codeBase "file:${jboss.home.dir}/modules/org/jboss/msc/main/-" {
&#160;&#160; permission java.security.AllPermission;
};

grant codeBase "file:${jboss.home.dir}/modules/org/jboss/threads/main/-" {
&#160;&#160; permission java.security.AllPermission;
};

grant codeBase "file:${jboss.home.dir}/modules/org/jboss/vfs/main/-" {
&#160;&#160; permission java.security.AllPermission;
};

grant codeBase "file:${jboss.home.dir}/modules/org/jboss/staxmapper/main/-" {
&#160;&#160; permission java.security.AllPermission;
};

//********************************************
// Trusted 3rd Party Modules
//********************************************
grant codeBase "file:${jboss.home.dir}/modules/org/apache/log4j/main/-" {
&#160;&#160; permission java.security.AllPermission;
};

</code></pre><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><h2></h2><h2>Troubleshooting</h2><h3></h3><h3>I do not know how to debug the permission problems.</h3><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Add extra parameters to the -Djava.security.debug system property as shown below</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><pre class="jive-pre"><code class="jive-code">JAVA_OPTS="$JAVA_OPTS -Djava.security.manager -Djboss.home.dir=$PWD/.. -Djava.security.policy==$PWD/server.policy -Djava.security.debug=failure,access,policy"
</code></pre><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>When this happens, you will see errors such as following:</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><pre class="jive-pre"><code class="jive-code">)
12:46:33,368 ERROR [stderr] policy: evaluation (codesource) failed
12:46:33,368 ERROR [stderr] access: domain that failed ProtectionDomain&#160; (jar:file:/home/anil/as7/jboss-as/build/target/jboss-as-7.1.0.CR1-SNAPSHOT/modules/org/jboss/as/clustering/infinispan/main/jboss-as-clustering-infinispan-7.1.0.CR1-SNAPSHOT.jar!/ &lt;no signer certificates&gt;)
12:46:33,368 ERROR [stderr]&#160; ModuleClassLoader for Module "org.jboss.as.clustering.infinispan:main" from local module loader @3e89c3 (roots: /home/anil/as7/jboss-as/build/target/jboss-as-7.1.0.CR1-SNAPSHOT/modules)
12:46:33,368 ERROR [stderr]&#160; &lt;no principals&gt;
12:46:33,368 ERROR [stderr]&#160; java.security.Permissions@1f07597 (
12:46:33,368 ERROR [stderr] )
12:46:33,368 ERROR [stderr] 

....

Caused by: java.security.AccessControlException: access denied (java.io.FilePermission /home/anil/as7/jboss-as/build/target/jboss-as-7.1.0.CR1-SNAPSHOT/modules/org/apache/commons/pool/main/module.xml read)
&#160;&#160;&#160;&#160;&#160;&#160;&#160; at java.security.AccessControlContext.checkPermission(AccessControlContext.java:323) [:1.6.0_23]
&#160;&#160;&#160;&#160;&#160;&#160;&#160; at java.security.AccessController.checkPermission(AccessController.java:546) [:1.6.0_23]
&#160;&#160;&#160;&#160;&#160;&#160;&#160; at java.lang.SecurityManager.checkPermission(SecurityManager.java:532) [:1.6.0_23]
&#160;&#160;&#160;&#160;&#160;&#160;&#160; at java.lang.SecurityManager.checkRead(SecurityManager.java:871) [:1.6.0_23]
&#160;&#160;&#160;&#160;&#160;&#160;&#160; at java.io.File.exists(File.java:731) [:1.6.0_23]
&#160;&#160;&#160;&#160;&#160;&#160;&#160; at org.jboss.modules.LocalModuleLoader.findModule(LocalModuleLoader.java:121) [jboss-modules.jar:1.1.0.CR4]
&#160;&#160;&#160;&#160;&#160;&#160;&#160; at org.jboss.modules.ModuleLoader.loadModuleLocal(ModuleLoader.java:265) [jboss-modules.jar:1.1.0.CR4]
&#160;&#160;&#160;&#160;&#160;&#160;&#160; at org.jboss.modules.ModuleLoader.preloadModule(ModuleLoader.java:212) [jboss-modules.jar:1.1.0.CR4]
&#160;&#160;&#160;&#160;&#160;&#160;&#160; at org.jboss.modules.LocalModuleLoader.preloadModule(LocalModuleLoader.java:94) [jboss-modules.jar:1.1.0.CR4]
&#160;&#160;&#160;&#160;&#160;&#160;&#160; at org.jboss.modules.Module.addPaths(Module.java:790) [jboss-modules.jar:1.1.0.CR4]
&#160;&#160;&#160;&#160;&#160;&#160;&#160; at org.jboss.modules.Module.link(Module.java:997) [jboss-modules.jar:1.1.0.CR4]
&#160;&#160;&#160;&#160;&#160;&#160;&#160; at org.jboss.modules.Module.getPaths(Module.java:971) [jboss-modules.jar:1.1.0.CR4]
&#160;&#160;&#160;&#160;&#160;&#160;&#160; at org.jboss.modules.Module.getPathsUnchecked(Module.java:982) [jboss-modules.jar:1.1.0.CR4]
&#160;&#160;&#160;&#160;&#160;&#160;&#160; at org.jboss.modules.Module.loadModuleClass(Module.java:495) [jboss-modules.jar:1.1.0.CR4]
&#160;&#160;&#160;&#160;&#160;&#160;&#160; at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:182) [jboss-modules.jar:1.1.0.CR4]
&#160;&#160;&#160;&#160;&#160;&#160;&#160; at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:485) [jboss-modules.jar:1.1.0.CR4]
&#160;&#160;&#160;&#160;&#160;&#160;&#160; at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:444) [jboss-modules.jar:1.1.0.CR4]
&#160;&#160;&#160;&#160;&#160;&#160;&#160; at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:421) [jboss-modules.jar:1.1.0.CR4]
&#160;&#160;&#160;&#160;&#160;&#160;&#160; at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:143) [jboss-modules.jar:1.1.0.CR4]
&#160;&#160;&#160;&#160;&#160;&#160;&#160; at java.lang.ClassLoader.defineClass1(Native Method) [:1.6.0_23]
&#160;&#160;&#160;&#160;&#160;&#160;&#160; at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632) [:1.6.0_23]
</code></pre><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Here you have a security exception.&#160;&#160; The key is to look for the protection domain that failed.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>In this example, the line that matters is:</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><pre class="jive-pre"><code class="jive-code">access: domain that failed ProtectionDomain&#160; (jar:file:/home/anil/as7/jboss-as/build/target/jboss-as-7.1.0.CR1-SNAPSHOT/modules/org/jboss/as/clustering/infinispan/main/jboss-as-clustering-infinispan-7.1.0.CR1-SNAPSHOT.jar!/ &lt;no signer certificates&gt;)
12:46:33,376 ERROR [stderr]&#160; ModuleClassLoader for Module "org.jboss.as.clustering.infinispan:main" from local module loader @3e89c3 (roots: /home/anil/as7/jboss-as/build/target/jboss-as-7.1.0.CR1-SNAPSHOT/modules)
12:46:33,376 ERROR [stderr]&#160; &lt;no principals&gt;
12:46:33,376 ERROR [stderr]&#160; java.security.Permissions@1b8119a (
12:46:33,376 ERROR [stderr] )
</code></pre><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>So basically we are looking at&#160; </p><p>jar:file:/home/anil/as7/jboss-as/build/target/jboss-as-7.1.0.CR1-SNAPSHOT/modules/org/jboss/as/clustering/infinispan/main/jboss-as-clustering-infinispan-7.1.0.CR1-SNAPSHOT.jar!/ </p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>For this reason, I added the following into the server.policy file:</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><pre class="jive-pre"><code class="jive-code">grant codeBase "file:${jboss.home.dir}/modules/org/jboss/as/clustering/infinispan/main/-" {
&#160;&#160; permission java.security.AllPermission;
};
</code></pre><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>This statement block gives all permissions to the jars that exist in the main directory of the module "org.jboss.as.clustering.infinispan"</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>In an ideal world, you would like to qualify the statement block with permissions such as SocketPermission, RuntimePermission etc rather than a AllPermission.</p></div>

<div style="background-color: #f4f4f4; padding: 10px; margin-top: 20px;">
    <p style="margin: 0;">Comment by <a href="http://community.jboss.org/docs/DOC-17431">going to Community</a></p>

        <p style="margin: 0;">Create a new document in PicketBox Development at <a href="http://community.jboss.org/choose-container!input.jspa?contentType=102&containerType=14&container=2088">Community</a></p>
</div></td>
                        </tr>
                    </tbody>
                </table>


                </td>
            </tr>
        </tbody>
    </table>

</div>

</body>
</html>