1. 創建專用Tomcat用戶與用戶組
為隔離Tomcat進程與系統關鍵操作,需創建專用用戶及用戶組。常用命令如下:
sudo groupadd tomcat # 創建tomcat用戶組
sudo useradd -M -s /sbin/nologin -g tomcat -d /opt/tomcat tomcat # 創建無登錄權限的tomcat用戶(家目錄設為Tomcat安裝路徑)
-M:不創建家目錄(若已存在安裝目錄可省略);-s /sbin/nologin:禁止用戶通過shell登錄,降低安全風險。2. 調整Tomcat目錄所有權
將Tomcat安裝目錄(如/opt/tomcat)的所有權賦予tomcat用戶及用戶組,確保進程有權訪問:
sudo chown -R tomcat:tomcat /opt/tomcat # 遞歸修改所有權
-R:遞歸處理目錄及子目錄、文件。3. 設置目錄與文件權限
根據目錄/文件的用途分配合理權限,遵循最小權限原則:
bin、conf、webapps、logs)需允許用戶進入和讀取,設置為755:sudo find /opt/tomcat -type d -exec chmod 755 {} \; # 僅所有者有寫權限,其他用戶可讀/執行
conf/server.xml、web.xml)需限制為僅所有者可寫,設置為644:sudo find /opt/tomcat -type f -exec chmod 644 {} \; # 所有者可讀/寫,其他用戶只讀
webapps目錄下的應用文件可能需要更嚴格的權限(如750),防止未授權訪問:sudo chmod -R 750 /opt/tomcat/webapps # 僅所有者和組可訪問
4. 配置Tomcat服務以專用用戶運行
修改systemd服務文件(如/etc/systemd/system/tomcat.service),指定運行用戶/組及權限掩碼:
[Service]
User=tomcat
Group=tomcat
UMask=0007 # 設置文件創建權限掩碼(所有者可讀/寫/執行,組可讀/執行,其他用戶無權限)
RestartSec=10
Restart=always
修改后需重新加載systemd并重啟Tomcat:
sudo systemctl daemon-reload
sudo systemctl restart tomcat
5. 處理SELinux限制(若啟用)
若系統啟用SELinux,需調整上下文以允許Tomcat訪問資源:
sudo chcon -R -t tomcat_sys_content_t /opt/tomcat # 修改Tomcat目錄上下文
sudo semanage fcontext -a -t tomcat_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),并根據需求限制IP范圍:
sudo firewall-cmd --permanent --zone=public --add-port=8080/tcp # CentOS系統
sudo firewall-cmd --reload
或使用ufw(Ubuntu):
sudo ufw allow 8080/tcp
sudo ufw reload
7. 安全加固措施
/opt/tomcat/conf/tomcat-users.xml,刪除測試賬號(如tomcat、manager),僅保留必要角色(如admin-gui、manager-gui)。server.xml配置RemoteAddrValve,僅允許可信IP訪問管理接口:<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192\.168\.1\.\d+" />