1. 創建專用Tomcat用戶和用戶組
為避免以root權限運行Tomcat(降低安全風險),需創建專用用戶及用戶組。常用命令如下:
sudo groupadd tomcat # 創建tomcat用戶組
sudo useradd -M -s /sbin/nologin -g tomcat -d /opt/tomcat tomcat # 創建用戶(無登錄權限,指定家目錄)
其中,-M
表示不創建家目錄,-s /sbin/nologin
禁止用戶登錄系統,-d
指定家目錄為Tomcat安裝路徑。
2. 更改Tomcat目錄所有權
將Tomcat安裝目錄(如/opt/tomcat
)的所有者和用戶組設置為tomcat
,確保Tomcat進程有權訪問:
sudo chown -R tomcat:tomcat /opt/tomcat # -R表示遞歸修改所有子目錄和文件
3. 設置目錄權限
為目錄分配合理權限,兼顧訪問需求與安全性:
755
(所有者可讀/寫/執行,組和其他用戶可讀/執行),適用于bin
、conf
、webapps
等目錄;644
(所有者可讀/寫,組和其他用戶可讀),適用于*.xml
、*.properties
等配置文件。sudo find /opt/tomcat -type d -exec chmod 755 {} \; # 遞歸設置目錄權限
sudo find /opt/tomcat -type f -exec chmod 644 {} \; # 遞歸設置文件權限
此外,需為啟動腳本添加執行權限:
sudo chmod +x /opt/tomcat/bin/*.sh # 允許執行startup.sh、shutdown.sh等腳本
4. 配置Tomcat服務以專用用戶運行
通過修改Systemd服務文件,確保Tomcat啟動時使用tomcat
用戶:
編輯/etc/systemd/system/tomcat.service
(若未創建,可復制默認模板),在[Service]
部分添加:
[Service]
User=tomcat
Group=tomcat
UMask=0007 # 設置文件創建掩碼(默認權限為777-0007=770)
RestartSec=10
Restart=always
然后重新加載Systemd并重啟Tomcat:
sudo systemctl daemon-reload
sudo systemctl restart tomcat
5. 配置SELinux(若系統啟用)
若SELinux處于enforcing
模式(sestatus
命令驗證),需調整策略允許Tomcat訪問資源:
httpd_sys_content_t
(靜態內容),日志目錄標記為httpd_sys_rw_content_t
(可讀寫):sudo chcon -R -t httpd_sys_content_t /opt/tomcat # 靜態內容上下文
sudo chcon -R -t httpd_sys_rw_content_t /opt/tomcat/logs # 日志目錄可寫
/etc/selinux/config
,將SELINUX=enforcing
改為SELINUX=permissive
(臨時允許),重啟系統后再改回enforcing
;或使用semanage
命令永久添加上下文:sudo semanage fcontext -a -t httpd_sys_content_t "/opt/tomcat(/.*)?" # 添加規則
sudo restorecon -Rv /opt/tomcat # 恢復上下文
CAP_NET_BIND_SERVICE
能力:sudo setcap 'cap_net_bind_service=+ep' /opt/tomcat/bin/java
6. 配置防火墻
允許外部訪問Tomcat默認端口(8080),若使用其他端口需相應調整:
sudo firewall-cmd --permanent --zone=public --add-port=8080/tcp # 永久添加端口規則
sudo firewall-cmd --reload # 重新加載防火墻配置
7. 刪除默認應用(可選但推薦)
首次安裝后,刪除webapps
目錄下的默認應用(如ROOT
、examples
),防止惡意代碼部署:
sudo rm -rf /opt/tomcat/webapps/*
8. 隱藏Tomcat版本信息(可選)
修改server.xml
中的Connector
標簽,添加server
屬性,隱藏Tomcat版本:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
server="MyAppServer/1.0" />
9. 關閉自動部署(可選但推薦)
在server.xml
的Context
標簽中,設置autoDeploy="false"
和unpackWARs="false"
,防止惡意WAR文件自動部署:
<Context docBase="/opt/tomcat/webapps/yourapp"
unpackWARs="false"
autoDeploy="false" />