來架個網站吧
tomcat
Grails 在生產環境中,最佳的拍檔就是 tomcat 啦~簡單,可以快速部屬的 Servlet容器。
然而tomcat受歡迎的背後,卻也背負不少的CVE認證,所以這邊我會先說明一下如何建立安全?的tomcat 服務。以下是濃縮版本,當然也歡迎在留言區補充~
在可怕的網路世界?能隱藏訊息就隱藏,能多做一點預防措施就多做一點吧。以下是我後來在部屬tomcat服務會做的一些事項:
刪除版本號最主要目的是為了防止對外洩漏tomcat 版本資訊,比較簡單的作法是直接在 conf/server.xml
指定 server name,如下:
<Connector server="application server" />
但是這樣的作法在 404 頁面 時仍然會出現 tomcat 版本資訊。為了解決這個狀況,目前現行可靠的作法是把 catalina.jar
打開之後,修改 ServerInfo.properties
裡面的資訊。
export tomcatHome="/opt/apache-tomcat" &&\
export tomcatVersion="7.0.109" &&\
export javaHome="/usr/local/jvm/jdk17_latest" &&\
mkdir -p ${tomcatHome}/catalina_jar-${tomcatVersion} &&\
cp ${tomcatHome}/apache-tomcat-${tomcatVersion}/lib/catalina.jar ${tomcatHome}/catalina_jar-${tomcatVersion} &&\
cp ${tomcatHome}/apache-tomcat-${tomcatVersion}/lib/catalina.jar ${tomcatHome}/catalina_jar-${tomcatVersion}/catalina.jar.bk &&\
unzip -q ${tomcatHome}/catalina_jar-${tomcatVersion}/catalina.jar -d ${tomcatHome}/catalina_jar-${tomcatVersion}/ &&\
sed -i '/^server.number=.*/c server.number=0' ${tomcatHome}/catalina_jar-${tomcatVersion}/org/apache/catalina/util/ServerInfo.properties &&\
sed -i '/^server.info=.*/c server.info=Apache Tomcat' ${tomcatHome}/catalina_jar-${tomcatVersion}/org/apache/catalina/util/ServerInfo.properties &&\
cd ${tomcatHome}/catalina_jar-${tomcatVersion} &&\
${javaHome}/bin/jar uvf ${tomcatHome}/catalina_jar-${tomcatVersion}/catalina.jar org/apache/catalina/util/ServerInfo.properties &&\
rm -f ${tomcatHome}/apache-tomcat-${tomcatVersion}/lib/catalina.jar &&\
cp ${tomcatHome}/catalina_jar-${tomcatVersion}/catalina.jar ${tomcatHome}/apache-tomcat-${tomcatVersion}/lib/catalina.jar
sudo su tomcat -c "rm /home/tomcat/apache-tomcat-${tomcatVersion}/lib/catalina.jar"
sudo su tomcat -c "cp /home/tomcat/catalina_jar/catalina.jar.bk /home/tomcat/apache-tomcat-${tomcatVersion}/lib/catalina.jar"
在這方面我有遇過正式環境中,出現不明的服務。後來發現在 webapps
目錄中,出現隱藏檔案目錄,如 webapps/.test
。後來是直接把 unpackWARs
、autoDeploy
、reloadable
全部關掉。
unpackWARs="false" autoDeploy="false" reloadable="false"
<?xml version='1.0' encoding='utf-8'?>
<Server port="-1" shutdown="SHUTDOWN">
<!--部份省略-->
<Engine name="Catalina" defaultHost="localhost">
<!--部份省略-->
<Host name="localhost" appBase="/wezoomtek/webapps/w1"
unpackWARs="false" autoDeploy="false" reloadable="false"
>
<!--部份省略-->
</Engine>
</Service>
</Server>
在生產環境中最怕服務突然無預警關閉,更何況還預留 port 好心給別人呢!所以記得關閉!
<?xml version='1.0' encoding='utf-8'?>
<Server port="-1" shutdown="SHUTDOWN">
<!--部份省略-->
</Server>
最後,如果 tomcat 是從官方網站下載的,記得把原有在 webapps
裡的服務通通都刪除,我相信絕大多時候都不會用到。