在 Debian 上部署 Tomcat 时,权限设置的核心目标是:既保证 Tomcat 能正常读写所需目录,又避免以 root 身份运行带来的安全风险。下面按常见场景系统说明。
不要用 root 运行 Tomcat:
sudo useradd -r -m -d /opt/tomcat -s /bin/false tomcat
-r:系统用户-s /bin/false:禁止登录/opt/tomcat:Tomcat 安装目录(示例)假设 Tomcat 安装在 /opt/tomcat:
sudo chown -R tomcat:tomcat /opt/tomcat
关键目录权限建议:
# 可执行文件
sudo chmod 755 /opt/tomcat/bin/*.sh
# 日志目录(Tomcat 需要写)
sudo chmod 755 /opt/tomcat/logs
# webapps(部署应用)
sudo chmod 755 /opt/tomcat/webapps
创建或编辑:
sudo nano /etc/systemd/system/tomcat.service
示例:
[Unit]
Description=Tomcat Server
After=network.target
[Service]
Type=forking
User=tomcat
Group=tomcat
Environment=JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
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
[Install]
WantedBy=multi-user.target
重载并启动:
sudo systemctl daemon-reexec
sudo systemctl enable --now tomcat
编辑:
/opt/tomcat/conf/tomcat-users.xml
示例:
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="admin" password="强密码" roles="manager-gui,admin-gui"/>
⚠️ 不要对外开放 manager 应用,或限制 IP:
nano /opt/tomcat/webapps/manager/META-INF/context.xml
限制来源 IP:
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1" />
如果你的 Web 应用需要写文件:
/opt/tomcat/uploads 等子目录/opt/tomcat/webapps 内部sudo mkdir /opt/tomcat/uploads
sudo chown -R tomcat:tomcat /opt/tomcat/uploads
sudo ufw allow 8080
如用 80 端口,建议用 Nginx 反向代理,而不是 Tomcat 直接绑定 80。
| 问题 | 原因 |
|---|---|
| Permission denied | Tomcat 用户对目录无写权限 |
| 无法启动 | startup.sh 无执行权限 |
| 日志为空 | logs 目录归属错误 |
| 安全风险 | 用 root 运行 Tomcat |
查看权限问题:
namei -l /opt/tomcat/bin/startup.sh
如果你愿意,可以告诉我:
我可以给你精确适配的权限方案。