-
Language:
English
-
Language:
English
Red Hat Training
A Red Hat training course is available for JBoss Enterprise Application Platform Common Criteria Certification
Common Criteria Configuration Guide
JBoss Enterprise Application Platform
Edition 4.3.3
Red Hat
Abstract
Preface
Chapter 1. Introduction
1.1. Purpose of this Document
1.2. What is a Common Criteria Compliant System?
Chapter 2. Requirements for the Evaluated Configuration
2.1. Software Requirements
2.1.1. Java Virtual Machine
- Sun JRE 1.5.x & 1.6.x
- BEA JRockit JRE 1.5.x & 1.6.x
- HP-UX JRE 1.5.x & 1.6.x
- IBM JRE 1.5.x & 1.6.x
2.1.2. Operating System
2.1.3. Database Servers
Table 2.1. Allowed Database and JDBC Driver Versions
Database | JDBC Driver |
---|---|
Oracle 10g R2 and Oracle 9i |
Oracle 10g R2 version 10.2.0.2.0
Driver download: http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/index.html.
$ md5sum ojdbc14.jar 8ae726d3a32c3cc3adbbe6793ade57f8 ojdbc14.jar |
Microsoft SQL Server 2005 |
Microsoft SQL Server 2005 Microsoft SQL Server 2005 driver v1.1.1501.101
Driver download: http://www.microsoft.com/downloads/details.aspx?FamilyId=6D483869-816A-44CB-9787-A866235EFC7C&displaylang=en.
$ md5sum sqljdbc.jar 3bc12b220fd0ed6e074eb26b938185e5 sqljdbc.jar |
MySQL v5.0 |
MySQL version 5.0.8
Driver download: http://dev.mysql.com/downloads/connector/j/5.0.html.
$ md5sum mysql-connector-java-5.0.8.zip 569f7284761b8162a2d2ac0a9786581a mysql-connector-java-5.0.8.zip |
PostgreSQL v8.1 |
PostgreSQL version 8.2-504
Driver download: http://jdbc.postgresql.org/download.
$ md5sum postgresql-8.2-504.jdbc3.jar aa8fb66ad71300b635943a8f473a3261 postgresql-8.2-504.jdbc3.jar |
DB2 UDB 8.2.7 |
DB2 Universal JDBC Driver Version: 2.10.52
Driver download: http://www-01.ibm.com/support/docview.wss?rs=71&uid=swg21251460
$ md5sum db2jcc.jar 1ae13ee23b595de8b282a7974e5cc25c db2jcc.jar |
DB2 UDB 9.1 Fixpack 3 |
DB2 Universal JDBC Driver Version: 3.1.57
Driver download: http://publib.boulder.ibm.com/infocenter/db2luw/v9/index.jsp?topic=/com.ibm.db2.udb.uprun.doc/doc/r0011932.htm
$ md5sum db2jcc.jar 6b33669a5c2173e65f6bb6618e935b8d db2jcc.jar |
Note
md5
.
2.2. Physical Requirements
2.3. Personnel Requirements
2.4. Connectivity Requirements
2.4.1. Cluster Connectivity Requirements
- the network protocol is TCP
- the destination port is 8080 or 8443
2.5. Configuration Requirements
production
server configuration to comply with CC requirements. It is recommended, however, to back up the production configuration prior to making the changes shown in the following subsections.
${JBOSS_HOME}/server/production
directory. If you are using Microsoft Windows you can simply use Windows Explorer to make a copy of this folder using copy-paste and rename the copy to production.backup
. Under UNIX or Linux you can issue the command:
cp -pr ${JBOSS_HOME}/server/production ${JBOSS_HOME}/server/production.backup
2.5.1. Setup Configuration
- Disable Simple Network Management Protocol (SNMP)Delete the directory
${JBOSS_HOME}/server/production/deploy/snmp-adaptor.sar
$ rm -rf ${JBOSS_HOME}/server/production/deploy/snmp-adaptor.sar
- Disable Remote Method Invocation (RMI) under the Internet Inter-ORB Protocol (IIOP)To disable RMI/IIOP delete following files:
${JBOSS_HOME}/server/production/conf/jacorb.properties
${JBOSS_HOME}/server/production/deploy/iiop-service.xml
${JBOSS_HOME}/server/production/lib/jacorb.jar
${JBOSS_HOME}/server/production/lib/jboss-iiop.jar
$ rm ${JBOSS_HOME}/server/production/conf/jacorb.properties $ rm ${JBOSS_HOME}/server/production/deploy/iiop-service.xml $ rm ${JBOSS_HOME}/server/production/lib/jacorb.jar $ rm ${JBOSS_HOME}/server/production/lib/jboss-iiop.jar
- Disable AJP from JBoss Web.Comment out the following section from
${JBOSS_HOME}/server/production/deploy/jboss-web.deployer/server.xml
:<Connector port="8009" address="${jboss.bind.address}" protocol="AJP/1.3" emptySessionPath="true" enableLookups="false" redirectPort="8443" />
- Disable Clustering High-Availability JNDI service (port 1102)
- delete the file
${JBOSS_HOME}/server/production/deploy/hajndi-jms-ds.xml
rm ${JBOSS_HOME}/server/production/deploy/hajndi-jms-ds.xml
- copy
jms-ds.xml
fromdefault
configuration toproduction
:cp -p ${JBOSS_HOME}/server/default/deploy/jms-ds.xml ${JBOSS_HOME}/server/production/deploy/
- From the file
${JBOSS_HOME}/server/production/deploy/cluster-service.xml
comment out the following MBean definitions:<mbean code="org.jboss.ha.jndi.HANamingService" name="jboss:service=HAJNDI">
<mbean code="org.jboss.invocation.unified.server.UnifiedInvokerHA" name="jboss:service=invoker,type=unifiedha">
<mbean code="org.jboss.invocation.pooled.server.PooledInvokerHA" name="jboss:service=invoker,type=pooledha">
<mbean code="org.jboss.cache.invalidation.bridges.JGCacheInvalidationBridge" name="jboss.cache:service=InvalidationBridge,type=JavaGroups">
- Use password hashing and do not store plain text passwords on the server.You should refer to the JBoss Enterprise Application Platform Configuration Guide, Chapter 8, Section 5.3.2 Password Hashing, for details on configuring this: http://www.redhat.com/docs/manuals/jboss/jboss-eap-4.3/doc/Server_Configuration_Guide/html/Using_JBoss_Login_Modules-Password_Hashing.html
2.5.2. Configuring Audit Logging
Important
${JBOSS_HOME}/server/production/conf/jboss-log4.xml
:
- Set the logging level of the
SecurityInterceptor
class toTRACE
by adding the following element to the root element:<category name="org.jboss.ejb.plugins.SecurityInterceptor"> <priority value="TRACE" /> </category>
- Update the ConversionPattern parameter in the appender/layout element to show thread information by replacing the Default Pattern with the Full Pattern:
<!--The full pattern: Date MS Priority [Category] (Thread:NDC) Message --> <param name="ConversionPattern" value="%d %-5r %-5p [%c] (%t:%x) %m%n"/>
AccessLogValve
in deploy/jboss-web.deployer/server.xml
.
<Valve className="org.apache.catalina.valves.AccessLogValve" prefix="localhost_access_log." suffix=".log" pattern="common" directory="${jboss.server.home.dir}/log" resolveHosts="false" />
log
directory of the server configuration.
2.5.3. Security Configuration
2.5.3.1. JBoss SX
org.jboss.security.auth.spi.UsersRolesLoginModule
org.jboss.security.auth.spi.LdapLoginModule
org.jboss.security.auth.spi.DatabaseServerLoginModule
org.jboss.security.auth.spi.BaseCertLoginModule
org.jboss.security.plugins.JaasSecurityManager
org.jboss.security.plugins.JaasSecurityDomain
2.5.3.2. Securing MBean Invokers
httpha-invoker.sar
found in the deploy directory is a service that provides RMI/HTTP access for EJBs and the JNDI Naming service. This includes a servlet that processes posts of marshaled org.jboss.invocation.Invocation
objects that represent invocations that should be dispatched onto the MBeanServer. Effectively this allows access to MBeans that support the detached invoker operation via HTTP when sending appropriately formatted HTTP posts. This servlet has to be protected against the use by unprivileged users. To secure this access point you would need to secure the JMXInvokerServlet servlet found in the httpha-invoker.sar/invoker.war/WEB-INF/web.xml
descriptor.
jmx-invoker-service.xml
is a service that exposes the JMX MBeanServer interface via an RMI compatible interface using the RMI/JRMP detached invoker service. This interface has to be made unavailable to unprivileged users which can be done by using the org.jboss.jmx.connector.invoker.AuthenticationInterceptor
interceptor for performing identification and authentication using JAAS. Additionally, access control has to be configured using the interceptors of either org.jboss.jmx.connector.invoker.RolesAuthorization
or org.jboss.jmx.connector.invoker.ExternalizableRolesAuthorization
.
2.5.3.3. JBoss Web
org.jboss.web.tomcat.security.JBossSecurityMgrRealm
) cannot be replaced. The same is true for the authenticator classes defined for each authentication method (BASIC, CLIENT-CERT, DIGEST, FORM, NONE) in ${JBOSS_HOME}/server/production/deploy/jboss-web.deployer/META-INF/jboss-service.xml
.
allRolesMode
within ${JBOSS_HOME}/server/production/deploy/jboss-web.deployer/server.xml
must be set to strict
. This requires the authenticated user to be assigned to one of the web-app/security-role/role-name
in order to be authorized.
<Realm className="org.jboss.web.tomcat.security.JBossSecurityMgrRealm" certificatePrincipal="org.jboss.security.auth.certs.SubjectDNMapping" allRolesMode="strict" />
2.5.4. Database Configuration
production
server profile.
- Create a default DS file for the desired database. Examples of this file are located in
${JBOSS_HOME}/docs/examples/jca
.Important
ADefaultDS
file must be supplied in the${JBOSS_HOME}/server/production/deploy
directory. - Delete the following files as they refer to the HSQLDB database:
${JBOSS_HOME}/server/production/deploy/hsqldb-ds.xml
${JBOSS_HOME}/server/production/lib/hsqldb.jar
${JBOSS_HOME}/server/production/lib/hsqldb-plugin.jar
${JBOSS_HOME}/server/production/deploy/jboss-messaging.sar/clustered-hsqldb-persistence-service.xml
- Copy the file
oracle-persistence-service.xml
from${JBOSS_HOME}/docs/examples/jms/oracle-persistence-service.xml
to${JBOSS_HOME}/server/production/deploy/jboss-messaging.sar/
.This file contains the definition of persistence service for JBoss Messaging when using an Oracle Database as storage.Note
The table definitions inoracle-persistence-service.xml
are not optimized for performance. - Place your JDBC driver libraries in the directory
${JBOSS_HOME}/server/production/lib/
.If the security policy is to be used, proper permissions must be provided for access to it. - When using the Oracle Database, the database persistence plugin definition must be changed in
${JBOSS_HOME}/server/production/deploy/ejb-deployer.xml
from being:<attribute name="DatabasePersistencePlugin"> org.jboss.ejb.txtimer.GeneralPurposeDatabasePersistencePlugin </attribute>
to being:<attribute name="DatabasePersistencePlugin"> org.jboss.ejb.txtimer.OracleDatabasePersistencePlugin </attribute>
- Comment out the policy for
HsqlDbRealm
in the${JBOSS_HOME}/server/production/conf/login-config.xml
file as shown.<!-- Security domains for testing new jca framework <application-policy name = "HsqlDbRealm"> <authentication> <login-module code = "org.jboss.resource.security.ConfiguredIdentityLoginModule" flag = "required"> <module-option name = "principal">sa</module-option> <module-option name = "userName">cctest</module-option> <module-option name = "password">cc1248</module-option> <module-option name = "managedConnectionFactoryName"> jboss.jca:service=LocalTxCM,name=DefaultDS </module-option> </login-module> </authentication> </application-policy> -->
2.5.5. Required changes to the included JSM policy
${JBOSS_HOME}/bin/security_cc.policy
. The copy of the complete modified policy file can be found in Appendix D, Required Java Security Manager Policy File.
- codeBase
"file:${jboss.server.home.dir}/tmp/-"
in section 3:- Added two more
javax.security.auth.PrivateCredentialPermission
as follows:permission javax.security.auth.PrivateCredentialPermission "javax.crypto.spec.SecretKeySpec * \"*\"", "read"; permission javax.security.auth.PrivateCredentialPermission "org.jboss.security.srp.SRPParameters * \"*\"", "read";
permission java.net.SocketPermission "*", "connect,accept,resolve";
moved from general grant in section 5 to this codeBase.permission org.jboss.naming.JndiPermission "JAXR", "bind,rebind,unbind,lookup,list,listBindings,createSubcontext";
added to this codeBase.
For details refer to the grant for code base"file:${jboss.server.home.dir}/tmp/-"
in Section 3 of thesecurity_cc.policy
file detailed in Appendix D, Required Java Security Manager Policy File.
- Section 4 changes
- Testsuite changes to make all tests pass under security manager.
- Startup time related change
- JNDI binding problem fixed with adding proper permission to test deploy directory
- Minor changes in Oracle JDBC driver permissions need for IBM JRE 1.6 to pass the tests
For details see Section 4 ofsecurity_cc.policy
file in Appendix D, Required Java Security Manager Policy File. - Section 5 ChangesThe following 2 items have been removed from the general grant section.
permission java.util.PropertyPermission "*", "read";
permission java.net.SocketPermission "*", "connect";
For details see Section 5 ofsecurity_cc.policy
file in Appendix D, Required Java Security Manager Policy File. - More detailed comments added throughout the policy file.
2.5.6. Guidance on Configuring Java Security Permissions
Note
grant codeBase "file:${jboss.server.home.dir}/deploy/jmx-console.war/-" { permission java.security.AllPermission; };
TestDeployment.ear
in the deploy directory of the certified system, then an example entry would be the following:
grant codeBase "file:${jboss.server.home.dir}/deploy/jmx-console.war/-" { permission java.util.PropertyPermission "*", "read"; permission javax.security.auth.AuthPermission "createLoginContext.a_login"; permission javax.security.auth.AuthPermission "getLoginConfiguration"; };
TestDeployment.ear
to read Java properties as well as the ability to create JAAS login context and obtain JAAS login configuration.
javax.management.MBeanPermission
as specified in the Java MbeanServer interface:
Chapter 3. Downloading and Verifying the Packages
Important
3.1. Verify the Authenticity of the Download Site.
Important

