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.conf和conf/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 强化控制台访问策略
仅仅有验证码还不够。我们还需要从网络层和协议层加固控制台的访问。
绑定管理端口到特定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" ... />强制使用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。
配置访问控制列表(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管理控制台本身提供的“角色-资源”映射功能(如果版本支持)。通常,在控制台的“安全”或“用户管理”模块,可以直接进行图形化的权限分配。
操作路径(假设控制台有该功能):
- 使用一个具有超级管理员权限的账号(如初始安装时创建的admin账号)登录控制台。
- 导航到“安全” -> “角色管理”或“用户与角色”。
- 为我们自定义的角色(
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的日志有多种,对于安全审计,我们主要关心两种:
- 访问日志(Access Log):记录所有HTTP/HTTPS请求,包括请求来源IP、时间、请求方法、URL、状态码、响应大小等。这对于追踪异常访问、攻击行为至关重要。
- 审计日志(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 "%r" %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需要能查看日志,但不能修改。有几种实现方式:
- 通过控制台集成:如果TongWeb7控制台提供了日志查看模块,并且我们成功地将该模块的访问权限只分配给了
auditor角色,那是最理想的。 - 通过只读文件系统权限:我们可以将日志文件所在的目录,设置为
tongweb用户可写,tongweb组可读。然后将审计员wangwu也加入到tongweb组中。这样wangwu通过SSH登录服务器后,可以读取日志文件,但无法修改。同时,要严格控制wangwu的SSH登录权限和可执行的命令(通过sudo或authorized_keys的command选项限制)。 - 通过专用的日志查看工具:搭建一个简单的、只读的日志查看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:可以修改为一个模糊的标识,减少信息泄露,但这不是主要的安全手段。maxPostSize和maxParameterCount:有助于缓解某些拒绝服务攻击。
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-only和secure设置为true,是保护用户会话Cookie的基本要求。
8. 加固流程检查清单与常见问题排查
完成所有配置后,不要急于上线。请按照以下清单进行一次完整的检查,并准备好排查可能遇到的问题。
8.1 安全加固检查清单
| 检查项 | 预期状态/配置 | 检查方法 |
|---|---|---|
| 操作系统用户 | 使用专用非root用户(如tongweb)启动 | `ps -ef |
| 文件权限 | 安装目录权限为750,日志等目录770,属主属组为tongweb | ls -ld /opt/TongWeb7ls -ld /opt/TongWeb7/logs |
| 防火墙 | 管理端口(9060/9043)仅对管理网段开放 | firewall-cmd --list-rich-rules或iptables -L -n |
| 控制台验证码 | 登录页面显示验证码,错误验证码导致登录失败 | 浏览器访问控制台登录页,肉眼观察及测试 |
| 控制台HTTPS | HTTP管理端口已禁用或重定向,仅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测试 |
| 会话Cookie | Cookie标记为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.conf和system.conf中验证码相关配置的路径和文件名正确无误。
- Linux服务器:安装字体包。例如对于CentOS/RHEL:
问题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 = FINE或SECURITY)并配置一个专门的FileHandler来接收这些日志事件。不同版本配置方式可能不同,务必查阅对应版本的文档。
问题4:配置HTTPS后,浏览器访问控制台提示证书不安全。
- 排查:使用的是自签名证书。
- 解决:生产环境应向受信任的证书颁发机构(CA)申请证书。测试环境可以手动将自签名证书导入到客户端的信任库,但这不是生产环境的做法。确保在
server.xml的HTTPS Connector中配置的keystoreFile和keystorePass指向正确的密钥库和密码。
问题5:重启TongWeb7后,部分配置似乎没生效。
- 排查:最常见的原因是配置文件有语法错误,导致TongWeb7启动时部分配置被忽略。另一个可能是缓存。
- 解决:首先,永远优先查看日志!
logs/catalina.out和logs/server.log会包含启动时的详细信息和错误。根据错误信息修正配置。其次,确保你修改的是正确的配置文件(例如,确认TongWeb7的安装路径和配置路径)。最后,在极端情况下,可以尝试清除work/和temp/目录下的缓存文件后再重启。
安全加固是一个持续的过程,而非一劳永逸的任务。本次实战涵盖了从系统层到应用层,从访问控制到权限分离的核心配置点,为你构建了一个坚实的安全基线。在实际生产环境中,还需要结合漏洞扫描、入侵检测、定期安全评估等手段,形成动态的安全防护体系。配置完成后,务必进行完整的业务功能测试,确保安全加固没有引入新的兼容性问题。记住,所有的安全设置,都应该有清晰的变更记录和回滚方案。
