Tomcat在Linux下的权限管理指南
为遵循最小权限原则,避免以root用户运行Tomcat(降低被攻击后的系统风险),需创建专用的Tomcat用户和用户组。
# 创建tomcat用户组
sudo groupadd tomcat
# 创建tomcat用户(-M不创建家目录,-s指定无登录shell,-g关联用户组,-d指定家目录)
sudo useradd -M -s /sbin/nologin -g tomcat -d /opt/tomcat tomcat
注:家目录通常设置为Tomcat安装路径(如
/opt/tomcat
),/sbin/nologin
防止用户通过SSH或控制台登录系统。
将Tomcat安装目录(如/opt/tomcat
)的所有权转移至tomcat
用户和用户组,确保Tomcat进程有权访问自身文件。
sudo chown -R tomcat:tomcat /opt/tomcat
注:
-R
参数递归修改目录及其子目录、文件的所有权。
根据文件类型分配合理权限,平衡安全性与功能性:
755
(所有者可读/写/执行,组和其他用户可读/执行),允许Tomcat进程遍历目录结构。sudo find /opt/tomcat -type d -exec chmod 755 {} \;
644
(所有者可读/写,组和其他用户可读),防止未经授权的文件修改。sudo find /opt/tomcat -type f -exec chmod 644 {} \;
webapps
、logs
、temp
、work
等目录需保留写权限(775
),供Tomcat部署应用和生成临时文件。sudo chmod -R 775 /opt/tomcat/webapps /opt/tomcat/logs /opt/tomcat/temp /opt/tomcat/work
注:避免将目录权限设为
777
(完全开放),否则可能导致恶意文件上传或篡改。
修改Tomcat的Systemd服务文件(/etc/systemd/system/tomcat.service
),指定运行用户和组,并设置权限掩码(UMask
)控制新创建文件的默认权限。
[Unit]
Description=Apache Tomcat Web Application Container
After=network.target
[Service]
Type=forking
Environment=JAVA_HOME=/usr/lib/jvm/java-11-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
User=tomcat
Group=tomcat
UMask=0007 # 新创建文件权限为660(所有者可读/写,组可读),目录为770
RestartSec=10
Restart=always
[Install]
WantedBy=multi-user.target
修改后需重新加载Systemd配置并重启Tomcat:
sudo systemctl daemon-reload
sudo systemctl restart tomcat
注:
UMask
值需与目录/文件权限配合(如UMask=0007
对应目录770
、文件660
)。
若系统启用SELinux(默认开启),需调整Tomcat目录的安全上下文,允许tomcat
用户访问。
# 临时设置上下文(重启后失效)
sudo chcon -R -t tomcat_sys_content_t /opt/tomcat
# 永久设置上下文
sudo semanage fcontext -a -t tomcat_sys_content_t "/opt/tomcat(/.*)?"
# 恢复默认上下文
sudo restorecon -Rv /opt/tomcat
注:若需Tomcat绑定80/443等低端口(需root权限),可通过
setcap
命令添加能力:
sudo setcap 'cap_net_bind_service=+ep' /opt/tomcat/bin/java
ls -ld /opt/tomcat
# 输出应包含 "tomcat tomcat"
sudo systemctl restart tomcat
sudo journalctl -u tomcat -f # 实时查看日志
tomcat
用户身份尝试访问Tomcat目录,验证权限。sudo -u tomcat ls /opt/tomcat
server.xml
中的<Context>
标签,设置autoDeploy="false"
,防止恶意WAR文件自动部署。webapps
目录下的ROOT
、docs
、examples
等默认应用,减少攻击面。sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="8080" accept'
sudo firewall-cmd --reload