当前位置: 首页 > news >正文

TongWeb7生产环境安全加固实战:从验证码到三员分立

1. 项目概述:为什么生产环境下的TongWeb7必须做安全加固?

最近在帮一个金融客户做中间件迁移和上生产前的安全合规检查,项目核心就是把应用从旧版本的WebLogic迁移到国产的TongWeb7上。客户的安全团队提了一堆要求,从最基础的控制台不能裸奔,到满足等保三级里提到的“三员分立”原则,一条条列得清清楚楚。这其实不是个例,现在但凡涉及线上业务,尤其是金融、政务这类对安全敏感的行业,中间件安全加固已经从“加分项”变成了“入场券”。你可能会觉得,TongWeb7本身已经挺安全了,默认配置用着好像也没事。但根据我多年的经验,默认配置恰恰是最大的风险点,它追求的是通用性和易用性,跟生产环境所要求的“最小权限、纵深防御”原则往往是背道而驰的。

就拿这次的项目标题来说,“控制台登录验证码”和“三员分立”就是两个非常典型且必须处理的加固点。控制台是管理TongWeb7的大门,如果连个验证码都没有,攻击者就可以肆无忌惮地进行暴力破解尝试,弱口令风险急剧上升。而“三员分立”则是安全管理的基础模型,要求系统管理员、安全管理员和审计员的权限必须分离,互相制约,防止单人权限过大带来的内部风险。这不仅仅是技术配置,更是一种安全治理思想的落地。

所以,这次实战分享,我会以一个完整的生产环境上线流程为线索,把散落在官方文档、安全基线要求和实战踩坑经验里的东西串起来。目标很明确:不是简单地告诉你改哪个配置文件,而是让你明白为什么必须这么改,这么改背后防的是什么风险,以及在实际操作中可能会遇到哪些“坑”。我会假设你已经有TongWeb7的基础安装和部署经验,我们将直奔主题,搞定从服务器基础环境到TongWeb7自身配置的全链路安全加固。

2. 整体加固思路与架构设计

安全加固切忌“头痛医头,脚痛医脚”。在动手修改任何一个TongWeb7的配置文件之前,我们必须先建立起一个清晰的加固层次模型。我的思路通常分为四个层次,由外到内,层层递进:

第一层:操作系统与网络环境加固。这是TongWeb7运行的基石。如果服务器本身漏洞百出,开放了不必要的端口,或者使用了弱口令的SSH,那么中间件加固得再完美也是空中楼阁。这一层的工作包括:操作系统用户权限最小化、关闭非必需服务、配置防火墙策略、安装基础的安全防护软件(如HIDS)、以及进行必要的内核参数调优以抵御常见的网络攻击(如SYN Flood)。

第二层:TongWeb7运行环境与基础配置加固。这一层开始聚焦TongWeb7本身。核心是遵循“最小安装”和“最小权限”原则。例如,使用独立的、非root的系统用户来启动TongWeb7进程;严格控制TongWeb7安装目录及日志目录的文件权限;删除或禁用示例应用、默认管理控制台(如果不用)等可能带来信息泄露或攻击面的内容。

第三层:TongWeb7应用服务器核心安全配置加固。这是本次实战的重点,主要涉及TongWeb7自身的配置文件修改。包括但不限于:强化控制台与管理端口的安全访问策略(如绑定特定IP、启用验证码、强制HTTPS);配置严格的安全域(Security Realm)和用户角色;启用并配置详细的审计日志;以及根据“三员分立”原则,规划和创建对应的管理员账号与角色。

第四层:部署应用的安全规范。中间件安全了,上面跑的应用也得安全。这包括在TongWeb7中配置安全约束(Security Constraint)来定义URL的访问控制、强制应用使用安全的通信协议(如TLS 1.2+)、以及对应用会话(Session)进行安全配置,防止会话固定、会话劫持等攻击。

这次我们的实战将主要覆盖第二层和第三层,特别是第三层中与控制台验证码和“三员分立”直接相关的配置。我们会采用一种“操作时间轴”的方式,模拟从一台刚装好TongWeb7的服务器开始,一步步将其加固到能满足一般生产环境安全审计要求的程度。整个过程中,我会穿插解释每个操作的安全意图,并分享我遇到过的典型问题和解决方案。

