如何精准设置Ubuntu Tomcat访问权限,确保网站安全不受侵犯?

更新于
2026-10-01 22:56:58
13阅读来源:SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

一、 主要痛点直击:为什么你的Tomcat总是“裸奔”?

⚠️ 常见使用者痛点

  • 启动脚本报错: startup.sh 提示“Permission denied”,不知是用 chmod +x 还是 sh startup.sh更不知为何要禁止 root 启动。
  • 管理后台弱口令/暴露: 默认安装后 manager-gui、host-manager 对公网。甚至使用 tomcat/tomcat 弱口令,成僵尸网络跳板。
  • 目录权限混乱: 日志、work、temp 目录属主不一致,导致启动失败或被恶意写入 WebShell。
  • AJP/示例应用成漏洞入口: Ghostcat 、CVE-2025-24813 等高危漏洞多源于未禁用的 AJP 连接器或默认示例应用。
  • 版本信息泄露: 错误页直接暴露 Tomcat/JDK 版本,助力攻击者精准投放 Exp。

二、 基石加固:操作程序与运行身份隔离

1. 拒绝 Root。创建专用无登录程序使用者

痛点解决: Root 跑 Tomcat 一旦被注入命令执行,服务器直接沦陷。必须降权运行,

# 推荐方式:创建程序使用者,无家目录。
禁止登录 Shell
sudo useradd -r -M -s /usr/sbin/nologin tomcat
# 或指定家目录便于管理
# sudo useradd -m -U -d /opt/tomcat -s /bin/false tomcat

2. Systemd 托管服务:落地降权配置

创建 /etc/systemd/system/tomcat.service显式锁定身份与环境:

如何精准设置Ubuntu Tomcat访问权限,确保网站安全不受侵犯?

Description=Apache Tomcat Web Application Container
After=network.target
Type=forking
User=tomcat
Group=tomcat
UMask=0007
Environment="JA_HOME=/usr/lib/jvm/java-17-openjdk-amd64"
Environment="CATALINA_HOME=/opt/tomcat"
Environment="CATALINA_BASE=/opt/tomcat"
Environment="CATALINA_PID=/opt/tomcat/temp/tomcat.pid"
Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseG1GC"
ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh
# 安全加固参数
PrivateTmp=true
ProtectSystem=full
NoNewPrivileges=true
RestrictSUIDSGID=true
WantedBy=multi-user.target

执行生效:sudo systemctl daemon-reload && sudo systemctl enable --now tomcat

3. JDK 源头可信与校验

💡 常用方法痛点提示

Apt 源默认 OpenJDK/Tomcat 版本往往滞后。老实说,

