1. 創建專用Tomcat用戶與用戶組
為避免以root權限運行Tomcat帶來的安全風險,需創建專用非特權用戶及用戶組。推薦使用以下命令:
sudo groupadd tomcat # 創建tomcat用戶組
sudo useradd -M -s /sbin/nologin -g tomcat -d /opt/tomcat tomcat # 創建用戶(無登錄shell、指定主目錄)
其中,-M
表示不創建家目錄,-s /sbin/nologin
禁止用戶登錄系統,僅允許其作為服務運行。
2. 調整Tomcat目錄所有權與權限
將Tomcat安裝目錄(如/opt/tomcat
)的所有權賦予tomcat
用戶及用戶組,并設置合理權限:
sudo chown -R tomcat:tomcat /opt/tomcat # 遞歸修改所有權
sudo find /opt/tomcat -type f -exec chmod 644 {} \; # 文件設為644(所有者可讀寫,組及其他只讀)
sudo find /opt/tomcat -type d -exec chmod 755 {} \; # 目錄設為755(所有者可讀寫執行,組及其他可讀執行)
特殊目錄權限優化:
logs
)需允許Tomcat寫入,建議單獨設置:sudo chmod -R 775 /opt/tomcat/logs # 或通過SELinux上下文(見下文)配置
webapps
)若需外部上傳應用,可設為755,但需避免敏感文件暴露。3. 配置Tomcat以專用用戶運行
通過Systemd服務文件確保Tomcat以tomcat
用戶身份啟動,避免權限提升:
編輯/etc/systemd/system/tomcat.service
(若未創建,可從/lib/systemd/system/tomcat.service
復制),在[Service]
部分添加:
[Service]
User=tomcat
Group=tomcat
UMask=0007 # 設置文件創建掩碼(新文件權限為644-022=622,但需結合目錄權限)
RestartSec=10
Restart=always
保存后執行以下命令使配置生效:
sudo systemctl daemon-reload
sudo systemctl restart tomcat
驗證服務狀態:
sudo systemctl status tomcat # 確認運行用戶為tomcat
4. 配置SELinux(若系統啟用)
若sestatus
命令顯示SELinux為enabled
,需調整策略以允許Tomcat訪問資源:
# 允許Tomcat執行內存操作(如JSP編譯)
sudo setsebool -P tomcat_execmem 1
# 設置Tomcat目錄的SELinux上下文
sudo chcon -R -t httpd_sys_content_t /opt/tomcat # 靜態內容
sudo chcon -R -t httpd_sys_rw_content_t /opt/tomcat/logs # 日志需讀寫權限
持久化上下文:若需重啟后保留上下文,無需額外操作(chcon
已自動保存)。
5. 限制網絡與管理界面訪問
sudo firewall-cmd --permanent --zone=public --add-port=8080/tcp # 開放8080端口
sudo firewall-cmd --reload # 重載防火墻規則
tomcat-users.xml
(/opt/tomcat/conf/
),配置管理員角色與用戶:<tomcat-users>
<role rolename="manager-gui"/> <!-- 管理界面訪問 -->
<role rolename="admin-gui"/>
<user username="admin" password="強密碼" roles="manager-gui,admin-gui"/>
</tomcat-users>
context.xml
(/opt/tomcat/webapps/manager/META-INF/
),添加:<Context>
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.0\.0\.1|192\.168\.1\.\d+" />
</Context>
僅允許本地(127.0.0.1)或指定IP(如192.168.1.x)訪問管理界面。6. 解決資源限制問題
若Tomcat因進程數或文件描述符限制無法啟動,需調整系統資源限制:
編輯/etc/security/limits.d/90-nproc.conf
(或新建),添加:
* soft nproc 4096 # 普通用戶最大進程數(軟限制)
* hard nproc 8192 # 普通用戶最大進程數(硬限制)
tomcat soft nproc 8192 # tomcat用戶單獨設置(更高限制)
tomcat hard nproc 16384
編輯/etc/security/limits.conf
,添加:
tomcat soft nofile 4096 # 文件描述符軟限制
tomcat hard nofile 16384 # 文件描述符硬限制
驗證設置:
su - tomcat
ulimit -a # 查看當前限制
注意事項
777
(完全開放),否則可能導致惡意代碼執行。/opt/tomcat/logs/catalina.out
),排查權限相關錯誤。server.xml
中設置autoDeploy="false"
),防止惡意WAR文件上傳。