3. 环境准备与基础安全加固

在登录TongWeb7控制台之前,我们得先把“地基”打牢。很多安全事件的发生,根源就在于基础环境太脆弱。

3.1 操作系统用户与权限规划

绝对不要使用root用户直接运行TongWeb7!这是铁律。我们需要创建一个专用的系统用户和用户组,例如tongweb

# 创建用户组和用户,并禁止其登录shell(增强安全性) groupadd tongweb useradd -g tongweb -s /sbin/nologin -M tongweb

接下来,更改TongWeb7安装目录的所有权。假设你的TongWeb7安装在/opt/TongWeb7

chown -R tongweb:tongweb /opt/TongWeb7

这样做的目的是实现权限隔离。即使TongWeb7进程被攻破,攻击者获得的也只是tongweb这个低权限用户的身份,无法对系统关键文件进行破坏,极大地限制了攻击范围。

3.2 文件系统权限加固

仅仅改变所有者还不够,还需要设置严格的目录权限。遵循“最小权限”原则:可读、可写、可执行的权限只授予必须的目录。

# 进入安装目录 cd /opt/TongWeb7 # 1. 整个目录,所有者可读写执行,同组用户只读,其他用户无权限(750是常用安全配置) chmod 750 . # 2. 对于需要写入的目录,单独调整。例如日志目录、临时文件目录、部署目录。 chmod 770 logs/ temp/ applications/ # tongweb用户和同组用户可读写,其他用户无权限 # 3. 对于二进制文件和库文件,通常只需要读和执行权限。 find bin/ -type f -name "*.sh" -exec chmod 750 {} \; find lib/ -type f -name "*.jar" -exec chmod 640 {} \; # 4. 特别注意:删除或备份默认的示例应用和文档,它们可能包含漏洞或泄露信息。 rm -rf samples/ docs/ # 请谨慎操作,确认无需这些内容后再删除。或将其移动到安全位置。

注意chmod 770用于logs/等目录是因为TongWeb7进程(以tongweb用户运行)需要向其中写入文件。确保这些目录的属组正确(tongweb:tongweb),这样进程才有写入权限。applications/目录同理,部署应用时可能需要写入。

3.3 网络与防火墙配置

TongWeb7默认会监听多个端口,比如控制台的管理端口(默认9060)、HTTP端口(默认8080)、HTTPS端口(默认9443)、AJP端口等。在生产环境中,我们必须通过防火墙严格限制对这些端口的访问。

  • 管理端口(如9060, 9043):这是加固的重中之重。必须仅允许运维堡垒机或特定管理网段的IP地址访问。绝对不应该对互联网开放。
  • 应用端口(如8080, 9443):根据业务需要开放。如果应用提供对外服务,则需要对公网开放;如果仅是内部服务,则限制在内网IP段。

以常用的firewalld为例(CentOS/RHEL 7+):

# 假设管理网络段是 10.10.1.0/24,应用需要对公网提供HTTPS服务 systemctl start firewalld systemctl enable firewalld # 添加一个富规则,只允许特定IP段访问管理端口 firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.10.1.0/24" port protocol="tcp" port="9060" accept' firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.10.1.0/24" port protocol="tcp" port="9043" accept' # 开放应用的HTTPS端口给所有来源(根据实际情况调整) firewall-cmd --permanent --add-port=9443/tcp # 移除默认的、可能不必要的公开端口(如默认的8080,如果我们只用9443) firewall-cmd --permanent --remove-port=8080/tcp # 重载防火墙配置 firewall-cmd --reload # 查看生效的规则 firewall-cmd --list-all

这个阶段完成后,你的TongWeb7服务器已经具备了基本的安全运行环境。接下来,我们就要深入TongWeb7内部,进行核心的安全配置了。

4. 控制台安全加固:强制验证码与访问策略