# 下载并校验
wget https://downloads.apache.org/tomcat/tomcat-10/v10.1.30/bin/apache-tomcat-10.1.30.tar.gz
wget https://downloads.apache.org/tomcat/tomcat-10/v10.1.30/bin/apache-tomnet-10.1.30.tar.gz.sha512
sha512sum -c apache-tomnet-*.sha512 # 必须输出 OK
sudo tar xzf apache-tomnet-*.tar.gz -C /opt/
sudo mv /opt/apache-tomnet-* /opt/tomnet
sudo chown -R tomnet:tomnet /opt/tomnet
sudo chmod +x /opt/tomnet/bin/*.sh # ⚠️ 必做!解决 startup.sh 無執行權限痛點

三、 深度防御:文件程序目录权限精细化控制

>>>> 代码所有者只读;运行时写入目录仅赋予组写权限;配置文件组读,脚本可执行。

tet/webapps<'tr'/table>'

'注webapps生产建议只读部署由CI/CD覆盖关闭autoDeploy后无需写权限/p>'' # 基础归属 sudo chown R tomat:/ot/met # conf 敏感配置仅组读 sudo chmod R g+r o-rwx /ot/met/cnf sudo chmod g+x /ot/met/cnf # conf目录需x权限才能遍历其中文件 # bin 脚本可执行 sudo chmod g+x o-rwx /ot/met/bn/.sh # 日志/工作/临时目录赋予组写 umask 在 systemd UMask= 或 catalina.sh 中设为即生成文件默认 若目录已存在手动修正: sudo mkdir p ot/met/{logsworktemp} sudo chmod R g+w ot/met/{logsworktemp} sudo chmod R o-rwx ot/met/{logsworktemp} # webapps 生产环境建议只读 防止热部署植入WebShell 若需CI/CD部署请通过systemctl reload或rsync+chown流程控制而非开放写权限 sudo chmod R u-wg-wo-w ot/met/webapps # 去除所有写位强制只读 ' 五/> Host name=\"localhost\" appBase=\"webapps\" unpackWARs=\"false\" autoDeploy=\"false\" deployOnStartup=\"false\"> Valve className=\"org.apache.catalina.valves.ErrorReportValve\" showServerInfo=\"false\" showReport=\"false\"/> Host '/od/p>''


五/> Valve className=\"org.apache.catalina.valves.ErrorReportValve\" showServerInfo=\"false\" showReport=\"false\"/> Host '/od/p>''
五/> web-app ... filter filter-nameHttpHeaderSecurityFilter/filter-name filter-classorg.apache.catalina.filters.HttpHeaderSecurityFilter/filter-class init-paramparam-name/hstsEnabled/init-paramparam-value>true/init-paramvalue param-name/hstsMaxAgeSeconds/init-paramparam-value/init-paramvalue init-paramparam-name/contentTypeOptionsEnabled/init-paramparam-value>true/init-paramvalue init-paramparam-name/xssProtectionEnabled/init-paramparam-value>true/init-paramvalue init-paramparam-name/cacheControlPatternValue/init-parampattern-value.*\.\pattern-valueinit-param filter/ filter-mappingfilter-nameHttpHeaderSecurityFilter/filter-nameurl-pattern/*url-patternfilter-mapping/ security-contraintweb-resource-collectionweb-resource-nameEntire Application/web-resource-nameurl-pattern/*url-patternhttp-methodGET/http-methodhttp-methodPOST/http-method/web-resource-collectionuser-data-contrainttransport-guaranteeCONFIDENTIAL/user-data-contraintsecurity-contraint/ web-app '/ode'

三/>
🛑 极高风险痛点/h/' ' Context antiResourceLocking=\'false\' privileged=\'true\'> Valve className=\'org.apache.catalina.valves.RemoteAddrValve\' allow=\'^\$|\^...\.\\.\.\.'\' /> Context '/ode'>' tomatusersxl version=\".\" xmlns=\".\" schemaLocation=\". .xsd\">\ role rolename=\"/admin-gui/\"/!-- 主机管理极少授予 -->\ \ user username=\"._admin_.\" password=\".StrngPsswrd!\.\" roles=\"/manager-gui,\admin-gui/\"/\ user username=.deployer_. password=.DevPssword!. roles=.manager-script./!-- CI/CD自动化部署专用 账号分离 -->\ tomatusersxl ' 三/> \ security-contraint web-resource-collection web-resource-name/Admin Console Access/web-resource-name url-pattern/admin/*url-pattern url-pattern/manager/*url-pattern url-pattern/host-manager/*url-pattern http-methodGET/http-method http-methodPOST/http-method http-methodPUT/http-method http-methodDELETE/http-method http-methodHEAD/http-method http-methodOPTIONS/http-method http-methodTRACE/http-method web-resource-collection auth-contraint role-namemanager-guirole-name role-namadmin-guirl-role-name auth-contraint user-data-contraint transport-guaranteeCONFIDENTIAL/user-data-contraint security-contraint ' 二/>
🌐 边界防御痛点/h/' ' UFW示例 sudo ufw default deny incoming sudo ufw default allow outgoing \ sudo ufw allow from ././././ to any port comment 'SSH Jump Host' \ \ sudo ufw allow from ./../.. to any port proto tcp comment 'HTTP Load Balancer' \ \ sudo ufw allow from ./../.. to any port proto tcp comment 'HTTPS Load Balancer' \ \ # ⚠️ 生产严禁允许直连!ufw enable ' ' 二/> 三/> \ Valve className=".org.apache.catalina.valves.AccessLogValve"\ directory="/logs"\ prefix=".access_log." suffix=".txt"\ pattern=".%. %l %u %t ".%r" %. %s %b %{ms}T \"%{Referer}i\" \"%{User-Agent}i\"\"/>\ rotate=.true\. fileDateFormat=-yyyy-MM-dd\. requestAttributesEnabled=.true\/>' ' 三/>
实时监控异常状态码 tail f opt/oacat/logsaccesslog.$date.txt awk '$==||$== {print}' | grep vE 'static|css|js|png|jpg|ico'
#>周期审计脚本结合 logrotate 每日切割保留天 />' '

方法模式所有者所属组模式说明
/opt/ /tomncttomncttomnct75td rwxr-xr-x程序代码只读防篡改
/oet/tomet/cnftomettomet75敏感配置仅组内可读
/optt/tomet/bn/*.shtomettomet75脚本可执行
/oet/tmet/logs work temptmettmet td rw-rw----运行时写入需组写(tr bgcolor='#fafafa'>
.检查项.频率.工具命令参考.风险阈值<'tr '
.Tomca/JDK 是否为最新LTS补丁版本.月度 td styeborder=solid rgb padding.em>官网ChangeLog diff CVE数据库 NVD td styeborde=solid rgb paddig.em>存在CVSS>= 高危未修复<'tr '
manager/admin 是否仍存在弱口令或公网暴露 td styeboer=sold rgbpaddig.em>周度 td styelborder=sold rgbpaddig.em nmap p --script http-auth target cat conftomacusrsxml td styelborder=sold rgbpaddig.em>发现弱口令立即整改<'rt '

<><>/

<>遵循 <>最小权限 <>纵深防御 <>不可变基础设施 三大原则: <>.身份隔离: Root禁跑 Systemd降权 UMask= .目录分级: Conf只读 Bin可执 Logs组写 Webapps只读 .功能瘦身: Kill AJP Kill Examples Kill AutoDeploy Kill VersionLeak .访问闸门: IP白名单 RemoteAddrValve 强密码 Role分离 HTTPS强制 .边界收敛: 安全组+UFW双层封锁非必要端口 .审计闭环: AccessLog标准化 日志权限固化 持续漏洞扫描 只有将每一个「痛点」转化为「标准动作」,并固化到基础设施代码中 自动化巡检才能真正让 Ubuntu Tomcat 在野外「稳如泰山」。

如何精准设置Ubuntu Tomcat访问权限,确保网站安全不受侵犯?

标签:Ubuntu