1. 创建专用Tomcat用户和用户组
为隔离Tomcat进程权限,避免以root用户运行,需创建专用用户和用户组。常用命令如下:
sudo groupadd tomcat # 创建tomcat用户组
sudo useradd -r -d /opt/tomcat -s /sbin/nologin -g tomcat tomcat # 创建系统用户(无登录权限),归属tomcat组
其中,-r表示系统用户,-s /sbin/nologin禁止用户登录,-d指定用户主目录为Tomcat安装路径,-g设置所属组。
2. 设置Tomcat安装目录所有权
将Tomcat安装目录(如/opt/tomcat)的所有者和组设为tomcat,确保进程有权访问:
sudo chown -R tomcat:tomcat /opt/tomcat # 递归修改所有者为tomcat用户和组
若安装目录为其他路径(如/usr/local/tomcat),需替换为实际路径。
3. 配置目录权限(按需分配)
根据目录功能分配不同权限,平衡安全性与功能性:
bin(启动脚本)、conf(配置文件)、lib(库文件)、webapps(应用目录)等不需要写的目录:sudo chmod -R 755 /opt/tomcat/bin /opt/tomcat/conf /opt/tomcat/lib /opt/tomcat/webapps
logs记录日志、work临时文件、temp缓存):sudo chmod -R 775 /opt/tomcat/logs /opt/tomcat/work /opt/tomcat/temp
conf目录下的配置文件(如server.xml、web.xml)需严格限制为只读,防止篡改:sudo chmod -R 644 /opt/tomcat/conf/*
若需组内用户修改配置,可调整为664,但需谨慎。4. 配置Tomcat服务以专用用户运行
通过Systemd服务文件确保Tomcat启动时使用tomcat用户:
/etc/systemd/system/tomcat.service),添加以下内容:[Unit]
Description=Apache Tomcat Web Application Container
After=network.target
[Service]
Type=forking
Environment="JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64" # 替换为实际JAVA_HOME
Environment="CATALINA_PID=/opt/tomcat/temp/tomcat.pid"
Environment="CATALINA_HOME=/opt/tomcat"
Environment="CATALINA_BASE=/opt/tomcat"
ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh
User=tomcat
Group=tomcat
UMask=0007 # 设置文件创建权限掩码(用户可读写执行,组可读执行,其他无权限)
RestartSec=10
Restart=always
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable tomcat # 设置开机自启
sudo systemctl start tomcat # 启动服务
使用sudo systemctl status tomcat检查服务状态。5. 验证权限配置
ps -ef | grep tomcat
输出应显示进程所有者为tomcat。tomcat用户,尝试访问关键目录(如logs写入、conf读取):sudo -u tomcat touch /opt/tomcat/logs/test.log # 应成功
sudo -u tomcat cat /opt/tomcat/conf/server.xml # 应成功
/opt/tomcat/logs/catalina.out日志,定位权限问题。6. 可选:安全加固配置
conf/tomcat-users.xml,仅允许特定IP访问管理页面(如manager应用):<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192\.168\.1\.\d+" />
conf/server.xml中的Connector标签,添加server属性:<Connector port="8080" protocol="HTTP/1.1" server="CustomServer/1.0" ... />
conf/context.xml中设置autoDeploy="false",防止恶意WAR文件自动部署。