TongWeb7的控制台(通常通过http(s)://服务器IP:9060/console访问)是运维管理的核心入口,也是攻击者最感兴趣的目标。默认安装后,控制台登录只有用户名和密码,这存在暴力破解的风险。我们的目标是:为控制台登录增加验证码,并严格限制控制台本身的访问。

4.1 启用并配置登录验证码

TongWeb7企业版通常内置了验证码功能,但可能需要手动启用和配置。配置主要涉及两个文件:conf/login.confconf/system.conf(具体文件路径可能因版本略有差异,请以实际为准)。

第一步:修改conf/login.conf这个文件定义了登录模块。我们需要确保验证码(Captcha)模块被启用并正确配置。

# 在login.conf中,找到或添加与Captcha相关的配置项 # 启用验证码 captcha.enabled=true # 验证码类型,常见的有“default”(数字字母混合)、“math”(算术题)等 captcha.type=default # 验证码长度 captcha.length=4 # 验证码会话中存储的key名称,一般不用改 captcha.session.key=CAPTCHA_CODE

第二步:修改conf/system.conf这个文件是TongWeb7的主配置文件,我们需要在控制台相关的配置段中,指定使用上述启用了验证码的登录模块。

# 找到控制台(Console)相关的配置区域,可能标记为 [console] 或包含console的配置项 # 指定登录配置文件路径(如果尚未指定) console.login.config.file=${TONGWEB_HOME}/conf/login.conf # 确保控制台的安全域(realm)配置正确,指向一个安全的用户存储(如后面会配置的“三员分立”的域)

第三步:重启并验证保存配置文件后,重启TongWeb7服务。再次访问控制台登录页面,你应该能看到验证码输入框。尝试输入错误的验证码,应该会登录失败。

实操心得:验证码的复杂度需要平衡安全性和用户体验。对于内部管理控制台,使用captcha.type=math(如“3+5=?”)可能比扭曲的数字字母更友好,且同样能有效阻止自动化脚本。如果验证码不显示,首先检查TongWeb7的日志文件(logs/server.log),看是否有相关错误。常见问题包括图形处理库缺失(如未安装字体),对于Linux服务器,确保安装了fontconfig等包。

4.2 强化控制台访问策略

仅仅有验证码还不够。我们还需要从网络层和协议层加固控制台的访问。

  1. 绑定管理端口到特定IP:如果服务器有多个IP(如内网IP和外网IP),应将管理端口绑定到内网IP,杜绝从外网直接访问的可能。在conf/server.xml(或类似配置连接器的文件)中,找到管理端口的Connector配置。

    <!-- 修改前,可能监听所有接口 --> <Connector port="9060" protocol="HTTP/1.1" .../> <!-- 修改后,仅监听内网IP 10.10.1.100 --> <Connector port="9060" protocol="HTTP/1.1" address="10.10.1.100" ... />
  2. 强制使用HTTPS访问控制台:明文传输的管理流量是致命的。我们应该禁用HTTP管理端口(9060),或将其重定向到HTTPS端口(9043)。更好的做法是,只启用HTTPS管理端口。

    • 首先,确保你为TongWeb7配置了有效的SSL证书(自签名证书仅用于测试,生产环境建议使用受信任的CA签发的证书)。
    • conf/server.xml中,确保HTTPS Connector(端口9043)已正确配置且启用。
    • 可以考虑将HTTP Connector(9060)的redirectPort属性设置为9043,这样访问HTTP会自动跳转到HTTPS。
    • 最严格的做法是直接注释掉或删除HTTP管理Connector的配置,只保留HTTPS。
  3. 配置访问控制列表(ACL):TongWeb7支持在应用层面配置IP过滤。虽然我们已经在操作系统防火墙做了限制,但在中间件层再加一道防线更为稳妥。这通常可以通过配置Web应用的web.xml或使用TongWeb7的安全约束功能实现,但针对控制台应用本身,可能需要修改其部署描述符或使用TongWeb7特有的管理控制台配置。一个更通用的方法是利用前面提到的防火墙规则,这是更推荐的方式。

完成以上步骤后,你的TongWeb7控制台已经具备了较强的抗暴力破解和防窃听能力。接下来,我们要解决“谁”能登录控制台,以及登录后“能干什么”的问题,这就是“三员分立”要解决的问题。

5. 实现“三员分立”权限模型

“三员分立”是中国等级保护、网络安全法中对重要信息系统安全管理的基本要求,核心是权限分离与制衡。在TongWeb7的语境下,我们需要创建三个不同的管理角色,并分配给不同的管理员账号。

  • 系统管理员:负责TongWeb7服务器的日常运维、启停、配置修改、应用部署等。拥有最高的操作权限,但不能进行用户管理和审计日志查看。
  • 安全管理员:负责用户账号、角色、密码策略的管理。可以创建、修改、删除用户,分配角色,但不能进行系统运维操作。
  • 审计员:负责查看和分析所有的审计日志、操作记录。只有只读权限,不能进行任何配置修改或用户管理操作。

TongWeb7通常通过安全域(Security Realm)来管理用户和角色。我们可以使用其内置的基于文件(如conf/tomcat-users.xml)或基于JDBC连接数据库的Realm。为了便于管理和持久化,生产环境推荐使用JDBC Realm,将用户信息存储在独立的数据库中(如MySQL)。这里为了演示清晰,我们先使用文件Realm,其原理是相通的。

5.1 规划角色与用户

首先,在conf/tomcat-users.xml文件中定义角色和用户。这个文件是TongWeb7默认的用户存储之一。

<?xml version='1.0' encoding='utf-8'?> <tomcat-users> <!-- 定义三个核心角色 --> <role rolename="sysadmin"/> <!-- 系统管理员角色 --> <role rolename="secadmin"/> <!-- 安全管理员角色 --> <role rolename="auditor"/> <!-- 审计员角色 --> <!-- 可选:定义一个超级管理员角色,用于初始配置,后续应禁用或谨慎使用 --> <role rolename="admin-gui"/> <!-- 控制台GUI管理角色 --> <role rolename="admin-script"/> <!-- 脚本管理角色 --> <!-- 创建用户并分配角色 --> <!-- 系统管理员:zhangsan --> <user username="zhangsan" password="{SHA-256}hashed_password_here" roles="sysadmin"/> <!-- 安全管理员:lisi --> <user username="lisi" password="{SHA-256}hashed_password_here" roles="secadmin"/> <!-- 审计员:wangwu --> <user username="wangwu" password="{SHA-256}hashed_password_here" roles="auditor"/> <!-- 注意:密码不应明文存储。这里 {SHA-256} 表示使用SHA-256哈希。 可以使用TongWeb7提供的工具生成哈希密码,例如: $TONGWEB_HOME/bin/digest.sh -a SHA-256 -s 0 your_password 将输出的部分(去掉“your_password:”前缀)作为password属性的值。 --> </tomcat-users>

重要提示tomcat-users.xml中的密码必须使用哈希值,切勿使用明文!TongWeb7的bin/digest.sh(Linux)或digest.bat(Windows)脚本可以用来生成哈希。命令格式如注释所示。

5.2 配置安全域(Realm)与角色映射

接下来,我们需要配置TongWeb7使用这个用户文件,并将我们定义的角色映射到控制台的具体功能权限上。这通常在conf/server.xml中配置。

server.xml<Engine><Host>部分添加或修改Realm配置:

<Engine name="Catalina" defaultHost="localhost"> ... <!-- 配置一个UserDatabase Realm,指向我们刚才编辑的tomcat-users.xml --> <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> ... </Engine>

同时,确保conf/server.xml中已经存在或添加了用于全局资源的GlobalNamingResources

<GlobalNamingResources> <!-- 定义用户数据库资源 --> <Resource name="UserDatabase" auth="Container" type="org.apache.catalina.UserDatabase" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" pathname="conf/tomcat-users.xml" /> </GlobalNamingResources>

现在,用户和角色已经定义好了。但是,如何让“sysadmin”、“secadmin”、“auditor”这些角色真正控制控制台里的不同功能呢?这需要修改TongWeb7控制台应用(通常是webapps/console或类似)的权限约束。

5.3 定制控制台应用权限

TongWeb7的控制台是一个Web应用,其访问权限由WEB-INF/web.xml文件中的安全约束(<security-constraint>)定义。我们需要找到这个文件(路径可能为webapps/console/WEB-INF/web.xml),并对其进行编辑。

目标:将控制台的不同URL模式(如/console/deploy/*对应部署,/console/security/*对应用户管理)与我们自定义的角色关联起来。

由于TongWeb7的控制台功能模块划分可能比较细,修改web.xml是一项精细且需要充分测试的工作。一个更稳妥、更推荐的做法是利用TongWeb7管理控制台本身提供的“角色-资源”映射功能(如果版本支持)。通常,在控制台的“安全”或“用户管理”模块,可以直接进行图形化的权限分配。

操作路径(假设控制台有该功能)

  1. 使用一个具有超级管理员权限的账号(如初始安装时创建的admin账号)登录控制台。
  2. 导航到“安全” -> “角色管理”或“用户与角色”。
  3. 为我们自定义的角色(sysadmin,secadmin,auditor)分配具体的“资源”或“操作”权限。例如:
    • 将“应用部署”、“服务器配置”、“数据源管理”等资源分配给sysadmin角色。
    • 将“用户管理”、“角色管理”、“密码策略”等资源分配给secadmin角色。
    • 将“日志查看”、“操作审计”等资源分配给auditor角色。

如果图形界面不支持如此细粒度的分配,或者版本较旧,那么可能就需要手动编辑web.xml。这是一个高风险操作,务必先备份原文件。你需要分析控制台应用的URL结构,然后像下面这样添加安全约束:

<!-- 示例:限制部署功能只能由sysadmin访问 --> <security-constraint> <web-resource-collection> <web-resource-name>Deployment</web-resource-name> <url-pattern>/console/deploy/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>sysadmin</role-name> </auth-constraint> </security-constraint> <!-- 示例:限制用户管理功能只能由secadmin访问 --> <security-constraint> <web-resource-collection> <web-resource-name>UserManagement</web-resource-name> <url-pattern>/console/security/users/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>secadmin</role-name> </auth-constraint> </security-constraint>

完成以上步骤后,重启TongWeb7。然后分别用zhangsan(sysadmin)、lisi(secadmin)、wangwu(auditor) 三个账号登录控制台。你会发现,每个账号能看到和操作的功能菜单是不同的,从而实现了权限的分离。

6. 审计日志与安全监控配置

“三员分立”中的审计员角色要发挥作用,依赖于完整、详细且受保护的审计日志。TongWeb7的审计日志需要专门启用和配置。

6.1 启用并配置访问日志与审计日志

TongWeb7的日志有多种,对于安全审计,我们主要关心两种:

  1. 访问日志(Access Log):记录所有HTTP/HTTPS请求,包括请求来源IP、时间、请求方法、URL、状态码、响应大小等。这对于追踪异常访问、攻击行为至关重要。
  2. 审计日志(Audit Log):专门记录安全相关事件,如用户登录成功/失败、权限检查失败、关键配置变更等。

配置访问日志:在conf/server.xml中,找到对应的Connector(如HTTP/HTTPS),在其内部添加Valve配置。

<Connector port="8080" protocol="HTTP/1.1" ... > <!-- 启用访问日志Valve --> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s %b %D" resolveHosts="false" /> </Connector>
  • pattern定义了日志格式。%h是远程主机(IP),%u是远程用户,%t是时间,%r是请求行,%s是状态码,%b是响应字节数,%D是处理时间(微秒)。一个更丰富的模式如combined可以记录Referer和User-Agent。
  • resolveHosts设为false可以避免DNS反向查询,提升性能并防止因DNS问题阻塞请求。

配置审计日志:审计日志的配置通常位于独立的审计配置文件或conf/logging.properties中。你需要查找TongWeb7文档中关于“审计”或“Audit”的配置项。可能需要启用特定的审计过滤器(Filter)或监听器(Listener),并将审计事件记录到独立的日志文件中。例如,配置一个只记录SECURITY级别事件的日志处理器(Handler),将其输出到logs/audit.log

6.2 日志安全与轮转策略

日志本身也是敏感信息,必须加以保护。

  • 权限:确保日志目录(logs/)的权限如前所述(tongweb用户可写),其他用户最好只读或无权限。防止非授权用户篡改或删除日志。
  • 轮转(Rotation):避免日志文件无限增长,消耗磁盘空间。TongWeb7的AccessLogValve支持按时间或大小轮转。对于审计日志,可以使用Linux的logrotate工具进行更精细的管理(如按天切割、压缩旧日志、保留一定天数)。
  • 集中收集与分析:对于生产环境,强烈建议将TongWeb7的日志(尤其是访问日志和审计日志)实时收集到集中的日志平台(如ELK Stack、Splunk等),便于进行关联分析、异常检测和长期归档。

6.3 为审计员配置只读日志访问

审计员wangwu需要能查看日志,但不能修改。有几种实现方式:

  1. 通过控制台集成:如果TongWeb7控制台提供了日志查看模块,并且我们成功地将该模块的访问权限只分配给了auditor角色,那是最理想的。
  2. 通过只读文件系统权限:我们可以将日志文件所在的目录,设置为tongweb用户可写,tongweb组可读。然后将审计员wangwu也加入到tongweb组中。这样wangwu通过SSH登录服务器后,可以读取日志文件,但无法修改。同时,要严格控制wangwu的SSH登录权限和可执行的命令(通过sudoauthorized_keyscommand选项限制)。
  3. 通过专用的日志查看工具:搭建一个简单的、只读的日志查看Web界面(如封装tail -f),并做好身份认证和授权,只允许auditor角色访问。

方案2在实践中比较常见,但需要系统层面的配合。无论哪种方案,核心原则是:审计员有权限查看所有日志,但无权限修改任何配置或日志内容。

7. 生产环境其他关键安全配置项

除了上述核心加固点,生产环境还有一些不容忽视的配置细节。

7.1 禁用不安全的协议与加密套件

如果启用了HTTPS(你必须启用!),务必在conf/server.xml的HTTPS Connector中配置强加密套件,并禁用老旧、不安全的协议(如SSLv2, SSLv3, TLS 1.0,甚至TLS 1.1在现代安全要求下也建议禁用)。

<Connector port="9443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" keystoreFile="/path/to/your/keystore.jks" keystorePass="your_keystore_password" clientAuth="false" sslProtocol="TLS" ciphers="TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256" sslEnabledProtocols="TLSv1.2,TLSv1.3" />
  • sslEnabledProtocols:明确指定启用TLS 1.2和1.3。
  • ciphers:指定优先使用的强加密套件列表。上面的列表是一个较安全的示例,具体需根据JRE版本和合规要求调整。你可以使用在线工具或openssl命令测试你的服务器支持的套件。

7.2 调整连接器(Connector)安全参数

conf/server.xml的HTTP/HTTPS Connector中,可以设置一些安全相关的参数。

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" maxHttpHeaderSize="8192" maxPostSize="2097152" <!-- 限制POST请求大小,防DoS --> maxParameterCount="1000" <!-- 限制请求参数个数 --> allowTrace="false" <!-- 禁用TRACE方法,防XST攻击 --> server="TongWeb/7.0" <!-- 可考虑修改或隐藏服务器标识 --> ... />
  • allowTrace="false":禁用TRACE和TRACK方法,防止跨站追踪攻击。
  • server:可以修改为一个模糊的标识,减少信息泄露,但这不是主要的安全手段。
  • maxPostSizemaxParameterCount:有助于缓解某些拒绝服务攻击。

7.3 会话(Session)安全

conf/web.xml(全局配置)或应用的WEB-INF/web.xml中,可以配置会话安全。

<session-config> <session-timeout>30</session-timeout> <!-- 会话超时时间(分钟) --> <cookie-config> <http-only>true</http-only> <!-- 防止通过JS窃取Cookie --> <secure>true</secure> <!-- 仅通过HTTPS传输Cookie --> </cookie-config> </session-config>

http-onlysecure设置为true,是保护用户会话Cookie的基本要求。

8. 加固流程检查清单与常见问题排查

完成所有配置后,不要急于上线。请按照以下清单进行一次完整的检查,并准备好排查可能遇到的问题。

8.1 安全加固检查清单

检查项预期状态/配置检查方法
操作系统用户使用专用非root用户(如tongweb)启动`ps -ef
文件权限安装目录权限为750,日志等目录770,属主属组为tongwebls -ld /opt/TongWeb7ls -ld /opt/TongWeb7/logs
防火墙管理端口(9060/9043)仅对管理网段开放firewall-cmd --list-rich-rulesiptables -L -n
控制台验证码登录页面显示验证码,错误验证码导致登录失败浏览器访问控制台登录页,肉眼观察及测试
控制台HTTPSHTTP管理端口已禁用或重定向,仅HTTPS可访问尝试用HTTP访问,应跳转或拒绝;用HTTPS访问正常
三员分立账号三个账号(sysadmin, secadmin, auditor)可分别登录使用三个账号登录控制台
权限隔离sysadmin不能管理用户,secadmin不能部署应用,auditor仅能看日志登录后,尝试访问无权功能,应被拒绝(403错误或无菜单)
密码存储tomcat-users.xml中密码为哈希值,非明文查看conf/tomcat-users.xml文件内容
审计日志独立的审计日志文件(如audit.log)正在生成,且包含登录事件查看logs/目录下是否有审计日志,并tail查看内容
访问日志访问日志格式正确,记录了客户端IP、请求等信息查看logs/localhost_access_log.*.txt
TLS协议仅启用TLSv1.2及以上使用openssl s_client -connect your_server:9443 -tls1_2测试
会话CookieCookie标记为HttpOnly和Secure浏览器开发者工具,查看登录后的Set-Cookie响应头

8.2 常见问题与解决方案实录

问题1:启用验证码后,控制台登录页面不显示验证码图片。

  • 排查:查看logs/server.log,寻找与“Captcha”、“ImageIO”或相关图形生成的错误。
  • 解决
    • Linux服务器:安装字体包。例如对于CentOS/RHEL:yum install fontconfig dejavu-sans-fonts。对于Ubuntu/Debian:apt-get install fontconfig fonts-dejavu-core
    • 权限问题:确保TongWeb7进程用户(tongweb)对临时目录(如/tmp)有写入权限。
    • 配置路径:确认login.confsystem.conf中验证码相关配置的路径和文件名正确无误。

问题2:自定义角色登录后,看不到任何管理菜单或所有菜单都可见(权限未生效)。

  • 排查:首先确认用户是否被正确分配了角色(检查tomcat-users.xml)。然后,检查TongWeb7控制台应用的安全约束是否生效。
  • 解决
    • 如果使用图形界面分配权限,确保操作已保存并生效(可能需要重启应用或整个TongWeb7)。
    • 如果手动修改了web.xml,请检查XML语法是否正确,<url-pattern>是否匹配控制台的实际URL路径,<role-name>是否与定义的角色名完全一致(大小写敏感)。修改后必须重启TongWeb7
    • 查看logs/console.log(或控制台应用对应的日志),看是否有权限检查相关的错误信息。

问题3:审计日志没有记录登录事件。

  • 排查:确认审计日志功能是否已正确启用。检查conf/logging.properties或相关审计配置文件。
  • 解决:根据TongWeb7官方文档,找到启用审计日志的确切配置项。可能需要设置日志级别(如org.apache.catalina.authenticator.level = FINESECURITY)并配置一个专门的FileHandler来接收这些日志事件。不同版本配置方式可能不同,务必查阅对应版本的文档。

问题4:配置HTTPS后,浏览器访问控制台提示证书不安全。

  • 排查:使用的是自签名证书。
  • 解决:生产环境应向受信任的证书颁发机构(CA)申请证书。测试环境可以手动将自签名证书导入到客户端的信任库,但这不是生产环境的做法。确保在server.xml的HTTPS Connector中配置的keystoreFilekeystorePass指向正确的密钥库和密码。

问题5:重启TongWeb7后,部分配置似乎没生效。

  • 排查:最常见的原因是配置文件有语法错误,导致TongWeb7启动时部分配置被忽略。另一个可能是缓存。
  • 解决:首先,永远优先查看日志logs/catalina.outlogs/server.log会包含启动时的详细信息和错误。根据错误信息修正配置。其次,确保你修改的是正确的配置文件(例如,确认TongWeb7的安装路径和配置路径)。最后,在极端情况下,可以尝试清除work/temp/目录下的缓存文件后再重启。

安全加固是一个持续的过程,而非一劳永逸的任务。本次实战涵盖了从系统层到应用层,从访问控制到权限分离的核心配置点,为你构建了一个坚实的安全基线。在实际生产环境中,还需要结合漏洞扫描、入侵检测、定期安全评估等手段,形成动态的安全防护体系。配置完成后,务必进行完整的业务功能测试,确保安全加固没有引入新的兼容性问题。记住,所有的安全设置,都应该有清晰的变更记录和回滚方案。

http://www.jsqmd.com/news/1177568/

相关文章:

  • [论文学习]LLM-based AI Agent 安全威胁与防御系统性综述
  • Stable Diffusion实战:从模型选择到参数调优,打造高效AI绘画工作流
  • Bootstrap 3/4/5 可视化工具对比:LayoutIt!、Fancy Boot、Style Bootstrap 3款实测
  • AI Agent自动分析报表,真的能替代BI工程师吗?——基于27家客户POC结果的6维能力评估模型(附准入红线清单)
  • Word 高效排版:5步实现全文档统一首行缩进2字符(避坑软回车)
  • 基于TC78H651AFNG和PIC32的直流有刷电机驱动器设计
  • 2026市场优质商场显示屏定做厂家推荐排行 - 品牌排行榜
  • 600元搞定软著,但90%的人不知道它和专利根本不是一回事
  • P1164 小 A 点菜(动态规划)
  • PIC18F47K40与MCP3202实现锂电池电压均衡方案
  • 如何构建多平台直播间实时监控系统:Java开发者的终极指南
  • 如何3步实现网盘下载速度翻倍:2025年浏览器插件终极效率指南
  • 2026年7月最新海口宝玑官方售后客服服务电话及地址网点大全 - 亨得利钟表维修中心
  • 【无标题】HarmonyOS ArkTS实战:使用 ColumnSplit 与 RowSplit 构建企业级自适应布局(API 23+)
  • Kirk Hammett为什么在万人演唱会上弹了别人的琴?
  • 邻接矩阵 C++ 实现无向网:3 种存储方案对比与 100 节点性能实测
  • 智能会议室整体解决方案,哪家更出色? - 品牌排行榜
  • GPT-4o 目标检测微调实战:JSONL 数据集准备、模型微调与结果可视化
  • MA12070与PIC32MX795F512L音频系统设计与优化
  • C++ Lambda 与函数指针转换:无捕获 Lambda 到函数指针的 3 步隐式转换机制
  • Windows游戏控制器驱动冲突终极解决方案:从识别到优化的完整指南
  • 鸿蒙智能体开发实战:39.鸿蒙壁纸大师 - 前端卡片显示与交互优化
  • eNSP USG5500 防火墙 Web 管理配置:从 CLI 到 GUI 的 3 步登录与基础策略下发
  • AD7175-8与PIC18F86J11高精度数据采集系统设计指南
  • Java 迪米特法则 3 大典型误用场景:从 2 个反例到 1 个正解
  • 2026福州漏水检测维修口碑榜TOP5权威推荐:正规防水补漏公司甄选-卫生间/厨房/阳台/屋顶/地下室渗漏水精准查漏:房屋防水补漏避坑指南 - 安佳防水
  • 2026年最新教程:报名照片超过大小限制怎么办?亲测好用的免费方法 - 图片处理研究员
  • 51单片机基础:GPIO、中断与定时器详解
  • 关于链表操作复杂度的可视化演示与实验分析7
  • GPT-5.6 来了,但 Codex 没了?