1. 创建专用Tomcat用户与用户组
为避免以root权限运行Tomcat带来的安全风险,需创建专用非特权用户及用户组。推荐使用以下命令:
sudo groupadd tomcat # 创建tomcat用户组
sudo useradd -M -s /sbin/nologin -g tomcat -d /opt/tomcat tomcat # 创建用户(无登录shell、指定主目录)
其中,-M表示不创建家目录,-s /sbin/nologin禁止用户登录系统,仅允许其作为服务运行。
2. 调整Tomcat目录所有权与权限
将Tomcat安装目录(如/opt/tomcat)的所有权赋予tomcat用户及用户组,并设置合理权限:
sudo chown -R tomcat:tomcat /opt/tomcat # 递归修改所有权
sudo find /opt/tomcat -type f -exec chmod 644 {} \; # 文件设为644(所有者可读写,组及其他只读)
sudo find /opt/tomcat -type d -exec chmod 755 {} \; # 目录设为755(所有者可读写执行,组及其他可读执行)
特殊目录权限优化:
logs)需允许Tomcat写入,建议单独设置:sudo chmod -R 775 /opt/tomcat/logs # 或通过SELinux上下文(见下文)配置
webapps)若需外部上传应用,可设为755,但需避免敏感文件暴露。3. 配置Tomcat以专用用户运行
通过Systemd服务文件确保Tomcat以tomcat用户身份启动,避免权限提升:
编辑/etc/systemd/system/tomcat.service(若未创建,可从/lib/systemd/system/tomcat.service复制),在[Service]部分添加:
[Service]
User=tomcat
Group=tomcat
UMask=0007 # 设置文件创建掩码(新文件权限为644-022=622,但需结合目录权限)
RestartSec=10
Restart=always
保存后执行以下命令使配置生效:
sudo systemctl daemon-reload
sudo systemctl restart tomcat
验证服务状态:
sudo systemctl status tomcat # 确认运行用户为tomcat
4. 配置SELinux(若系统启用)
若sestatus命令显示SELinux为enabled,需调整策略以允许Tomcat访问资源:
# 允许Tomcat执行内存操作(如JSP编译)
sudo setsebool -P tomcat_execmem 1
# 设置Tomcat目录的SELinux上下文
sudo chcon -R -t httpd_sys_content_t /opt/tomcat # 静态内容
sudo chcon -R -t httpd_sys_rw_content_t /opt/tomcat/logs # 日志需读写权限
持久化上下文:若需重启后保留上下文,无需额外操作(chcon已自动保存)。
5. 限制网络与管理界面访问
sudo firewall-cmd --permanent --zone=public --add-port=8080/tcp # 开放8080端口
sudo firewall-cmd --reload # 重载防火墙规则
tomcat-users.xml(/opt/tomcat/conf/),配置管理员角色与用户:<tomcat-users>
<role rolename="manager-gui"/> <!-- 管理界面访问 -->
<role rolename="admin-gui"/>
<user username="admin" password="强密码" roles="manager-gui,admin-gui"/>
</tomcat-users>
context.xml(/opt/tomcat/webapps/manager/META-INF/),添加:<Context>
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.0\.0\.1|192\.168\.1\.\d+" />
</Context>
仅允许本地(127.0.0.1)或指定IP(如192.168.1.x)访问管理界面。6. 解决资源限制问题
若Tomcat因进程数或文件描述符限制无法启动,需调整系统资源限制:
编辑/etc/security/limits.d/90-nproc.conf(或新建),添加:
* soft nproc 4096 # 普通用户最大进程数(软限制)
* hard nproc 8192 # 普通用户最大进程数(硬限制)
tomcat soft nproc 8192 # tomcat用户单独设置(更高限制)
tomcat hard nproc 16384
编辑/etc/security/limits.conf,添加:
tomcat soft nofile 4096 # 文件描述符软限制
tomcat hard nofile 16384 # 文件描述符硬限制
验证设置:
su - tomcat
ulimit -a # 查看当前限制
注意事项
777(完全开放),否则可能导致恶意代码执行。/opt/tomcat/logs/catalina.out),排查权限相关错误。server.xml中设置autoDeploy="false"),防止恶意WAR文件上传。