Tomcat 对 ps -ef 保密环境变量

Tomcat Keep Environment Variables Secret from ps -ef

当我在 Tomcat setenv.sh 中自定义 JAVA_OPTS 和 CATALINA_OPTS 时,这些变量的内容在 linux 中可用 [=21] =] 命令,因为它们在命令行上传递给 tomcat。

有罪摘录自 Tomcat 10 开始脚本 (catalina.sh)

eval exec "\"$_RUNJDB\"" "\"$CATALINA_LOGGING_CONFIG\"" $LOGGING_MANAGER "$JAVA_OPTS" "$CATALINA_OPTS" \

我有一些遗留应用程序可以通过这种方式在其 java 属性中获取密码等机密信息。但是哦,不,这会将密码暴露给机器上的任何人 ps -ef!

是否有某种方法可以将属性文件传递给 Tomcat 类加载器,以便可以将密码作为 java 属性传递给遗留 apps,但不会公开在命令行上,就像它们在 JAVA_OPTS 或 CATALINA_OPTS 中一样?我在Tomcat3中看到这样的配置server.xml,不过那是古董了。

在非常早的启动阶段 Tomcat 读取 $CATALINA_BASE/conf/catalina.properties 文件,因此对于大多数系统属性,无需在命令行上提供它们(JAVA_OPTSCATALINA_OPTS).对于您的目的,这应该足够好了。

必须在命令行中提供的唯一系统属性是:

  • catalina.basecatalina.home(显然),
  • Tomcat logging
  • 的配置
  • 在用户代码之前启动的 JMX 和其他工具的配置。