1. 创建专用Tomcat用户与用户组
为避免以root权限运行Tomcat带来的安全风险,需创建专用用户及用户组。推荐使用-M(不创建家目录)、-s /sbin/nologin(禁止登录)参数限制用户权限:
sudo groupadd tomcat
sudo useradd -M -s /sbin/nologin -g tomcat tomcat
2. 调整Tomcat目录所有权与权限
将Tomcat安装目录(如/opt/tomcat)的所有者设为tomcat用户及用户组,权限设为755(所有者可读/写/执行,其他用户仅可读/执行),防止未授权修改:
sudo chown -R tomcat:tomcat /opt/tomcat
sudo chmod -R 755 /opt/tomcat
3. 配置Systemd服务以指定运行用户
编辑Tomcat的Systemd服务文件(通常位于/etc/systemd/system/tomcat.service),在[Service]部分明确User和Group为tomcat,并设置UMask=0007(限制新创建文件权限为770,防止其他用户访问):
[Service]
User=tomcat
Group=tomcat
UMask=0007
Restart=always
ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh
修改后需重载Systemd配置并重启服务:
sudo systemctl daemon-reload
sudo systemctl restart tomcat
4. 配置SELinux(若系统启用)
若SELinux处于Enforcing模式(sestatus命令验证),需调整策略允许Tomcat访问资源:
sudo setsebool -P tomcat_execmem 1
sudo chcon -R -t httpd_sys_content_t /opt/tomcat # 允许读取静态内容
sudo chcon -R -t httpd_sys_rw_content_t /opt/tomcat/logs # 允许写入日志
5. 管理Tomcat用户与角色
编辑conf/tomcat-users.xml文件,添加角色(如manager-gui、admin-gui)及对应用户,控制对管理界面的访问:
<tomcat-users>
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="admin" password="strong_password" roles="manager-gui,admin-gui"/>
</tomcat-users>
修改后需重启Tomcat使配置生效。
6. 限制网络访问
使用firewalld限制Tomcat端口(默认8080)的访问,仅允许可信IP或网络段访问:
sudo firewall-cmd --permanent --zone=public --add-port=8080/tcp
sudo firewall-cmd --reload
若需更严格的访问控制,可通过context.xml添加IP过滤(如仅允许本地访问管理界面):
<Context>
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.0\.0\.1|10\.0\.0\.0/8"/>
</Context>
7. 解决资源限制问题
编辑/etc/security/limits.d/90-nproc.conf文件,增加Tomcat用户的进程数和文件描述符限制,避免因资源不足导致服务崩溃:
tomcat soft nproc 4096
tomcat hard nproc 8192
tomcat soft nofile 4096
tomcat hard nofile 16384
修改后可通过ulimit -a命令验证设置是否生效。