[
https://issues.apache.org/jira/browse/GERONIMO-3084?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12488590
]
David Jencks commented on GERONIMO-3084:
----------------------------------------
I have not looked into this AT ALL so my comment may be ridiculous but I wonder
if writing a jacc-based ActiveMQ authoriztion plugin would be the best solution
here? There would be some ActiveMQ permissions and we'd check them against the
ACC. I tried something similar for jetspeed portal permissions and it worked
fine.
> Incompatibilitiy between ActiveMQ JAAS and Geronimo JAAS
> --------------------------------------------------------
>
> Key: GERONIMO-3084
> URL: https://issues.apache.org/jira/browse/GERONIMO-3084
> Project: Geronimo
> Issue Type: Bug
> Security Level: public(Regular issues)
> Components: ActiveMQ
> Affects Versions: 1.2
> Reporter: Aman Nanner
>
> I have reconfigured Geronimo so that the ActiveMQ broker loads its
> configuration from an external XML file. Within this file, I have specified
> a security configuration for my queues and topics. This is the file:
> ----
> {code}
> <beans>
> <!-- Allows us to use system properties as variables in this configuration
> file -->
> <bean
> class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"/>
>
> <broker brokerName="localhost" useJmx="true"
> xmlns="http://activemq.org/config/1.0">
>
> <plugins>
> <!-- use JAAS to authenticate using the login.config file on the
> classpath to configure JAAS -->
> <jaasAuthenticationPlugin configuration="geronimo-admin" />
> <!-- lets configure a destination based authorization mechanism -->
> <authorizationPlugin>
> <map>
> <authorizationMap>
> <authorizationEntries>
> <authorizationEntry queue=">" read="admin" write="admin"
> admin="admin" />
> <authorizationEntry topic=">" read="admin" write="admin"
> admin="admin" />
> </authorizationEntries>
> </authorizationMap>
> </map>
> </authorizationPlugin>
> </plugins>
>
> </broker>
> <!-- lets create a command agent to respond to message based admin commands
> on the ActiveMQ.Agent topic
> <commandAgent xmlns="http://activemq.org/config/1.0"/>-->
> </beans>
> {code}
> ----
> As can be seen, I am using the following JAAS login config domain:
> geronimo-admin. This is the standard login domain that gets its users and
> groups from properties files. However, when running the Geronimo server,
> JAAS cannot matchup the "admin" role specified in the ActiveMQ XML file with
> the "admin" role specified in the groups.properties file for the
> "geronimo-admin" login domain. The problem is that the ActiveMQ role is a
> principal of type {{org.apache.activemq.jaas.GroupPrincipal}}, while the
> Geronimo JAAS "admin" role is of the type
> {{org.apache.geronimo.security.realm.providers.GeronimoGroupPrincipal}}.
> Because these principals are different classes, they are not considered
> "equal" to each other by the {{equals()}} method on
> {{org.apache.activemq.jaas.GroupPrincipal}}. The stack trace where the error
> occurs is here:
> ----
> {code}
> Thread [ActiveMQ Transport: tcp:///192.168.12.196:2453] (Suspended)
> GeronimoGroupPrincipal.equals(Object) line: 42
> HashMap<K,V>.eq(Object, Object) line: 299
> HashMap<K,V>.containsKey(Object) line: 381
> HashSet<E>.contains(Object) line: 182
> HashSet<E>(AbstractCollection<E>).retainAll(Collection<?>) line: 392
>
> JaasAuthenticationBroker$JaasSecurityContext(SecurityContext).isInOneOf(Set)
> line: 43
> AuthorizationBroker.addDestination(ConnectionContext,
> ActiveMQDestination) line: 64
> BrokerService$2(MutableBrokerFilter).addDestination(ConnectionContext,
> ActiveMQDestination) line: 152
> ManagedTopicRegion(AbstractRegion).lookup(ConnectionContext,
> ActiveMQDestination) line: 316
> ManagedTopicRegion(AbstractRegion).send(ConnectionContext, Message)
> line: 291
> ManagedRegionBroker(RegionBroker).send(ConnectionContext, Message)
> line: 385
> TransactionBroker.send(ConnectionContext, Message) line: 193
> AdvisoryBroker.fireAdvisory(ConnectionContext, ActiveMQTopic, Command,
> ConsumerId, ActiveMQMessage) line: 272
> AdvisoryBroker.fireAdvisory(ConnectionContext, ActiveMQTopic, Command,
> ConsumerId) line: 237
> AdvisoryBroker.fireAdvisory(ConnectionContext, ActiveMQTopic, Command)
> line: 232
> AdvisoryBroker.addConnection(ConnectionContext, ConnectionInfo) line:
> 73
>
> CompositeDestinationBroker(BrokerFilter).addConnection(ConnectionContext,
> ConnectionInfo) line: 82
> JaasAuthenticationBroker(BrokerFilter).addConnection(ConnectionContext,
> ConnectionInfo) line: 82
> JaasAuthenticationBroker.addConnection(ConnectionContext,
> ConnectionInfo) line: 90
> AuthorizationBroker(BrokerFilter).addConnection(ConnectionContext,
> ConnectionInfo) line: 82
> BrokerService$2(MutableBrokerFilter).addConnection(ConnectionContext,
> ConnectionInfo) line: 92
> TransportConnection.processAddConnection(ConnectionInfo) line: 706
> ConnectionInfo.visit(CommandVisitor) line: 121
> TransportConnection.service(Command) line: 294
> TransportConnection$1.onCommand(Object) line: 185
> MutexTransport(TransportFilter).onCommand(Object) line: 65
> WireFormatNegotiator.onCommand(Object) line: 133
> InactivityMonitor.onCommand(Object) line: 122
> TcpTransport(TransportSupport).doConsume(Object) line: 84
> TcpTransport.run() line: 137
> Thread.run() line: 595
> {code}
> ----
> Securing the ActiveMQ resources is an important component to securing a
> production server, so some way of resolving this issue should be determined.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.