1. 创建专用Tomcat用户和用户组
为避免以root权限运行Tomcat(降低安全风险),需创建专用用户及用户组。常用命令如下:
sudo groupadd tomcat # 创建tomcat用户组
sudo useradd -M -s /sbin/nologin -g tomcat -d /opt/tomcat tomcat # 创建用户(无登录权限,指定家目录)
其中,-M
表示不创建家目录,-s /sbin/nologin
禁止用户登录系统,-d
指定家目录为Tomcat安装路径。
2. 更改Tomcat目录所有权
将Tomcat安装目录(如/opt/tomcat
)的所有者和用户组设置为tomcat
,确保Tomcat进程有权访问:
sudo chown -R tomcat:tomcat /opt/tomcat # -R表示递归修改所有子目录和文件
3. 设置目录权限
为目录分配合理权限,兼顾访问需求与安全性:
755
(所有者可读/写/执行,组和其他用户可读/执行),适用于bin
、conf
、webapps
等目录;644
(所有者可读/写,组和其他用户可读),适用于*.xml
、*.properties
等配置文件。sudo find /opt/tomcat -type d -exec chmod 755 {} \; # 递归设置目录权限
sudo find /opt/tomcat -type f -exec chmod 644 {} \; # 递归设置文件权限
此外,需为启动脚本添加执行权限:
sudo chmod +x /opt/tomcat/bin/*.sh # 允许执行startup.sh、shutdown.sh等脚本
4. 配置Tomcat服务以专用用户运行
通过修改Systemd服务文件,确保Tomcat启动时使用tomcat
用户:
编辑/etc/systemd/system/tomcat.service
(若未创建,可复制默认模板),在[Service]
部分添加:
[Service]
User=tomcat
Group=tomcat
UMask=0007 # 设置文件创建掩码(默认权限为777-0007=770)
RestartSec=10
Restart=always
然后重新加载Systemd并重启Tomcat:
sudo systemctl daemon-reload
sudo systemctl restart tomcat
5. 配置SELinux(若系统启用)
若SELinux处于enforcing
模式(sestatus
命令验证),需调整策略允许Tomcat访问资源:
httpd_sys_content_t
(静态内容),日志目录标记为httpd_sys_rw_content_t
(可读写):sudo chcon -R -t httpd_sys_content_t /opt/tomcat # 静态内容上下文
sudo chcon -R -t httpd_sys_rw_content_t /opt/tomcat/logs # 日志目录可写
/etc/selinux/config
,将SELINUX=enforcing
改为SELINUX=permissive
(临时允许),重启系统后再改回enforcing
;或使用semanage
命令永久添加上下文:sudo semanage fcontext -a -t httpd_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),若使用其他端口需相应调整:
sudo firewall-cmd --permanent --zone=public --add-port=8080/tcp # 永久添加端口规则
sudo firewall-cmd --reload # 重新加载防火墙配置
7. 删除默认应用(可选但推荐)
首次安装后,删除webapps
目录下的默认应用(如ROOT
、examples
),防止恶意代码部署:
sudo rm -rf /opt/tomcat/webapps/*
8. 隐藏Tomcat版本信息(可选)
修改server.xml
中的Connector
标签,添加server
属性,隐藏Tomcat版本:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
server="MyAppServer/1.0" />
9. 关闭自动部署(可选但推荐)
在server.xml
的Context
标签中,设置autoDeploy="false"
和unpackWARs="false"
,防止恶意WAR文件自动部署:
<Context docBase="/opt/tomcat/webapps/yourapp"
unpackWARs="false"
autoDeploy="false" />