为避免以root身份运行Tomcat带来的安全风险,需创建专用用户和用户组。推荐使用以下命令:
sudo groupadd tomcat # 创建tomcat用户组
sudo useradd -M -s /sbin/nologin -g tomcat -d /opt/tomcat tomcat # 创建tomcat用户(无登录权限,主目录设为Tomcat安装路径)
-M:不创建用户主目录(若已指定-d则可省略);-s /sbin/nologin:禁止用户通过shell登录系统;-g tomcat:将用户加入tomcat组。将Tomcat安装目录(如/opt/tomcat)的所有权赋予tomcat用户和组,并设置合理权限:
sudo chown -R tomcat:tomcat /opt/tomcat # 递归修改所有权
sudo chmod -R 755 /opt/tomcat # 设置目录权限(所有者可读/写/执行,组和其他用户可读/执行)
logs、temp、work等目录需保留写入权限(可单独执行sudo chmod -R 775 /opt/tomcat/logs)。若sestatus显示SELinux status: enabled,需调整SELinux策略:
sudo setsebool -P tomcat_execmem 1 # 允许Tomcat执行内存操作(解决内存不足问题)
sudo chcon -R -t httpd_sys_content_t /opt/tomcat # 设置目录为HTTP内容类型
sudo chcon -R -t httpd_sys_rw_content_t /opt/tomcat/logs # 设置日志目录为可读写
/etc/selinux/config,将SELINUX=enforcing改为SELINUX=permissive,重启后改回enforcing。编辑Tomcat的Systemd服务文件(/etc/systemd/system/tomcat.service),确保以下内容:
[Service]
User=tomcat
Group=tomcat
UMask=0007 # 设置文件创建掩码(所有者可读/写/执行,组和其他用户无权限)
RestartSec=10
Restart=always
ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh
UMask=0007确保Tomcat创建的文件仅所有者可访问,提升安全性。sudo systemctl daemon-reload
sudo systemctl start tomcat
sudo systemctl enable tomcat # 设置开机自启
编辑/opt/tomcat/conf/tomcat-users.xml,添加用户及角色(示例):
<tomcat-users>
<!-- 管理员角色(可访问管理界面) -->
<role rolename="admin-gui"/>
<role rolename="manager-gui"/>
<!-- 自定义用户(赋予管理员权限) -->
<user username="admin" password="StrongPassword123!" roles="admin-gui,manager-gui"/>
</tomcat-users>
admin-gui:允许访问Tomcat管理界面(如/manager/html);manager-gui:允许通过Web界面管理应用(如部署/卸载)。若系统启用firewalld,需开放Tomcat默认端口(8080):
sudo firewall-cmd --permanent --zone=public --add-port=8080/tcp # 永久添加端口
sudo firewall-cmd --reload # 重新加载防火墙规则
8080替换为目标端口。编辑/etc/security/limits.d/90-nproc.conf,增加Tomcat用户的进程和文件描述符限制:
tomcat_user soft nproc 4096 # 软限制:最多4096个进程
tomcat_user hard nproc 8192 # 硬限制:最多8192个进程
tomcat_user soft nofile 4096 # 软限制:最多4096个打开文件
tomcat_user hard nofile 16384 # 硬限制:最多16384个打开文件
执行ulimit -a验证设置是否生效。
tomcat:tomcat,权限是否为755;/var/log/audit/audit.log中的SELinux拒绝日志,使用audit2allow生成修复规则;tomcat-users.xml中的角色和用户配置正确,且防火墙允许端口访问。