1. 创建专用Tomcat用户与用户组
为隔离Tomcat进程与系统关键操作,需创建专用用户及用户组。常用命令如下:
sudo groupadd tomcat # 创建tomcat用户组
sudo useradd -M -s /sbin/nologin -g tomcat -d /opt/tomcat tomcat # 创建无登录权限的tomcat用户(家目录设为Tomcat安装路径)
-M
:不创建家目录(若已存在安装目录可省略);-s /sbin/nologin
:禁止用户通过shell登录,降低安全风险。2. 调整Tomcat目录所有权
将Tomcat安装目录(如/opt/tomcat
)的所有权赋予tomcat
用户及用户组,确保进程有权访问:
sudo chown -R tomcat:tomcat /opt/tomcat # 递归修改所有权
-R
:递归处理目录及子目录、文件。3. 设置目录与文件权限
根据目录/文件的用途分配合理权限,遵循最小权限原则:
bin
、conf
、webapps
、logs
)需允许用户进入和读取,设置为755
:sudo find /opt/tomcat -type d -exec chmod 755 {} \; # 仅所有者有写权限,其他用户可读/执行
conf/server.xml
、web.xml
)需限制为仅所有者可写,设置为644
:sudo find /opt/tomcat -type f -exec chmod 644 {} \; # 所有者可读/写,其他用户只读
webapps
目录下的应用文件可能需要更严格的权限(如750
),防止未授权访问:sudo chmod -R 750 /opt/tomcat/webapps # 仅所有者和组可访问
4. 配置Tomcat服务以专用用户运行
修改systemd服务文件(如/etc/systemd/system/tomcat.service
),指定运行用户/组及权限掩码:
[Service]
User=tomcat
Group=tomcat
UMask=0007 # 设置文件创建权限掩码(所有者可读/写/执行,组可读/执行,其他用户无权限)
RestartSec=10
Restart=always
修改后需重新加载systemd并重启Tomcat:
sudo systemctl daemon-reload
sudo systemctl restart tomcat
5. 处理SELinux限制(若启用)
若系统启用SELinux,需调整上下文以允许Tomcat访问资源:
sudo chcon -R -t tomcat_sys_content_t /opt/tomcat # 修改Tomcat目录上下文
sudo semanage fcontext -a -t tomcat_sys_content_t "/opt/tomcat(/.*)?" # 添加永久上下文规则
sudo restorecon -Rv /opt/tomcat # 恢复目录上下文
CAP_NET_BIND_SERVICE
能力:sudo setcap 'cap_net_bind_service=+ep' /opt/tomcat/bin/java
6. 防火墙配置
允许外部访问Tomcat默认端口(8080),并根据需求限制IP范围:
sudo firewall-cmd --permanent --zone=public --add-port=8080/tcp # CentOS系统
sudo firewall-cmd --reload
或使用ufw
(Ubuntu):
sudo ufw allow 8080/tcp
sudo ufw reload
7. 安全加固措施
/opt/tomcat/conf/tomcat-users.xml
,删除测试账号(如tomcat
、manager
),仅保留必要角色(如admin-gui
、manager-gui
)。server.xml
配置RemoteAddrValve
,仅允许可信IP访问管理接口:<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192\.168\.1\.\d+" />