1. 創建專用Tomcat用戶與組
避免使用root用戶運行Tomcat,降低安全風險。執行以下命令創建系統用戶(-s /bin/false禁用登錄shell)和同名的組:
sudo groupadd tomcat
sudo useradd -s /bin/false -g tomcat -d /opt/tomcat tomcat
若使用Debian自帶Tomcat包(如tomcat9),用戶/組可能已預創建,可通過id tomcat驗證。
2. 配置Tomcat目錄權限
將Tomcat安裝目錄(如/opt/tomcat或/var/lib/tomcat9)的所有權轉移至tomcat用戶/組,確保其擁有讀寫執行權限,其他用戶僅能讀?。?/p>
# 自定義路徑(如手動解壓的Tomcat)
sudo chown -R tomcat:tomcat /opt/tomcat
sudo chmod -R 755 /opt/tomcat/bin/*.sh # 僅允許所有者執行腳本
sudo chmod -R 750 /opt/tomcat/webapps # 限制webapps目錄訪問
# Debian自帶路徑(如apt安裝的tomcat9)
sudo chown -R tomcat:tomcat /var/lib/tomcat9 /var/log/tomcat9 /etc/tomcat9
chmod 750限制目錄僅所有者(tomcat)和同組用戶可訪問,755允許其他用戶讀取但不修改。
3. 配置systemd服務以Tomcat用戶運行
編輯Tomcat的systemd服務文件(自定義路徑為/etc/systemd/system/tomcat.service,自帶路徑為/etc/systemd/system/tomcat9.service),明確指定User和Group:
[Unit]
Description=Apache Tomcat Web Application Container
After=network.target
[Service]
Type=forking
User=tomcat
Group=tomcat
Environment="JAVA_HOME=/usr/lib/jvm/default-java"
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
Restart=always
UMask=0007 # 設置默認umask,增強文件權限控制
[Install]
WantedBy=multi-user.target
修改后重新加載systemd并重啟Tomcat:
sudo systemctl daemon-reload
sudo systemctl restart tomcat
通過ps -ef | grep tomcat驗證進程是否以tomcat用戶運行。
4. 配置Tomcat Web管理界面權限
編輯tomcat-users.xml(路徑為/opt/tomcat/conf/tomcat-users.xml或/etc/tomcat9/tomcat-users.xml),添加角色和用戶,限制管理界面訪問:
<tomcat-users>
<!-- 管理員角色(可訪問管理界面和主機管理) -->
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<!-- 自定義角色(如僅部署應用) -->
<role rolename="deployer"/>
<!-- 用戶分配角色(替換為強密碼) -->
<user username="admin" password="SecurePassword123!" roles="manager-gui,admin-gui"/>
<user username="deployer_user" password="DeployPass456!" roles="deployer"/>
</tomcat-users>
保存后重啟Tomcat使配置生效:
sudo systemctl restart tomcat
通過http://server_ip:8080/manager/html訪問管理界面,使用配置的用戶名密碼登錄。
5. 防火墻與網絡訪問控制
使用ufw限制Tomcat端口(默認8080)的訪問,僅允許可信IP訪問:
# 允許所有IP訪問8080端口(生產環境不推薦)
sudo ufw allow 8080/tcp
# 僅允許特定IP(如192.168.1.100)訪問
sudo ufw allow from 192.168.1.100 to any port 8080/tcp
# 啟用防火墻
sudo ufw enable
通過sudo ufw status驗證規則是否生效。
6. 高級安全配置(可選)
server.xml,啟用HTTPS(端口8443),避免數據明文傳輸。server.xml中添加RemoteAddrValve,限制特定IP訪問:<Host name="localhost" appBase="webapps" unpackWARs="true">
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192\.168\.1\.\d+"/>
</Host>