我正在使用 fusemq,它是 ActiveMQ-CPP 的 C 包装器。
问题是我将代理与 Apache 服务器模块一起使用。它应该向代理发送一条消息,以便另一个程序可以使用它。我有一个测试所有这些的脚本,我已经登录我的模块,告诉我消息是否已成功发送。当 Apache 以 root 身份正常启动并且 ActiveMQ 以 root 身份启动时,我的脚本卡住了。追溯表明它仍在等待响应。我在日志中注意到该模块在与代理创建默认会话时卡住了。当我在这些相同的情况下单步执行 GDB 中的模块时,消息发送成功并且管理面板显示我的队列中有一条消息。当模块运行时,它会以 apache 用户的身份执行所有操作,所以我认为这就是问题所在。所以我正常启动服务器并将 ActiveMQ 作为 apache 运行。
503 的 activemq.log 输出:
2013-05-28 13:47:51,823 | WARN | Committed before 503 null | org.eclipse.jetty.server.Response | qtp1146944158-23
2013-05-28 13:47:51,824 | WARN | /admin/ | org.eclipse.jetty.server.AbstractHttpConnection | qtp1146944158-23
java.lang.IllegalStateException: Committed
at org.eclipse.jetty.server.Response.resetBuffer(Response.java:1126)
at org.eclipse.jetty.server.Response.sendError(Response.java:313)
at org.eclipse.jetty.server.Response.sendError(Response.java:415)
at org.eclipse.jetty.server.handler.ContextHandler.checkContext(ContextHandler.java:820)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:916)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:154)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:521)
at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:154)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
at org.eclipse.jetty.server.Server.handle(Server.java:363)
at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:483)
at org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:920)
at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:982)
at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:635)
at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235)
at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82)
at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:627)
at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:51)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)
at java.lang.Thread.run(Thread.java:722)
编辑:我现在正在针对服务器重新运行我的脚本,而 ActiveMQ 正在作为 apache 运行并且服务器是 root 并且脚本挂起。它在创建默认会话时卡住了。当我在 GDB 中单步执行时,它仍然有效……
编辑:我运行了 setenforce 0 并且一切正常。不知道为什么会这样。有任何想法吗?
编辑:我跑了 ausearch -m avc -ts 05/30/2013 ,这是输出 -
时间->2013 年 6 月 4 日星期二 08:47:40
type=SYSCALL msg=audit(1370357260.183:29896): arch=c000003e syscall=21 success=no exit=-13 a0=c050b0 a1=7 a2=20 a3=a0 items=0 ppid=2618 pid=2633 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=2 comm="gdm-session-wor" exe="/usr/libexec/gdm-session-worker" subj=system_u:system_r:xdm_t:s0-s0:c0.c1023 key=(null)
type=AVC msg=audit(1370357260.183:29896): avc: denied { read } for pid=2633 comm="gdm-session-wor" name="root" dev=dm-0 ino=1835009 scontext=system_u:system_r:xdm_t:s0-s0:c0.c1023 tcontext=system_u:object_r:admin_home_t:s0 tclass=dir
好吧,我设法弄清楚了这个问题,以防任何偶然发现这个问题的人感到好奇。
我再次启用 selinux 并将端口 61616(用于 openwire 连接的端口)、61613(用于 stomp 连接的端口)和 8161(用于管理控制台的端口)添加到 http_port_t 的允许列表中。
我使用了命令: