提问人:Valdis Ibeh 提问时间:10/12/2023 最后编辑:Mads HansenValdis Ibeh 更新时间:10/19/2023 访问量:48
Java 安全管理器的 DOD STIG 修复不起作用
DOD STIG fix for Java Security Manager not working
问:
我正在尝试为 Java Security Manager 应用 DOD STIG 修复程序。该修复要求我修改 /etc/systemd/system/tomcat.service 文件并将“ExecStart”参数设置为:。ExecStart=/opt/tomcat/bin/startup.sh -security
应用此修复程序后,tomcat 将无法启动。还有其他人遇到过这个问题吗?
我添加到了 .保存/退出tomcat.service文件后,我应用了该命令。我希望 tomcat 按预期运行,但一段时间后无法启动。-security
ExecStart=/opt/tomcat/bin/startup.sh
systemctl daemon-reload
当我重新启动tomcat时,catalina.out显示以下内容:
19-Oct-2023 14:16:26.412 严重 [acop-startStop-1] org.apache.catalina.core.ContainerBase.startInternal 子容器 启动时失败 java.util.concurrent.ExecutionException:org.apache.catalina.LifecycleException:无法启动组件 [标准引擎[a2]。StandardHost[本地主机]。标准上下文[/a2]] 在 java.util.concurrent.FutureTask.report(FutureTask.java:122) 在 java.util.concurrent.FutureTask.get(FutureTask.java:192) 在 org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:892) 在 org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:793) 在org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) 在 org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1362) 在 org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1352) 在 java.util.concurrent.FutureTask.run(FutureTask.java:266) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 在 java.lang.Thread.run(Thread.java:750) 原因:org.apache.catalina.LifecycleException:无法启动组件 [标准引擎[a2]。StandardHost[本地主机]。标准上下文[/a2]] 在 org.apache.catalina.util.LifecycleBase.handleSubClassException(LifecycleBase.java:440) 在org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:198) ...另外 6 个 原因:java.security.AccessControlException:访问被拒绝(“java.lang.RuntimePermission” “accessClassInPackage.org.apache.catalina.connector”) 在 java.security.AccessControlContext.checkPermission(AccessControlContext.java:472) 在 java.security.AccessController.checkPermission(AccessController.java:886) 在 java.lang.SecurityManager.checkPermission(SecurityManager.java:549) 在 java.lang.SecurityManager.checkPackageAccess(SecurityManager.java:1564) 在 java.lang.ClassLoader$1.run(ClassLoader.java:496) 在 java.lang.ClassLoader$1.run(ClassLoader.java:494) 在 java.security.AccessController.doPrivileged(本机方法) 在 java.lang.ClassLoader.checkPackageAccess(ClassLoader.java:494) 在 java.lang.Class.getDeclaredFields0(本机方法) 在 java.lang.Class.privateGetDeclaredFields(Class.java:2583) 在 java.lang.Class.getDeclaredFields(Class.java:1916) 在 org.apache.catalina.util.Introspection$1.run(Introspection.java:106) 在 org.apache.catalina.util.Introspection$1.run(Introspection.java:103) 在 java.security.AccessController.doPrivileged(本机方法) 在org.apache.catalina.util.Introspection.getDeclaredFields(Introspection.java:102) 在 org.apache.catalina.startup.WebAnnotationSet.loadFieldsAnnotation(WebAnnotationSet.java:269) 在 org.apache.catalina.startup.WebAnnotationSet.loadApplicationServletAnnotations(WebAnnotationSet.java:137) 在 org.apache.catalina.startup.WebAnnotationSet.loadApplicationAnnotations(WebAnnotationSet.java:69) 在 org.apache.catalina.startup.ContextConfig.applicationAnnotationsConfig(ContextConfig.java:329)
答:
您可能需要修改 conf/catalina.policy
并包含一些额外的权限,例如:
permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina.connector";
评论
./startup.sh -security
systemctl daemon-reload
sudo systemctl restart tomcat