1. 創建專用Tomcat用戶和用戶組
為隔離Tomcat進程權限,避免以root用戶運行,需創建專用用戶和用戶組。常用命令如下:
sudo groupadd tomcat # 創建tomcat用戶組
sudo useradd -r -d /opt/tomcat -s /sbin/nologin -g tomcat tomcat # 創建系統用戶(無登錄權限),歸屬tomcat組
其中,-r
表示系統用戶,-s /sbin/nologin
禁止用戶登錄,-d
指定用戶主目錄為Tomcat安裝路徑,-g
設置所屬組。
2. 設置Tomcat安裝目錄所有權
將Tomcat安裝目錄(如/opt/tomcat
)的所有者和組設為tomcat
,確保進程有權訪問:
sudo chown -R tomcat:tomcat /opt/tomcat # 遞歸修改所有者為tomcat用戶和組
若安裝目錄為其他路徑(如/usr/local/tomcat
),需替換為實際路徑。
3. 配置目錄權限(按需分配)
根據目錄功能分配不同權限,平衡安全性與功能性:
bin
(啟動腳本)、conf
(配置文件)、lib
(庫文件)、webapps
(應用目錄)等不需要寫的目錄:sudo chmod -R 755 /opt/tomcat/bin /opt/tomcat/conf /opt/tomcat/lib /opt/tomcat/webapps
logs
記錄日志、work
臨時文件、temp
緩存):sudo chmod -R 775 /opt/tomcat/logs /opt/tomcat/work /opt/tomcat/temp
conf
目錄下的配置文件(如server.xml
、web.xml
)需嚴格限制為只讀,防止篡改:sudo chmod -R 644 /opt/tomcat/conf/*
若需組內用戶修改配置,可調整為664
,但需謹慎。4. 配置Tomcat服務以專用用戶運行
通過Systemd服務文件確保Tomcat啟動時使用tomcat
用戶:
/etc/systemd/system/tomcat.service
),添加以下內容:[Unit]
Description=Apache Tomcat Web Application Container
After=network.target
[Service]
Type=forking
Environment="JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64" # 替換為實際JAVA_HOME
Environment="CATALINA_PID=/opt/tomcat/temp/tomcat.pid"
Environment="CATALINA_HOME=/opt/tomcat"
Environment="CATALINA_BASE=/opt/tomcat"
ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh
User=tomcat
Group=tomcat
UMask=0007 # 設置文件創建權限掩碼(用戶可讀寫執行,組可讀執行,其他無權限)
RestartSec=10
Restart=always
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable tomcat # 設置開機自啟
sudo systemctl start tomcat # 啟動服務
使用sudo systemctl status tomcat
檢查服務狀態。5. 驗證權限配置
ps -ef | grep tomcat
輸出應顯示進程所有者為tomcat
。tomcat
用戶,嘗試訪問關鍵目錄(如logs
寫入、conf
讀?。?pre class="hljs">sudo -u tomcat touch /opt/tomcat/logs/test.log # 應成功
sudo -u tomcat cat /opt/tomcat/conf/server.xml # 應成功
/opt/tomcat/logs/catalina.out
日志,定位權限問題。6. 可選:安全加固配置
conf/tomcat-users.xml
,僅允許特定IP訪問管理頁面(如manager
應用):<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192\.168\.1\.\d+" />
conf/server.xml
中的Connector
標簽,添加server
屬性:<Connector port="8080" protocol="HTTP/1.1" server="CustomServer/1.0" ... />
conf/context.xml
中設置autoDeploy="false"
,防止惡意WAR文件自動部署。