因為已知的安全性漏洞已修補, 不得不升級 tomcat 版本。
下載 Tomcat
官方網站: https://tomcat.apache.org/
選擇 Binary Distributions 裡的 Core 分類裡的 .tar.gz 來下載, 例如 tomcat 9.x:
https://tomcat.apache.org/download-90.cgi
我的環境的 tomcat 目錄是在 /opt/tomcat/, 先到目的資料夾:
cd /opt/tomcat
先把 tar.gz 搬到或下載到 /opt/tomcat/, 下載用指令:
sudo wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.93/bin/apache-tomcat-9.0.93.tar.gz
使用下列指令解壓縮
sudo tar zxvf apache-tomcat-9.0.93.tar.gz
上圖可以看的出來, 搬進去 /opt/tomcat 的帳號是 max, 解壓縮後目錄的擁有者的是 root
關於權限的設定, 下載並解壓縮好 tomcat 的 .tar.gz 之後, 由於是開發環境, 並不是實際營運的線上環境, 建議在解壓縮完後, 粗暴地修改整個目錄 chown 為 tomcat:tomcat, 修改檔案屬性 chmod 755.
sudo chown tomcat:tomcat -R apache-tomcat-9.0.93
sudo chmod 755 -R apache-tomcat-9.0.93
備份 Server 參數
升級前, 請先把 eclipse workspace 裡的 Server 目錄備份下來, 不然之前輸入進去的參數需要重新來過, 很花時間.
Eclipse 的設定
在 eclipse 裡, 點 Window -> Server
New Server, 在 Tomcat 分類展開, 選擇你的Tomcat 主版號, 我是用 Tomcat 9.0
接著點 “Configu runtime environments…, 可以在這裡新增下載到的版本, 順便把舊的版本也刪掉, 避免太多版本, 容易混亂.
以我的情境來說, 因為 [漏洞編號] CVE-2023-41080: FORM 認證功能中存在 URL 重新導向到不受信任網站的漏洞, 目標是, 是 tomcat 要從 9.0.86 升到 9.0.93,
刪除新的下載的 9.0.93 資料夾
sudo rm -rf apache-tomcat-9.0.93/webapps/ROOT
sudo rm -rf apache-tomcat-9.0.93/webapps/docs
sudo rm -rf apache-tomcat-9.0.93/webapps/examples
sudo rm -rf apache-tomcat-9.0.93/webapps/host-manager
執行畫面:
搬動使用到的第三方 .jar 元件:
sudo cp apache-tomcat-9.0.86/lib/commons-io-2.11.0.jar apache-tomcat-9.0.93/lib/
sudo cp apache-tomcat-9.0.86/lib/json-20230227.jar apache-tomcat-9.0.93/lib/
sudo cp apache-tomcat-9.0.86/lib/mysql-connector-j-8.0.32.jar apache-tomcat-9.0.93/lib/
接著是把用到的tomcat 以外的第三方元件, 重新修改在 eclipse project 裡的properties 裡的
說明:
- 先點 Classpath 圖示後, 按下右邊的Add External JARs… 加入的 .jar 檔.
- 如果是先 Remove, 再 Add External JARs…, 需要在 Order and Export 裡設勾 .jar 一起 Export.
- 如果無法瀏覽 /opt/tomcat/apache-tomat-9.0.93/ 目錄, 請把目錄權限設為 755 問題就解決了.
在 Window -> Server 裡, 並把目前的專案, 加入新 Server 裡, 成功之後, 再去刪掉舊版本的Server, 這樣子設定值比較好複製。
重要:
由於 server.xml 的格式內容,可能在新的 tomcat 版本被調整,建議的作法是,先備份舊版設定值,然後去修改新的 tomcat 裡產生出來的 xml 檔,比較不會發生問題。
在增加新的 Server 時, 記得要把 resource 也一起加進去, 沒加的話, 新的 Server 會跑不動。
新的 Tomcat 可以執行後, 舊的有問題的版本, 就可以直接刪除了。
由於掉刪 Servers, 可能會顯示錯誤訊息:
javax.servlet cannot be resolved
解法:只要按照下列步驟在Eclipse中導入就可以了。右擊項目,選擇Properties, 進入下界面,依次點擊:
Java Build Path —> Add Library —> Server Runtime —> Next
相關文章
How To Create A Self Signed SSL Certificate For Use With Tomcat?
https://stackoverflow.max-everyday.com/2023/04/how-to-create-a-self-signed-ssl-certificate-for-use-with-tomcat/
How To Store String Values In Tomcat Context.Xml
https://stackoverflow.max-everyday.com/2023/03/how-to-store-string-values-in-tomcat-context-xml/
How To Start A New Thread When Tomcat Start
https://stackoverflow.max-everyday.com/2023/06/how-to-start-a-new-thread-when-tomcat-start/
How to upgrade Tomcat version manually on existing on-premise Foundry instance in case of security vulnerabilities
https://support.hcltechsw.com/csm?id=kb_article&sysparm_article=KB0099544
Server Apache Tomcat v9 at localhost was unable to start within 45 seconds. If the server requires more time, try increasing the timeout in the server editor.
https://stackoverflow.max-everyday.com/2024/08/server-apache-tomcat-was-unable-to-start-within-45-seconds/