在 Debian 上部署 Apache Tomcat 时,安全配置非常关键。下面从 系统层面、Tomcat 层面、网络层面 三个维度,给你一套生产环境可用的安全加固方案(适用于 Debian 10/11/12,Tomcat 9/10)。
不要使用 root 运行 Tomcat
sudo useradd -r -m -U -d /opt/tomcat -s /bin/false tomcat
解压 Tomcat 到 /opt/tomcat,并授权:
sudo chown -R tomcat:tomcat /opt/tomcat
sudo chmod -R 750 /opt/tomcat
sudo chown root:tomcat /opt/tomcat/conf
sudo chmod 640 /opt/tomcat/conf/*
确保:
conf/、bin/ 只能被 tomcat 或 root 读取webapps/ 不能有无关目录rm -rf /opt/tomcat/webapps/{docs,examples,host-manager,manager,ROOT}
如果必须用 Manager:
conf/server.xml(重点)<!-- 注释或删除 -->
<!-- <Connector protocol="AJP/1.3" port="8009" /> -->
conf/web.xml
<servlet>
<servlet-name>default</servlet-name>
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
</servlet>
<Connector port="8081" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8444" />
conf/tomcat-users.xml✅ 最小权限原则
错误示例(❌不要这样):
<user username="admin" password="123456" roles="manager-gui,admin-gui"/>
正确示例(✅):
<role rolename="manager-gui"/>
<user username="ops" password="StrongPass#2025" roles="manager-gui"/>
⚠️ 强烈建议:
admin-guiTomcat 不直接暴露公网
server {
listen 443 ssl;
server_name app.example.com;
ssl_certificate /etc/letsencrypt/live/app.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/app.example.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
server.xml
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150"
SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateFile="conf/cert.pem"
certificateKeyFile="conf/key.pem"/>
</SSLHostConfig>
</Connector>
conf/Catalina/localhost/manager.xml
<Context antiResourceLocking="false">
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.0\.0\.1|192\.168\.1\.\d+" />
</Context>
server.xml
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs"
prefix="localhost_access_log"
suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
conf/web.xml
<security-constraint>
<web-resource-collection>
<web-resource-name>Disable TRACE</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<auth-constraint />
</security-constraint>
cd /opt/tomcat/lib
jar xf catalina.jar org/apache/catalina/util/ServerInfo.properties
编辑:
server.info=Apache Tomcat
server.number=
server.built=
重新打包并重启。
/etc/systemd/system/tomcat.service
[Service]
User=tomcat
Group=tomcat
PrivateTmp=true
NoNewPrivileges=true
LimitNOFILE=65536
sudo systemctl daemon-reload
sudo systemctl restart tomcat
sudo apt install unattended-upgrades
sudo dpkg-reconfigure --priority=low unattended-upgrades
| 项目 | 是否完成 |
|---|---|
| 非 root 用户运行 | ✅ |
| 删除默认应用 | ✅ |
| 禁用 AJP | ✅ |
| 禁用目录遍历 | ✅ |
| 强密码 | ✅ |
| HTTPS | ✅ |
| 限制 Manager IP | ✅ |
| 隐藏版本 | ✅ |
如果你愿意,我可以:
你可以直接贴你的 server.xml 或说明使用场景(内网 / 公网 / 是否使用 Nginx)。