Figure 3.1. Secure site 'lock' icon displayed in the Firefox3 status bar.

Figure 3.2. Secure site 'lock' icon displayed in the Firefox2 address bar.

Figure 3.3. The RHN certification certificate
3.2. Downloading JBoss EAP from the Red Hat JBoss Customer Support Portal

Figure 3.4. Software downloads page showing available files

Figure 3.5. MD5 information displayed for a download at the Red Hat JBoss Customer Support Portal

Figure 3.6. Security Notice for CVE-2009-0027
3.3. Downloading JBoss EAP from the Red Hat Network
Important

Figure 3.7. Searching for the JBoss Enterprise Application Platform
3.3.1. JBoss Enterprise Middleware (All)
Important

Figure 3.8. JBoss EAP download file list
enterprise-installer-4.3.0.GA_CP03.jar
: The graphical installer for EAP 4.3.0.CP03.jboss-eap-4.3.0.GA_CP03.zip
: The files that make up the EAP 4.3.0.CP03 install.jboss-eap-docs-4.3.0.GA_CP03.zip
: The documentation for EAP 4.3.0.CP03.jboss-eap-src-4.3.0.GA_CP03.zip
: The source code distribution for EAP 4.3.0.CP03.jbeap-4.3.0.GA_CP03_CVE-2009-0027.zip
: The patch for Security Notice CVE-2009-0027.
3.3.2. Red Hat Enterprise Linux AS 4, ES 5, Server 5

