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用户/组,确保其拥有读写执行权限,其他用户仅能读取:
# 自定义路径(如手动解压的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>