作为为tomcat定义的强化任务之一,我应该更改 $CATALINA_HOME/bin/version.sh
输出假值。
从我能找到的情况来看,这似乎很直接。所有的文章基本上都指向:从catalina.jar中提取serverinfo.properties,修改它,重新提交它,然后重新启动tomcat。
但在无状态容器世界中,我必须提取、修改、重新提交、启动tomcat。如果在tomcat启动后重新启动容器,则容器将死亡。以下是我在容器入口点shell脚本中尝试的步骤:
jar -xf /opt/tomcat/lib/catalina.jar org/apache/catalina/util/ServerInfo.properties
sed -i 's@server.info=.*@server.info=Server@' /opt/tomcat/org/apache/catalina/util/ServerInfo.properties
sed -i 's@server.number=.*@server.info=0.0@' /opt/tomcat/org/apache/catalina/util/ServerInfo.properties
jar -uf /opt/tomcat/lib/catalina.jar org/apache/catalina/util/ServerInfo.properties
但是,在9.0.45中,重新提交回catalina.jar会抛出一个错误:
jar: Package org.apache.catalina.ssi missing from ModulePackages class file attribute
调查这一点,我发现modulepackages类文件属性中缺少jar:package org.apache.catalina.ssi
…本质上说,这是tomcat新版本中的一个bug,绕过它的人使用了7zip而不是jar。因此,我用以下内容修改了我的代码:
mkdir -p /opt/tomcat/test
pushd /opt/tomcat/test
7z x -y /opt/tomcat/lib/catalina.jar:org/apache/catalina/util/ServerInfo.properties
sed -i 's@server.info=.*@server.info=Server@' /opt/tomcat/test/ServerInfo.properties
sed -i 's@server.number=.*@server.info=0.0@' /opt/tomcat/test/ServerInfo.properties
7z u /opt/tomcat/lib/catalina.jar:org/apache/catalina/util/ServerInfo.properties /opt/tomcat/test/ServerInfo.properties
popd
…虽然就我所知,这确实有效(备份位置(测试)中的serverinfo.properties文件确实成功修改,并且我在容器控制台日志输出中从7zip收到一个成功指示器,用于重新提交),但在tomcat启动并运行version.sh后,它仍然报告实际的verison。
重申一下,这些更改是在tomcat启动之前应用的,所以即使所有文档都说要在更改后重新启动tomcat,我希望我不必重新启动tomcat(同样,因为此操作会终止容器并擦除任何交互式容器更改(无状态))。
编辑1:为了确认,在容器启动后,我已执行到容器中,以验证entrypoint脚本是否成功。我手动从catalina.jar中提取了该文件,并验证了操作是否成功,因为从catalina.jar中交互提取的serverinfo.properties确实反映了更改(因此该过程似乎有效),但运行$catalina_home/bin/version.sh仍然显示实际版本。。。
1条答案
按热度按时间7ivaypg91#
还有另一种选择,它更简单,也很好用。
或者,可以通过创建文件catalina_base/lib/org/apache/catalina/util/serverinfo.properties来更改版本号,其内容如下。。。
https://tomcat.apache.org/tomcat-9.0-doc/security-howto.html#web.xml
你不需要更换任何东西
catalina.jar
只需按如下方式创建这个额外的配置文件,就足够了。奖金
从服务器响应中的http头中删除服务器信息(也请选中此项)。