Figure 3.9. ISO Image downloads for Red Hat Enterprise Linux Server 5
3.4. Verifying the Downloaded Files
md5sum
utility as detailed below to calculate the checksum values of the files to compare to the supplied values on the website. The checksum values are also documented in Table 3.1, “JBoss EAP MD5 checksum values” for completeness.
Note
md5
.
md5sum
utility and specify the file you downloaded as the first argument as demonstrated here:
Example 3.1. Using the md5sum tool on Linux or Unix
$ md5sum jboss-eap-4.3.0.GA_CP03.zip 4ebffbd38fcb7e259d1d9abbd40b058a jboss-eap-4.3.0.GA_CP03.zip
md5sum
utility must be the same as both the values that are displayed on the Downloads page for the file and those documented in Table 3.1, “JBoss EAP MD5 checksum values”. If they are not the same then then your download is either incomplete or corrupted. You will need to download it again. If after several attempts you are unable to download a copy of the file that produces a valid checksum values you should open a support case to report the problem.
Table 3.1. JBoss EAP MD5 checksum values
File | MD5 Checksum |
---|---|
JBEAP4.3.0-re20090408.0-i386-disc1-ftp.iso | 5561e56f493049b6cd147cdf481d6b57 |
JBEAP4.3.0-re20090408.0-x86_64-disc1-ftp.iso | 07ef18ab2b14858be0efd9a7e1af1e5d |
RHEL5.2-JBEAP-4.3.0-20090408.0-i386-disc1-ftp.iso | c9b80dacc96a5c31c9de2352cbe87011 |
RHEL5.2-JBEAP-4.3.0-20090408.0-x86_64-disc1-ftp.iso | 077f2fd28ce3a05c769e2963f29c97cf |
enterprise-installer-4.3.0.GA_CP03.jar | 7020b8fea3abdfb6c1caeae577dba059 |
jboss-eap-4.3.0.GA_CP03.zip | 4ebffbd38fcb7e259d1d9abbd40b058a |
jboss-eap-docs-4.3.0.GA_CP03.zip | b981279cb8e9127d918d62beddda3516 |
jboss-eap-src-4.3.0.GA_CP03.zip | 3f750b0bd3ec997658a7368cb46e912a |
jbeap-4.3.0.GA_CP03_CVE-2009-0027.zip | 45a3abcfd95d40322d92bd5a0e7dd6ee |
3.5. Installing the Security Notice CVE-2009-0027 patch
Table 3.2. MD5 checksums for patch files
File | MD5 Checksum |
---|---|
jbossws-2.0.1-3.SP2_CP04.4.1.ep1.el5.noarch.rpm | 2b94cc1b052280f2a8cf5856c64972c5 |
jbossws-2.0.1-3.SP2_CP04.4.1.ep1.el5.src.rpm | ccb6c9bd951b3d4df4a4004973533980 |
jbossws-2.0.1-3.SP2_CP04.4.ep1.el4.noarch.rpm | bf61c04a503d914186d0bd68f47dea9b |
jbossws-2.0.1-3.SP2_CP04.4.ep1.el4.src.rpm | 31a4fd98ce9eb02a3b98d7fa7306e8ba |
jbeap-4.3.0.GA_CP03_CVE-2009-0027.zip | 45a3abcfd95d40322d92bd5a0e7dd6ee |
Example 3.2. Installing the RPM patch on Red Hat Enterprise Linux 5
$ rpm -ivh jbossws-2.0.1-3.SP2_CP04.3.1.ep1.el5.noarch.rpm Preparing... ########################################### [100%] 1:jbossws ########################################### [100%]
Procedure 3.1. Installing the patch on a zip install
- Extract the two JAR files from
jbeap-4.3.0.GA_CP03_CVE-2009-0027.zip
. - Copy
jbossws-client.jar
over the existing one in%JBOSS_HOME%/client
. - Copy
jbossws-core.jar
over the existing one in%JBOSS_HOME%/server/production/deploy/jbossws.sar/
. - Repeat step 2 for any other server profiles that you use, such as for development and testing.
3.6. Confirming the Version of your JBoss EAP Installation
- Using the
-V
with the startup scriptYou can retrieve information about the version of your JBoss EAP installation by running the same script used to start the server with the-V
switch. For Linux and Unix installations this script isrun.sh
and on Microsoft Windows installations it isrun.bat
. Regardless of platform the script is located in$JBOSS_HOME/bin
. Using these scripts to actually start your server is dealt with in Chapter 4, Launching the JBoss EAP Server.Running this script with the-V
switch will not start the JBoss EAP server nor does it require the JBoss EAP server to be running. It displays information about the JBoss EAP version and its configured Java environment. Below is an example of using this on an installation of JBoss EAP on Red Hat Linux. Note the version number (JBoss 4.3.0.GA_CP03
) displayed as the last item before the license information.$ ./run.sh -V ======================================================================= JBoss Bootstrap Environment JBOSS_HOME: /opt/JBoss/4.3.CP03/jboss-eap-4.3/jboss-as JAVA: java JAVA_OPTS: -Dprogram.name=run.sh -server -Xms1503m -Xmx1503m -Dsun.rm i.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -Dsun.lang.ClassLoader.allowArraySyntax=true -Djava.net.preferIPv4Stack =true CLASSPATH: /opt/JBoss/4.3.CP03/jboss-eap-4.3/jboss-as/bin/run.jar ======================================================================= JBoss 4.3.0.GA_CP03 (build: SVNTag=JBPAPP_4_3_0_GA_CP03 date=200810241616) Distributable under LGPL license. See terms of license at gnu.org. $
- Using the JMX ConsoleWhen the JBoss EAP server is running you can retreive many details about it using the JMX Console at http://localhost:8080/jmx-consoleThe MBean which contains the version information has the Domain Name of
jboss.system
and type ofserver
. It is directly accessible at http://localhost:8080/jmx-console/HtmlAdaptor?action=inspectMBean&name=jboss.system%3Atype%3DServer. The attributes that contain the version information are: VersionNumber, Version and VersionName.Figure 3.10. Version details displayed in JMX Console
- Using the Web ConsoleWhen the JBoss EAP server is running you can can retrieve its version information from the first page of the Web Console as well. This is located at http://localhost:8080/web-console/.
Figure 3.11. Version details displayed in Web Console
$JBOSS_HOME/server/production/log/boot.log
:
12:33:33,798 INFO [Server] Starting JBoss (MX MicroKernel)... 12:33:33,798 INFO [Server] Release ID: JBoss [EAP] 4.3.0.GA_CP03 (build: SVNTag=JBPAPP_4_3_0_GA_CP03 date=200810241616)
Chapter 4. Launching the JBoss EAP Server
run.conf
, which determines the startup environment of the server. For Linux and Unix installations the startup script is run.sh
and on Microsoft Windows installations it is run.bat
. Regardless of platform the script is located in $JBOSS_HOME/bin
.
4.1. Starting the JBoss EAP Server
-c
command parameter to specify the production
server configuration.
Example 4.1. Starting the JBoss EAP server on Unix or Linux
$ cd $JBOSS_HOME/bin $ ./run.sh -c production
Example 4.2. Starting the JBoss EAP server on Windows
cd %JBOSS_HOME%/bin $ run.bat -c production
4.2. Enabling the Java Security Manager
Warning
run.conf
located in the Enterprise Platform home directory at /jboss-as/server/production/
and uncomment the lines indicated below to enable the Java Security Manager. Once those items are uncommented from run.conf
, simply start the server using the supplied startup script (run.sh
or run.bat
) as normal.
Example 4.3. run.conf
with Java Security Manager enabled
# Uncomment the following to run with Common Criteria configuration ## Specify the Security Manager Policy POLICY="security_cc.policy" # ## Specify the Security Manager options JAVA_OPTS="$JAVA_OPTS -Djava.security.manager -Djava.security.policy==$POLICY" echo "=================================================================" echo " " echo " Common Criteria Configuration (Security Manager Enabled)" echo " " echo "=================================================================" ## End of Common Criteria configuration
Important
run.conf
is part of the production configuration of the EAP. Only the production configuration with the additional configuration information specified in this guide is allowed in the Common Criteria Configuration.
IBM JRE 1.6 uses a default policy provider which does not work correctly with the JBossEAP security policy. You must change the JRE configuration to use the standard policy provider if you want to use IBM JRE 1.6 to host JBossEAP with the Java Security Manager enabled.
${JAVA_HOME}/jre/lib/security/java.security
and setting the value of policy.provider to sun.security.PolicyFile
instead of org.apache.harmony.security.fortress.DefaultPolicy
:
policy.provider=sun.security.provider.PolicyFile
Users and administrators are free to add their own permission blocks to the policy file, however the permissions that are specified for JBoss EAP cannot be changed; doing so will invalidate the certification. Indeed any modifications of the security policy except what has been specified within this guide, will invalidate the certification configuration. Refer to Section 2.5.6, “Guidance on Configuring Java Security Permissions” for additional information on this topic.
Chapter 5. Development Guide for the Common Criteria Certified System
5.1. Enterprise Application
- Web Applications based on Servlets and Java Server Pages (JSP)
- Enterprise Java Beans (EJB)
- JavaEE 1.4 Web Service Applications which can be based on Stateless EJBs or Plain Old Java Objects (POJOs) deployed as Java Servlets.
5.2. General Restrictions
- Application Programming Interfaces (API) that is not documented in the product documentation MUST not be used. Please refer to the section on the guidance for System administrators to configure the certified system, for more information on providing security permissions to the user applications.
- The programming restrictions mandated by the Enterprise Java Beans Specification version 2.1 (Section 25.2, pages 562-564) (http://jcp.org/aboutJava/communityprocess/final/jsr153/index.html) should be strictly followed.
The restrictions are:
- An enterprise bean must not use read/write static fields. Using read-only static fields is allowed. Therefore, it is recommended that all static fields in the enterprise bean class be declared as final.
- An enterprise bean must not use thread synchronization primitives to synchronize execution of multiple instances.
- An enterprise bean must not use the AWT functionality to attempt to output information to a display or to input information from a keyboard.
- An enterprise bean must not use the
java.io
package to attempt to access files and directories in the file system. - An enterprise bean must not attempt to listen on a socket, accept connections on a socket, or use a socket for multicast.
- The enterprise bean must not attempt to query a class to obtain information about the declared members that are not otherwise accessible to the enterprise bean because of the security rules of the Java language. The enterprise bean must not attempt to use the Reflection API to access information that the security rules of the Java programming language make unavailable.
- The enterprise bean must not attempt to
- create a class loader
- obtain the current class loader
- set the context class loader
- set security manager
- create a new security manager
- stop the JVM
- or change the input, output, and error streams
- The enterprise bean must not attempt to set the socket factory used by ServerSocket, Socket, or the stream handler factory used by URL.
- The enterprise bean must not attempt to manage threads. The enterprise bean must not attempt to start, stop, suspend, or resume a thread, or to change a thread's priority or name. The enterprise bean must not attempt to manage thread groups.
- The enterprise bean must not attempt to obtain the security policy information for a particular code source.
- The enterprise bean must not attempt to load a native library.
- The enterprise bean must not attempt to gain access to packages and classes that the usual rules of the Java programming language make unavailable to the enterprise bean.
- The enterprise bean must not attempt to define a class in a package.
- The enterprise bean must not attempt to access or modify the security configuration objects (Policy, Security, Provider, Signer, and Identity).
- The enterprise bean must not attempt to use the subclass and object substitution features of the Java Serialization Protocol.
- The enterprise bean must not attempt to pass this as an argument or method result. The enterprise bean must pass the result of
SessionContext.getEJBObject
,SessionContext.getEJBLocalObject
,EntityContext.getEJBObject
, orEntityContext.getEJBLocalObject
instead.
5.3. Developer Advice for User Credentials in Remote Method Invocation (RMI)
setPrincipal
and setCredential
methods.
Example 5.1. Setting Principal and Credential
MethodInvocation mi = new MethodInvocation(); mi.setPrincipal(new SimplePrincipal("myusername")); mi.setCredential("mypassword");
Example 5.2. Retrieving Principal and Credential
Principal p = mi.getPrincipal(); Object cred = mi.getCredential(); // Now do authentication (and then authorization)
Chapter 6. Overview of the Security Functions
6.1. Access Control
- HTTP
- URLs and paths provided with URLs can be protected from access by subjects.
- EJB
- EJBs and associated method names can be protected from invocation by subjects.
- JMS
- Message queue destinations and topic destinations can be protected from access by subjects.
- Web Services
- Plain Old Java Objects (POJOs) deployed as Servlets and Session Beans can be protected from access by subjects.
- JMX
- The JMX invokers can be protected by validating the role of the authenticated user.
6.2. Audit
Example 6.1. JBoss EAP start up log events
00:30:18,876 INFO [Server] Starting JBoss (MX MicroKernel)... 300:30:18,876 INFO [Server] Release ID: JBoss [EAP] 4.3.0.GA_CP03 (build: SVNTag=JBPAPP_4_3_0_GA_CP03 date=200810241616) 00:30:18,877 DEBUG [Server] Using config: org.jboss.system.server.ServerConfigImpl@18dfef8 00:30:18,877 DEBUG [Server] Server type: class org.jboss.system.server.ServerImpl 00:30:18,877 DEBUG [Server] Server loaded through: org.jboss.system.server.NoAnnotationURLClassLoader 00:30:18,877 DEBUG [Server] Boot URLs:
Example 6.2. JBoss EAP shutdown log events
2008-12-12 00:32:16,460 DEBUG [org.jboss.deployment.MainDeployer] Destroying jboss.system:service=MainDeployer 2008-12-12 00:32:16,460 DEBUG [org.jboss.deployment.MainDeployer] Destroyed jboss.system:service=MainDeployer 2008-12-12 00:32:16,460 DEBUG [org.jboss.system.ServiceController] removing service: jboss.system:service=MainDeployer 2008-12-12 00:32:16,460 DEBUG [org.jboss.system.ServiceController] removing jboss.system:service=MainDeployer from server 2008-12-12 00:32:16,460 DEBUG [org.jboss.system.ServiceController] Stopped 3 services 2008-12-12 00:32:16,460 DEBUG [org.jboss.system.server.Server] Deleting server tmp/deploy directory 2008-12-12 00:32:16,463 INFO [org.jboss.system.server.Server] Shutdown complete
Example 6.3. Log output
2008-12-12 16:04:33,753 826541 TRACE [org.jboss.ejb.plugins.SecurityInterceptor] (WorkerThread#0[127.0.0.1:33182]:) Authenticated principal=scott 2008-12-12 16:04:33,753 826541 TRACE [org.jboss.ejb.plugins.SecurityInterceptor] (WorkerThread#0[127.0.0.1:33182]:) method=public abstract org.jboss.test.jca.securedejb.CallerIdentity org.jboss.test.jca.securedejb.CallerIdentityHome.create() throws javax.ejb.CreateException,java.rmi.RemoteException, interface=HOME, requiredRoles=[CallerIdentityUser]
6.2.1. Enabling Additional Logging
6.3. Clustering
- Applications - an application deployed on one node is replicated to the other nodes of the cluster (farming deployment)
- State of HTTP sessions, EJB 3.0 session beans, EJB 3.0 entity beans, as well as Hibernate persistence objects (distributed state replication service using JBoss Cache)
- State of HTTP sessions and EJB 2.x session beans (distributed state replication service using HASessionState MBean)
- JNDI state (JBoss HA-JNDI)
- JMS queues
6.4. Identification and Authentication
- HTTP and Web Services
- HTTP-basic authentication, HTTP-digest authentication, form-based authentication, client certificate based authentication.
- EJB
- username and password based authentication, client certificate based authentication.
- JMS
- username and password based authentication.
- File-based storage
- BaseCertLoginModule
- LDAP
- Databases accessible through JDBC
6.5. Transaction Rollback
- Atomicity
- A transaction must be atomic. This means that either all the work done in the transaction must be performed, or none of it must be performed. Doing only part of a transaction is not allowed.
- Consistency
- When a transaction is completed, the system must be in a stable and consistent condition.
- Isolation
- Different transactions must be isolated from each other. This means that the partial work done in one transaction is not visible to other transactions until the transaction is committed, and that each process in a multi-user system can be programmed as if it was the only process accessing the system.
- Durability
- The changes made during a transaction are made persistent when it is committed. When a transaction is committed, its changes will not be lost, even if the server crashes afterward.
- Transactions are short lived
- Resources (such as databases) are locked for the duration of the transaction
- Participants have a high degree of trust with each other.
Appendix A. RPM Listings for a Red Hat Enterprise Linux 4 installation
- antlr-2.7.6-3jpp.ep1.2.noarch.rpm
- asm-1.5.3-1jpp.ep1.2.el4.noarch.rpm
- avalon-framework-4.1.5-1jpp.ep1.2.noarch.rpm
- avalon-logkit-1.2-2jpp.ep1.2.noarch.rpm
- bcel-5.1-1jpp.ep1.2.noarch.rpm
- bea-stax-1.2.0-0.rc1.2jpp_1rh.noarch.rpm
- bea-stax-api-1.2.0-0.rc1.2jpp_1rh.noarch.rpm
- berkeleydb-2.0.90-1jpp.ep1.1.noarch.rpm
- bsf-2.3.0-6jpp.ep1.2.noarch.rpm
- bsh-1.3.0-5jpp.ep1.2.noarch.rpm
- cglib-2.1.3-2jpp.ep1.6.el4.noarch.rpm
- concurrent-1.3.4-7jpp.ep1.6.el4.noarch.rpm
- dom4j-1.6.1-2jpp.ep1.2.noarch.rpm
- dtdparser-1.21-2jpp.ep1.2.noarch.rpm
- geronimo-j2ee-1.4-apis-1.0-3jpp.ep1.2.noarch.rpm
- glassfish-jaf-1.1.0-0jpp.ep1.12.el4.noarch.rpm
- glassfish-javamail-1.4.0-0jpp.ep1.10.el4.noarch.rpm
- glassfish-jaxb-2.1.4-1jpp.ep1.2.el4.noarch.rpm
- glassfish-jaxws-2.1.1-1jpp.ep1.3.el4.noarch.rpm
- glassfish-jsf-1.2_09-0jpp.ep1.2.el4.noarch.rpm
- glassfish-jstl-1.2.0-0jpp.ep1.10.el4.noarch.rpm
- gnu-getopt-1.0.12-1jpp.ep1.2.noarch.rpm
- gnu-trove-1.0.2-5jpp.ep1.2.noarch.rpm
- hibernate3-3.2.4-1.SP1_CP06.0jpp.ep1.3.el4.noarch.rpm
- hibernate3-annotations-3.2.1-5.GA_CP03.1jpp.ep1.1.el4.noarch.rpm
- hibernate3-annotations-javadoc-3.2.1-5.GA_CP03.1jpp.ep1.1.el4.noarch.rpm
- hibernate3-commons-annotations-0.0.0-3.1jpp.ep1.1.el4.noarch.rpm
- hibernate3-ejb-persistence-3.0-api-3.2.1-1jpp.ep1.1.noarch.rpm
- hibernate3-ejb-persistence-3.0-api-javadoc-3.2.1-1jpp.ep1.1.noarch.rpm
- hibernate3-entitymanager-3.2.1-2.GA_CP04.1jpp.ep1.2.el4.noarch.rpm
- hibernate3-entitymanager-javadoc-3.2.1-2.GA_CP04.1jpp.ep1.2.el4.noarch.rpm
- hibernate3-javadoc-3.2.4-1.SP1_CP06.0jpp.ep1.3.el4.noarch.rpm
- hibernate3-validator-0.0.0-2.1jpp.ep1.1.el4.noarch.rpm
- hsqldb-1.8.0.8-2.patch01.1jpp.ep1.1.noarch.rpm
- icu4j-3.4.5-2jpp.ep1.1.noarch.rpm
- isorelax-0.1-0.20041111.2jpp.ep1.1.noarch.rpm
- jacorb-2.3.0-1jpp.ep1.4.noarch.rpm
- jakarta-commons-beanutils-1.7.0-2jpp.ep1.5.el4.noarch.rpm
- jakarta-commons-codec-1.3-2jpp.ep1.2.noarch.rpm
- jakarta-commons-collections-3.1-1jpp.ep1.1.noarch.rpm
- jakarta-commons-dbcp-1.2.1-7jpp.ep1.1.noarch.rpm
- jakarta-commons-digester-1.7-6jpp.ep1.1.noarch.rpm
- jakarta-commons-discovery-0.4-1jpp.ep1.1.noarch.rpm
- jakarta-commons-fileupload-1.1.1-3jpp.ep1.1.noarch.rpm
- jakarta-commons-httpclient-3.0.1-1jpp.ep1.1.noarch.rpm
- jakarta-commons-logging-1.0.4-6jpp.ep1.1.noarch.rpm
- jakarta-commons-pool-1.3-2jpp.ep1.1.noarch.rpm
- jakarta-commons-transaction-1.1-3jpp.1.ep1.1.noarch.rpm
- jakarta-slide-webdavclient-2.1-3jpp.ep1.2.noarch.rpm
- javassist-3.8.0-1.ep1.el4.noarch.rpm
- jaxen-1.1-1jpp.ep1.2.noarch.rpm
- jboss-aop-1.5.5-3.CP03.1.ep1.el4.noarch.rpm
- jbossas-4.3.0-3.GA_CP03.6.ep1.el4.noarch.rpm
- jbossas-client-4.3.0-3.GA_CP03.6.ep1.el4.noarch.rpm
- jboss-cache-1.4.1-5.SP10.1.ep1.el4.noarch.rpm
- jboss-common-1.2.1-0jpp.ep1.2.noarch.rpm
- jboss-jaxr-1.2.0-SP1.0jpp.ep1.5.el4.noarch.rpm
- jboss-messaging-1.4.0-2.SP3_CP04.3.ep1.el4.noarch.rpm
- jboss-microcontainer-1.0.2-4.1.el4.noarch.rpm
- jboss-profiler-1.0-0.1.CR5.1jpp.ep1.2.noarch.rpm
- jboss-remoting-2.2.2-3.SP10.0jpp.ep1.1.el4.noarch.rpm
- jboss-seam-1.2.1-3.JBPAPP_4_3_0_GA.ep1.11.el4.noarch.rpm
- jboss-seam-docs-1.2.1-3.JBPAPP_4_3_0_GA.ep1.11.el4.noarch.rpm
- jboss-serialization-1.0.3-1jpp.ep1.3.noarch.rpm
- jbossts-4.2.3-1.SP5_CP02.1jpp.ep1.1.el4.noarch.rpm
- jbossweb-2.0.0-6.CP08.0jpp.ep1.1.el4.noarch.rpm
- jbossws-2.0.1-3.SP2_CP04.1.ep1.el4.noarch.rpm
- jbossws-common-1.0.0-2.GA_CP02.1.ep1.el4.noarch.rpm
- jbossws-framework-2.0.1-1.GA_CP02.1.ep1.el4.noarch.rpm
- jbossws-spi-1.0.0-1.GA_CP01.1.ep1.el4.noarch.rpm
- jbossxb-1.0.0-2.SP3.0jpp.ep1.3.el4.noarch.rpm
- jcommon-1.0.12-1jpp.ep1.3.el4.noarch.rpm
- jdom-1.0-4jpp.ep1.1.noarch.rpm
- jfreechart-1.0.9-1jpp.ep1.3.el4.noarch.rpm
- jgroups-2.4.4-2.ep1.el4.noarch.rpm
- joesnmp-0.3.4-1jpp.ep1.2.noarch.rpm
- juddi-0.9-0.rc4.2jpp.ep1.8.el4.noarch.rpm
- log4j-1.2.14-1jpp.ep1.1.noarch.rpm
- msv-1.2-0.20050722.4jpp.ep1.1.noarch.rpm
- msv-xsdlib-1.2-0.20050722.4jpp.ep1.1.noarch.rpm
- odmg-3.0-3jpp.ep1.2.noarch.rpm
- qdox-1.6.1-1jpp.ep1.4.noarch.rpm
- quartz-1.5.2-1jpp.ep1.2.noarch.rpm
- regexp-1.4-3jpp.ep1.2.noarch.rpm
- relaxngDatatype-1.0-2jpp.ep1.2.noarch.rpm
- rh-eap-docs-4.3.0-4.GA_CP03.ep1.2.el4.noarch.rpm
- servletapi6-6.0.10-3jpp.ep1.1.noarch.rpm
- snmptrapappender-1.2.8-5jpp.ep1.2.noarch.rpm
- tanukiwrapper-3.2.1-2jpp.ep1.1.i386.rpm
- tomcat5-servlet-2.4-api-5.5.17-6jpp.ep1.2.noarch.rpm
- ws-commons-policy-1.0-2jpp.ep1.7.el4.noarch.rpm
- wsdl4j-1.6.2-1jpp.ep1.8.noarch.rpm
- ws-jaxme-0.5.1-2jpp.ep1.1.noarch.rpm
- wstx-3.1.1-1jpp.ep1.2.noarch.rpm
- xalan-j2-2.7.0-2jpp.ep1.3.noarch.rpm
- xerces-j2-2.7.1-9jpp.ep1.1.noarch.rpm
- xjavadoc-1.1-1jpp.ep1.1.noarch.rpm
- xml-commons-1.3.03-7jpp.ep1.3.noarch.rpm
- xml-commons-jaxp-apis-1.3.03-7jpp.ep1.3.noarch.rpm
- xml-commons-resolver-1.1-1jpp.ep1.1.noarch.rpm
- xml-im-exporter-1.1-2jpp.ep1.1.noarch.rpm
- xml-security-1.3.0-1jpp.ep1.2.noarch.rpm
- xom-1.0-2jpp.ep1.1.noarch.rpm
- xpp2-2.1.10-4jpp.ep1.1.noarch.rpm
- xpp3-1.1.3.4-1.o.2jpp.ep1.1.noarch.rpm
Appendix B. RPM Listings for a Red Hat Enterprise Linux 5 installation
- asm-1.5.3-1jpp.ep1.2.el5.noarch.rpm
- bea-stax-1.2.0-0.rc1.2jpp.ep1.1.el5.noarch.rpm
- bea-stax-api-1.2.0-0.rc1.2jpp.ep1.1.el5.noarch.rpm
- berkeleydb-2.0.90-1jpp.ep1.1.el5.noarch.rpm
- cglib-2.1.3-2jpp.ep1.6.el5.noarch.rpm
- concurrent-1.3.4-8jpp.ep1.6.el5.1.noarch.rpm
- dom4j-1.6.1-2jpp.ep1.5.el5.2.noarch.rpm
- dtdparser-1.21-2jpp.ep1.2.el5.2.noarch.rpm
- geronimo-j2ee-1.4-apis-1.0-3jpp.ep1.3.el5.1.noarch.rpm
- glassfish-jaf-1.1.0-0jpp.ep1.12.el5.1.noarch.rpm
- glassfish-javamail-1.4.0-0jpp.ep1.10.el5.noarch.rpm
- glassfish-jaxb-2.1.4-1jpp.ep1.4.el5.2.noarch.rpm
- glassfish-jaxws-2.1.1-1jpp.ep1.3.el5.noarch.rpm
- glassfish-jsf-1.2_09-0jpp.ep1.2.el5.noarch.rpm
- glassfish-jstl-1.2.0-0jpp.ep1.10.el5.noarch.rpm
- gnu-getopt-1.0.12-1jpp.ep1.2.el5.2.noarch.rpm
- gnu-trove-1.0.2-5jpp.ep1.2.el5.2.noarch.rpm
- hibernate3-3.2.4-1.SP1_CP06.0jpp.ep1.3.el5.noarch.rpm
- hibernate3-annotations-3.2.1-5.GA_CP03.1jpp.ep1.1.el5.1.noarch.rpm
- hibernate3-annotations-javadoc-3.2.1-5.GA_CP03.1jpp.ep1.1.el5.1.noarch.rpm
- hibernate3-commons-annotations-0.0.0-3.1jpp.ep1.1.el5.noarch.rpm
- hibernate3-ejb-persistence-3.0-api-3.2.1-1jpp.ep1.1.el5.noarch.rpm
- hibernate3-ejb-persistence-3.0-api-javadoc-3.2.1-1jpp.ep1.1.el5.noarch.rpm
- hibernate3-entitymanager-3.2.1-2.GA_CP04.1jpp.ep1.2.el5.noarch.rpm
- hibernate3-entitymanager-javadoc-3.2.1-2.GA_CP04.1jpp.ep1.2.el5.noarch.rpm
- hibernate3-javadoc-3.2.4-1.SP1_CP06.0jpp.ep1.3.el5.noarch.rpm
- hibernate3-validator-0.0.0-2.1jpp.ep1.1.el5.noarch.rpm
- icu4j-3.4.5-2jpp.ep1.2.el5.noarch.rpm
- isorelax-0.1-0.20041111.2jpp.ep1.2.el5.4.noarch.rpm
- jacorb-2.3.0-1jpp.ep1.5.el5.noarch.rpm
- jakarta-commons-transaction-1.1-3jpp.1.ep1.3.el5.1.noarch.rpm
- jakarta-slide-webdavclient-2.1-3jpp.ep1.3.el5.1.noarch.rpm
- javassist-3.8.0-1jpp.ep1.2.el5.noarch.rpm
- jaxen-1.1-1jpp.ep1.4.el5.2.noarch.rpm
- jboss-aop-1.5.5-3.CP03.1.ep1.el5.noarch.rpm
- jbossas-4.3.0-3.GA_CP03.6.2.ep1.el5.noarch.rpm
- jbossas-client-4.3.0-3.GA_CP03.6.1.ep1.el5.noarch.rpm
- jboss-cache-1.4.1-5.SP10.1.ep1.el5.noarch.rpm
- jboss-common-1.2.1-0jpp.ep1.2.el5.1.noarch.rpm
- jboss-jaxr-1.2.0-SP1.0jpp.ep1.5.el5.noarch.rpm
- jboss-messaging-1.4.0-2.SP3_CP04.3.ep1.el5.noarch.rpm
- jboss-microcontainer-1.0.2-4.1.el5.noarch.rpm
- jboss-profiler-1.0-0.1.CR5.1jpp.ep1.3.el5.1.noarch.rpm
- jboss-remoting-2.2.2-3.SP10.0jpp.ep1.1.el5.noarch.rpm
- jboss-seam-1.2.1-3.JBPAPP_4_3_0_GA.ep1.8.el5.1.noarch.rpm
- jboss-seam-docs-1.2.1-3.JBPAPP_4_3_0_GA.ep1.8.el5.1.noarch.rpm
- jboss-serialization-1.0.3-1jpp.ep1.4.el5.noarch.rpm
- jbossts-4.2.3-1.SP5_CP02.1jpp.ep1.2.el5.noarch.rpm
- jbossweb-2.0.0-6.CP08.0jpp.ep1.1.el5.noarch.rpm
- jbossws-2.0.1-3.SP2_CP04.1.1.ep1.el5.noarch.rpm
- jbossws-common-1.0.0-2.GA_CP02.1.ep1.el5.noarch.rpm
- jbossws-framework-2.0.1-1.GA_CP02.1.ep1.el5.noarch.rpm
- jbossws-spi-1.0.0-1.GA_CP01.1.ep1.el5.noarch.rpm
- jbossxb-1.0.0-2.SP3.0jpp.ep1.3.el5.1.noarch.rpm
- jcommon-1.0.12-1jpp.ep1.3.el5.noarch.rpm
- jfreechart-1.0.9-1jpp.ep1.3.el5.1.noarch.rpm
- jgroups-2.4.4-2.ep1.el5.noarch.rpm
- joesnmp-0.3.4-1jpp.ep1.2.el5.2.noarch.rpm
- juddi-0.9-0.rc4.2jpp.ep1.8.el5.noarch.rpm
- msv-1.2-0.20050722.5jpp.ep1.1.el5.2.noarch.rpm
- msv-xsdlib-1.2-0.20050722.5jpp.ep1.1.el5.2.noarch.rpm
- odmg-3.0-3jpp.ep1.2.el5.1.noarch.rpm
- qdox-1.6.1-1jpp.ep1.5.el5.noarch.rpm
- quartz-1.5.2-1jpp.ep1.5.el5.noarch.rpm
- relaxngDatatype-1.0-2jpp.ep1.2.el5.2.noarch.rpm
- rh-eap-docs-4.3.0-4.GA_CP03.ep1.2.el5.noarch.rpm
- servletapi6-6.0.10-3jpp.ep1.1.el5.noarch.rpm
- snmptrapappender-1.2.8-5jpp.ep1.2.el5.1.noarch.rpm
- tanukiwrapper-3.2.1-2jpp.ep1.1.el5.i386.rpm
- ws-commons-policy-1.0-2jpp.ep1.5.el5.noarch.rpm
- wsdl4j16-1.6.2-0jpp.ep1.2.el5.1.noarch.rpm
- ws-jaxme-0.5.1-2jpp.ep1.1.el5.1.noarch.rpm
- wstx-3.1.1-1jpp.ep1.2.el5.1.noarch.rpm
- xml-im-exporter-1.1-2jpp.ep1.1.el5.1.noarch.rpm
- xml-security-1.3.0-1jpp.ep1.3.el5.2.noarch.rpm
- xom-1.0-2jpp.ep1.3.el5.1.noarch.rpm
- xpp2-2.1.10-4jpp.ep1.2.el5.1.noarch.rpm
- xpp3-1.1.3.4.O-2jpp.ep1.1.el5.1.noarch.rpm
Appendix C. Port Configuration in JBoss EAP
Table C.1. TCP Port Configuration
PORT
|
CONFIG
|
ENABLED
|
PURPOSE
|
---|---|---|---|
1098
|
conf/jboss-service.xml
|
Enabled
|
RMI Naming Service
|
1099
|
conf/jboss-service.xml
|
Enabled
|
RMI bootstrap naming service
|
1100
|
deploy/cluster-service.xml
|
Disabled
|
Clustering
|
1101
|
deploy/cluster-service.xml
|
Disabled
|
Clustering
|
3528
|
conf/jacorb.properties
|
Disabled
|
IIOP Port assigned by IANA
|
3529
|
conf/jacorb.properties
|
Disabled
|
IIOP/SSL Port assigned by IANA
|
3873
|
deploy/ejb3.deployer/META-INF/jboss-service.xml
|
Enabled
|
EJB3 Remoting Connector
|
4444
|
conf/jboss-service.xml
|
Enabled
|
RMI JRMP Invoker
|
4445
|
conf/jboss-service.xml
|
Enabled
|
RMI Pooled Invoker
|
4446
|
conf/jboss-service.xml
|
Enabled
|
Remoting server connector
|
4447
|
conf/jboss-service.xml
|
Enabled
|
Remoting server connector
|
4448
|
deploy/cluster-service.xml
|
Disabled
|
PooledInvokerHA
|
4457
|
deploy/jboss-messaging.sar/remoting-bisocket-service.xml
|
Enabled
|
Messaging bi-socket connector between client and server
|
7900
|
deploy/jboss-messaging.sar/clustered-hsqldb-persistence-service.xml
|
Disabled
| |
8009
|
deploy/jbossweb.deployer/server.xml
|
Disabled
|
AJP Connector
|
8080
|
deploy/jboss-web.deployer/server.xml
|
Enabled
|
Http Connector
|
8083
|
conf/jboss-service.xml
|
Enabled
|
RMI - Mini web server needed for RMI Classloading
|
Table C.2. UDP Port Configuration
PORT
|
CONFIG
|
ENABLED
|
PURPOSE
|
---|---|---|---|
1102
|
cluster-service.xml/HA-JNDI
|
Disabled
| |
1161
|
deploy/snmp-adaptor.sar
|
Disabled
|
snmp
|
1162
|
deploy/snmp-adaptor.sar
|
Disabled
|
snmp
|
7500
|
jboss-web-cluster.sar/diagnostics
ejb3-entity-cache-service.xml/diagnostics
cluster-service.xml/HAPartition/diagnostics
jboss-messaging.sar/clustered-hsqldb-persistence-service.xml/diagnostics
|
Enabled
| |
43333
|
ejb3-entity-cache-service.xml
|
Enabled
|
Clustering cache service for ejb3 entity beans
|
45551
|
ejb3-clustered-sfsbcache-service.xml
|
Enabled
|
EJB3 Stateful Session Bean Clustered Cache
|
45566
|
cluster-service.xml/HAPartition
|
Enabled
| |
45567
|
jboss-messaging.sar/clustered-hsqldb-persistence-service.xml
|
Disabled
| |
45568
|
jboss-messaging.sar/clustered-hsqldb-persistence-service.xml
|
Disabled
| |
45577
|
jboss-web-cluster.sar
|
Enabled
|
Tomcat5 Clustering
|
Appendix D. Required Java Security Manager Policy File
//********************************************************************** // Common Criteria Evaluated Configuration Java2 Security Manager Policy // Author: Anil Saldhana //********************************************************************** //********************************************************** // // Section 1: JBOSS code with codebase references in time // of JBOSS startup // (Permissions are given fully) // Do not modify this section. // //********************************************************** grant codeBase "file:${user.dir}/run.jar" { permission java.security.AllPermission; }; grant codeBase "file:${user.dir}/../lib/*" { permission java.security.AllPermission; }; grant codeBase "file:${user.dir}/../server/production/lib/-" { permission java.security.AllPermission; }; //******************* End of Section 1 ********************** //********************************************************** // // Section 2: Java JDK Core Code // Trusted core Java code // (Permissions are given fully) // Do not modify this section. // //********************************************************** grant codeBase "file:${java.home}/lib/ext/-" { permission java.security.AllPermission; }; grant codeBase "file:${java.home}/lib/*" { permission java.security.AllPermission; }; // For java.home pointing to the JDK jre directory grant codeBase "file:${java.home}/../lib/*" { permission java.security.AllPermission; }; //******************* End of Section 2 ********************** //********************************************************** // // Section 3: Permissions assigned to JBoss Core Codebase // Trusted JBoss code // // Do not modify this section. // //********************************************************** grant codeBase "file:${jboss.home.dir}/bin/-" { permission java.security.AllPermission; }; // Trust all the jars in the server lib that JBoss has shipped grant codeBase "file:${jboss.home.dir}/lib/-" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/work/-" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/activation.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/antlr.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/asm-attrs.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/asm.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/autonumber-plugin.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/avalon-framework.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/bcel.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/bindingservice-plugin.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/bsf.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/bsh-deployer.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/bsh.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/cglib.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/commons-codec.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/commons-collections.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/commons-httpclient.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/commons-logging.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/dom4j.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/ejb3-persistence.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/el-api.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/hibernate3.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/hibernate-annotations.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/hibernate-commons-annotations.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/hibernate-entitymanager.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/hibernate-validator.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/hsqldb.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/hsqldb-plugin.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/jacorb.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/javassist.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/jaxen.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/jboss-cache-jdk50.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/jboss-common-jdbc-wrapper.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/jboss-ejb3x.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/jbossha.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/jboss-hibernate.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/jboss-iiop.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/jboss-j2ee.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/jboss.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/jboss-jaxrpc.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/jboss-jaxws.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/jboss-jca.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/jboss-jsr77.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/jboss-jsr88.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/jbossjta-integration.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/jbossjta.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/jboss-management.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/jboss-messaging-client.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/jboss-messaging.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/jboss-monitoring.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/jboss-remoting-int.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/jboss-remoting.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/jboss-saaj.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/jboss-serialization.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/jboss-srp.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/jbosssx.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/jboss-transaction.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/jbossts-common.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/jboss-vfs.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/jbossws-common.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/jbossws-framework.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/jbossws-jboss42.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/jbossws-spi.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/jgroups.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/jmx-adaptor-plugin.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/jnpserver.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/joesnmp.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/jsp-api.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/log4j.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/log4j-snmp-appender.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/mail.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/mail-plugin.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/properties-plugin.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/quartz-all.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/scheduler-plugin-example.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/scheduler-plugin.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/servlet-api.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/lib/xmlentitymgr.jar" { permission java.security.AllPermission; }; // DEPLOY DIR grant codeBase "file:${jboss.server.home.dir}/deploy/jboss-ha-local-jdbc.rar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/deploy/jboss-ha-xa-jdbc.rar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/deploy/jboss-local-jdbc.rar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/deploy/jboss-xa-jdbc.rar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/deploy/jms-ra.rar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/deploy/quartz-ra.rar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/deploy/httpha-invoker.sar/-" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/deploy/jboss-web-cluster.sar/jboss-web-cluster.aop" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/deploy/jbossws.sar/jaxb-api.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/deploy/jbossws.sar/jaxb-impl.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/deploy/jbossws.sar/jboss-jaxb-intros.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/deploy/jbossws.sar/jboss-jaxrpc.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/deploy/jbossws.sar/jboss-jaxws.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/deploy/jbossws.sar/jboss-saaj.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/deploy/jbossws.sar/jbossws-core.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/deploy/jbossws.sar/jbossws-native.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/deploy/jbossws.sar/policy.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/deploy/jbossws.sar/stax-api.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/deploy/jbossws.sar/wsdl4j.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/deploy/jbossws.sar/wstx.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/deploy/jbossws.sar/xmlsec.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/deploy/juddi-service.sar/juddi.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/deploy/juddi-service.sar/juddi-saaj.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/deploy/juddi-service.sar/juddi-service.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/deploy/juddi-service.sar/juddi.war" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/deploy/juddi-service.sar/scout.jar" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/deploy/uuid-key-generator.sar/*" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/deploy/ejb3.deployer/-" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/deploy/jboss-aop-jdk50.deployer/-" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/deploy/jboss-bean.deployer/-" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/deploy/jboss-web.deployer/*" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/deploy/jboss-web.deployer/jsf-libs/*" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/deploy/management/-" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/deploy/jmx-console.war/-" { permission java.security.AllPermission; }; grant codeBase "file:${jboss.server.home.dir}/tmp/-" { permission java.io.FilePermission "${jboss.server.home.dir}/-", "read,write,delete"; permission java.io.FilePermission "${java.io.tmpdir}", "read,write,delete"; permission java.io.FilePermission "<<ALL FILES>>", "read"; // MBean permissions permission javax.management.MBeanTrustPermission "*"; permission javax.management.MBeanServerPermission "findMBeanServer"; permission javax.management.MBeanPermission "*", "*"; permission java.lang.RuntimePermission "setContextClassLoader"; permission java.lang.RuntimePermission "accessDeclaredMembers"; permission java.lang.RuntimePermission "createClassLoader"; permission java.lang.RuntimePermission "org.jboss.security.SecurityAssociation.setPrincipalInfo"; permission java.lang.RuntimePermission "org.jboss.security.SecurityAssociation.getPrincipalInfo"; permission java.lang.RuntimePermission "org.jboss.security.SecurityAssociation.setServer"; permission java.lang.RuntimePermission "org.jboss.security.SecurityAssociation.setRunAsRole"; permission java.lang.RuntimePermission "loadLibrary.tcnative-1"; permission java.lang.RuntimePermission "loadLibrary.libtcnative-1"; permission java.net.NetPermission "specifyStreamHandler"; permission java.util.PropertyPermission "*", "read,write"; permission java.security.SecurityPermission "getProperty.package.definition"; permission java.security.SecurityPermission "setProperty.package.definition"; permission java.security.SecurityPermission "getProperty.package.access"; permission java.security.SecurityPermission "setProperty.package.access"; permission java.security.SecurityPermission "setPolicy"; permission java.security.SecurityPermission "putProviderProperty.JBossSX"; permission java.security.SecurityPermission "insertProvider.JBossSX"; permission java.lang.reflect.ReflectPermission "suppressAccessChecks"; permission java.net.SocketPermission "*:1024-", "accept,listen"; permission java.util.logging.LoggingPermission "control"; permission javax.security.auth.AuthPermission "doAsPrivileged"; permission javax.security.auth.AuthPermission "modifyPrincipals"; permission javax.security.auth.PrivateCredentialPermission "javax.resource.spi.security.PasswordCredential * \"*\"", "read"; permission javax.security.auth.PrivateCredentialPermission "javax.crypto.spec.SecretKeySpec * \"*\"", "read"; permission javax.security.auth.PrivateCredentialPermission "org.jboss.security.srp.SRPParameters * \"*\"", "read"; permission java.security.SecurityPermission "getPolicy"; permission java.lang.RuntimePermission "accessClassInPackage.*"; permission java.lang.RuntimePermission "getClassLoader"; permission java.lang.RuntimePermission "getProtectionDomain"; permission java.lang.RuntimePermission "org.jboss.security.SecurityAssociation.getSubject"; permission javax.security.auth.AuthPermission "createLoginContext.*"; permission javax.security.auth.AuthPermission "getLoginConfiguration"; permission java.net.SocketPermission "*", "connect,accept,resolve"; permission org.jboss.naming.JndiPermission "JAXR", "bind,rebind,unbind,lookup,list,listBindings,createSubcontext"; }; //******************* End of Section 3 ********************** //********************************************************** // // Section 4: JBoss EAP Testsuite Permissions // // This section is just for test suite purpose and can // safely removed. // General recomendation: This section should be deleted or // commented out in production. //********************************************************** // Testing configuration lib directory permissions grant codeBase "file:${user.dir}/../server/cc/lib/-" { permission java.security.AllPermission; }; // Permissions for the WarPermissionsUnitTestCase // Permissions for crypto tests (putProvider) grant codeBase "file:${jboss.test.deploy.dir}/-" { permission java.util.PropertyPermission "*", "read"; permission java.io.FilePermission "<<ALL FILES>>", "read,write,delete"; permission java.security.SecurityPermission "putProviderProperty.JBossSX"; permission org.jboss.naming.JndiPermission "<<ALL BINDINGS>>", "bind,rebind,unbind,lookup,list,listBindings,createSubcontext"; }; // Following JDBC driver is included just for CC test purpose. // When you test with different JDBC driver than Oracle DB you have to // create your own entries. grant codeBase "file:${jboss.server.home.dir}/lib/ojdbc14.jar" { // change host name and port to one where your database resides. permission java.net.SocketPermission "dev68.qa.atl2.redhat.com:1521", "connect"; permission java.util.PropertyPermission "oracle.net.wallet_location", "read"; permission java.util.PropertyPermission "oracle.jdbc.TcpNoDelay", "read"; permission java.util.PropertyPermission "oracle.jdbc.defaultNChar", "read"; permission java.util.PropertyPermission "oracle.jdbc.useFetchSizeWithLongColumn", "read"; permission java.util.PropertyPermission "oracle.jdbc.convertNcharLiterals", "read"; permission java.util.PropertyPermission "oracle.jdbc.V8Compatible", "read"; permission java.util.PropertyPermission "oracle.jdbc.J2EE13Compliant", "read"; permission java.util.PropertyPermission "oracle.jdbc.FastConnectionFailover", "read"; permission java.util.PropertyPermission "oracle.net.tns_admin", "read"; permission java.util.PropertyPermission "line.separator", "read"; permission java.util.PropertyPermission "user.name", "read"; permission java.util.PropertyPermission "java.version", "read"; permission java.lang.RuntimePermission "accessClassInPackage.sun.jdbc.odbc"; permission java.net.SocketPermission "*", "resolve"; }; //******************* End of Section 4 ********************** //************************************************************** // // Section 5: User Applications Permissions // // This sections is for user application permissions. // Can be modified with care and attention to previously // entered permissions. //************************************************************** // Following lines are here as template for creating JDBC driver // permissions entry specific for your database. If using Oracle, one can // copy JDBC driver permissions from Section 4. //grant codeBase "file:${jboss.server.home.dir}/lib/<your JDBC driver>.jar" //{ // <grant necessary permissions> //}; // Minimal permissions are allowed to everyone else grant { permission java.lang.RuntimePermission "queuePrintJob"; }; //******************* End of Section 5 **********************
Appendix E. Revision History
Revision History | |||
---|---|---|---|
Revision 4.3.3-12.33.400 | 2013-10-30 | Rüdiger Landmann | |
| |||
Revision 4.3.3-12.33 | July 24 2012 | Ruediger Landmann | |
| |||
Revision 4.3.3-12 | Friday Dec 10 2010 | Jared Morgan | |
| |||
Revision 1.0-1 | Mon Apr 20 2009 | Darrin Mison | |
|