资讯详情

Windows/Linux主机加固清单:密码策略、端口收敛与取证复盘

📅 2026/11/3 3:00:16 | 华诺云谱 👁 阅读
Windows/Linux主机加固清单:密码策略、端口收敛与取证复盘
简介这份2021年全国职业院校技能大赛网络安全竞赛试题文档面向职业院校网络安全竞赛选手、指导教师及备赛训练人员围绕赛项任务还原服务器加固、数据库防护、流量完整性与事件监控等典型考点适合用于赛前模拟、专项训练与教学对照。压缩包内仅1个docx文件大小约119KB内容以赛题任务和操作要求为主线涵盖Windows与Linux双平台的密码策略、登录提示、用户权限管理MySQL安全运行与权限授予HTTP重定向HTTPS、IIS日志审计以及SSH、VSFTPD、IIS服务加固和防火墙端口封禁策略并延伸至网络安全事件响应、数字取证调查与应用安全模块。读者可据此梳理竞赛任务结构、明确加固要点与验证方向形成较完整的备赛清单和排错参照。目前已有961人学习下载适合作为网络安全竞赛入门到进阶阶段的赛题样本与训练底稿。1. 一份能当“加固清单”翻的赛题Windows 与 Linux 双平台到底考什么拿到这份 2021 年网络安全赛项试题文档我第一反应不是“题目”而是“清单”——它把 Windows 和 Linux 两台机器上该收紧的登录策略、该关的端口、该改的服务参数按任务一到任务六排得明明白白。很多同行做等保整改时最头疼的就是“知道要加固但记不全条目”这份文档恰好能补这个缺口密码长度、Banner 提示、会话超时、数据库运行账户、445 和 23 端口、ICMP 禁 ping一条条都是能直接落到配置文件里的动作。适合刚接触主机加固的新手照着复现也适合熟手当检查表用看自己漏了哪一项。它更像一份带评分点的实操任务书并非教程。模块 A 是防守侧的加固模块 B 是事件响应与取证两边合起来正好是一条完整的“先防住、再查清”的链路。下面我按实际动手顺序拆开讲重点放在参数怎么写、命令怎么敲、改完怎么验证以及我踩过的那些坑。2. 登录与账户加固把密码策略和会话超时落到配置文件这一章对应任务一的全部内容也是整套加固里最容易“改了没生效”的部分。Windows 走的是本地安全策略和组策略两条路Linux 走的是/etc/login.defs和/etc/ssh/sshd_config两个文件看着简单但每一条都有生效前提。2.1 密码长度 16 位两个平台的最小长度参数Windows 侧打开“管理工具 → 本地安全策略 → 账户策略 → 密码策略”把“密码长度最小值”改成 16。注意这里改的是本地策略如果机器已入域域策略会覆盖本地设置改完不生效先去gpresult /h report.html看一眼实际生效的是哪条策略。Linux 侧改/etc/login.defs# 密码最小长度改为 16 sed -i s/^PASS_MIN_LEN.*/PASS_MIN_LEN\t16/ /etc/login.defs # 验证是否写入 grep -E ^PASS_MIN_LEN /etc/login.defs逻辑说明login.defs是useradd、passwd等工具读取的默认参数文件PASS_MIN_LEN控制新建密码的最小长度。参数说明这里只影响之后修改密码的行为已存在的旧密码不会因此失效另外如果系统装了pam_pwquality真正卡长度的是/etc/security/pwquality.conf里的minlen两处不一致时以 PAM 为准。我一般两处都设避免出现“文件改了但 passwd 还是能设短密码”的翻车现场。2.2 登录 Banner本地提示与远程提示要分开配题目要求登录时出现 “For authorized users only”。Linux 本地终端读的是/etc/issueSSH 远程读的是sshd_config里的Banner指向的文件这两个是不同的入口只改一个会出现“本地有提示、SSH 进来没提示”的情况。# 本地登录欢迎语 echo For authorized users only /etc/issue # SSH 远程登录 Banner echo For authorized users only /etc/ssh/banner chmod 644 /etc/ssh/banner # 在 sshd_config 中启用 Banner grep -q ^Banner /etc/ssh/sshd_config || echo Banner /etc/ssh/banner /etc/ssh/sshd_config sshd -t systemctl restart sshd逻辑说明sshd -t是配置语法自检先测再重启能避免改错一个字符把 SSH 服务搞挂、把自己锁在门外。参数说明Banner的路径建议用绝对路径文件权限给 644 即可属主不必是 root但目录必须可读。Windows 侧对应的是“本地安全策略 → 本地策略 → 安全选项 → 交互式登录试图登录的用户的消息标题/文本”标题和正文两栏都要填只填文本栏在某些版本上不显示。2.3 非活动会话 5 分钟超时ClientAlive 两个参数配合SSH 超时靠ClientAliveInterval和ClientAliveCountMax两个参数相乘题目要求小于等于 5 分钟常见做法是 60 秒 × 5 次 300 秒正好卡线。# 每 60 秒探测一次连续 5 次无响应断开合计 300 秒 sed -i s/^#\?ClientAliveInterval.*/ClientAliveInterval 60/ /etc/ssh/sshd_config sed -i s/^#\?ClientAliveCountMax.*/ClientAliveCountMax 5/ /etc/ssh/sshd_config sshd -t systemctl restart sshd逻辑说明服务端每隔ClientAliveInterval秒向客户端发一次探测连续ClientAliveCountMax次收不到回应就断开连接。参数说明两个值必须同时设置只设 Interval 会取默认的 3 次实际超时就变成 180 秒虽然也满足“小于 5 分钟”但如果题目卡的是“等于 5 分钟”就得按 60×5 来。Windows 侧在“远程桌面会话主机设置 → RDP-Tcp 属性 → 会话”里设“结束已断开的会话”和“活动会话限制”注意单位是分钟别按秒填。2.4 限制 user1 的登录时段与网络访问权限Windows 单机环境下用net user最直接# 只允许周一至周五 9:00-18:00 登录 net user user1 /time:M-F,9:00-18:00 # 查看结果确认 net user user1逻辑说明/time参数接受星期缩写加时间段M-F表示周一到周五时间段用 24 小时制、逗号分隔多段。参数说明时间粒度为 1 小时写 9:30 会被取整如果账号属于域这条命令改的是本地账户库域账户要在“Active Directory 用户和计算机”里改登录时间才生效。“只允许管理员账号从网络访问本机”这条走组策略计算机配置 → Windows 设置 → 安全设置 → 本地策略 → 用户权限分配 → “从网络访问此计算机”把除 Administrators 之外的组全部删除。这里有个细节删除 Users 组后本机共享访问会一起断掉如果业务上还要用共享就得把需要访问的账号单独加进去别一刀切。3. 数据库与服务加固MySQL 运行账户和三个服务的安全参数任务二和任务五合起来是一整块“服务面收敛”MySQL 改运行身份、改管理员名、缩权限SSH / VSFTPD / IIS 改端口、禁匿名、开日志。这一层的共性是改配置容易改完服务还能正常起来才是本事。3.1 MySQL 以普通账户运行并清理默认库先确认系统里已有mysql这个普通用户然后在/etc/my.cnf的[mysqld]段加user参数[mysqld] user mysql-- 删除默认测试库 DROP DATABASE IF EXISTS test; -- 管理员改名MySQL 5.7 及以下写法 UPDATE mysql.user SET userSuperRoot WHERE userroot; FLUSH PRIVILEGES; -- 用内置 MD5 加密 user1 密码 UPDATE mysql.user SET passwordMD5(Pssw0rd1!) WHERE useruser1; FLUSH PRIVILEGES; -- 只给增删改查权限 GRANT SELECT,INSERT,DELETE,UPDATE ON testdb.* TO user1localhost; FLUSH PRIVILEGES;逻辑说明usermysql让 mysqld 进程以低权限账户启动即使被拿下也拿不到 root 壳。参数说明MySQL 8.0 已经移除了password字段和PASSWORD()函数改密码要用ALTER USER user1localhost IDENTIFIED BY Pssw0rd1!赛题里的 MD5 写法是 5.7 时代的产物照抄到 8.0 上会直接报错——这是我最想提醒的一处版本坑。另外改名管理员后配置文件里的mysql.user表操作要重新登录验证FLUSH PRIVILEGES别漏。3.2 SSH 改端口 2222 并禁 root 远程登录# 端口改 2222注意 SELinux 和防火墙要同步放行 sed -i s/^#\?Port .*/Port 2222/ /etc/ssh/sshd_config # 禁止 root 直接远程登录 sed -i s/^#\?PermitRootLogin.*/PermitRootLogin no/ /etc/ssh/sshd_config sshd -t systemctl restart sshd逻辑说明改端口属于“降低扫描命中率”的常规手段PermitRootLogin no则是强制运维先登录普通账号再su把 root 的口令暴露面收窄。参数说明改端口后如果开了 firewalld要执行firewall-cmd --permanent --add-port2222/tcp firewall-cmd --reload如果开了 SELinux还得semanage port -a -t ssh_port_t -p tcp 2222否则服务起不来但日志只报一句含糊的权限拒绝很容易查半天。3.3 VSFTPD 禁匿名上传与无操作超时# /etc/vsftpd/vsftpd.conf anonymous_enableNO connect_timeout600 accept_timeout600 data_connection_timeout300 idle_session_timeout300逻辑说明anonymous_enableNO直接关掉匿名登录比“禁匿名上传”更彻底也符合赛题意图。参数说明四个超时参数单位都是秒题目要求“无任何操作超时 5 分钟”真正对应的是idle_session_timeout设 300data_connection_timeout管数据传输中断设 300 也合理connect_timeout和accept_timeout管主动/被动模式建连给 600 是留余量。改完记得systemctl restart vsftpd并用ftp客户端实测一次匿名登录应被拒。3.4 IIS 日志字段与最大并发连接数IIS 侧在“网站 → 日志设置”里把格式选为 W3C然后只勾选日期、时间、客户端 IP 地址、用户名、方法五项其余取消。并发连接数在“网站 → 高级设置 → 限制 → 最大并发连接数”改成 1000。这两项在图形界面点几下就完事但要注意日志目录默认在%SystemDrive%\inetpub\logs\LogFiles磁盘小的话建议顺手改到数据盘否则跑一段时间日志能把系统盘写满——这是我在实际环境里真翻过的车。另外 HTTP 跳转 HTTPS 那条用 IIS 的 URL 重写模块加一条规则匹配http且{HTTPS}为 off 时重定向到https://{HTTP_HOST}/{RREQUEST_URI}证书要提前绑定到站点否则跳过去也是证书错误页。4. 防火墙与端口收敛445、23 和 ICMP 的处理顺序任务六看着是“关几个端口”实际上考的是对流量方向和策略顺序的理解。Windows 走高级防火墙入站规则Linux 走 iptables两边都要注意“默认策略”和“规则顺序”这两个隐含前提。4.1 Windows 禁用 445 与 23 端口图形界面在“高级安全 Windows Defender 防火墙 → 入站规则 → 新建规则 → 端口”分别填 445 和 23动作选“阻止”。命令行更省事New-NetFirewallRule -DisplayName Block-SMB-445 -Direction Inbound -Protocol TCP -LocalPort 445 -Action Block New-NetFirewallRule -DisplayName Block-Telnet-23 -Direction Inbound -Protocol TCP -LocalPort 23 -Action Block Get-NetFirewallRule -DisplayName Block-* | Select DisplayName,Enabled,Direction,Action逻辑说明New-NetFirewallRule创建的是入站阻止规则优先级高于允许规则比直接删服务更稳妥。参数说明-Protocol TCP只挡 TCP445 的 UDP 137/138 属于 NetBIOS 另一套题目只要求 445 就按 TCP 处理如果机器上跑着文件共享业务封 445 会直接导致共享不可用动手前先确认业务依赖。4.2 Linux 禁 23 端口与禁 ping# 禁 telnet 23 端口 iptables -A INPUT -p tcp --dport 23 -j DROP # 禁 ping临时 echo 0 /proc/sys/net/ipv4/icmp_echo_ignore_all # 禁 ping永久写 sysctl echo net.ipv4.icmp_echo_ignore_all1 /etc/sysctl.conf sysctl -p # 或用 iptables 丢 ICMP echo-request iptables -A INPUT -p icmp --icmp-type 8 -s 0/0 -j DROP逻辑说明icmp_echo_ignore_all1是内核级开关效果最干净iptables 方式更灵活可以只针对某些源地址放行。参数说明--icmp-type 8就是 echo-request别写成 0那是 echo-reply。这里有个血泪经验——iptables -A是追加到链尾如果前面已有ACCEPT规则后面这条 DROP 根本轮不到执行正确做法是用-I INPUT 1插到最前面或者先iptables -L -n --line-numbers看清现有规则再决定插哪。4.3 只允许 172.16.1.1 访问 SSH# 先放行指定源再拒绝其余顺序不能反 iptables -I INPUT 1 -s 172.16.1.1 -p tcp --dport 22 -j ACCEPT iptables -A INPUT -p tcp --dport 22 -j DROP # 持久化 iptables-save /etc/sysconfig/iptables逻辑说明iptables 从上往下匹配第一条命中即生效所以白名单必须放在拒绝之前。参数说明-I INPUT 1表示插到 INPUT 链第一位持久化命令在不同发行版上不一样CentOS 系用service iptables save或写/etc/sysconfig/iptablesDebian 系用iptables-persistent。改完一定先开一个新终端测试能不能连上再关掉旧会话否则就是自己把自己踢下线的经典事故。5. 避坑与排查这几处“改了不生效”最耗时间这一章单独拎出来是因为上面每一条命令背后几乎都对应一次失败。赛场上时间紧排查靠的是知道先看哪里而不是从头再读一遍配置。现象一改完sshd_config重启服务直接失败SSH 断了。原因多半是配置行重复或语法错sed替换时匹配到了注释行又追加了一条。解决改之前先cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak改完务必sshd -t通过再 restart如果已经断了从控制台进单用户或救援模式回滚备份别急着重装。现象二密码长度设了 16但passwd仍能设 8 位密码。原因是有pam_pwquality在管事login.defs只是默认值。解决检查/etc/security/pwquality.conf的minlen以及/etc/pam.d/system-auth里pam_pwquality.so那行有没有带minlen参数覆盖。现象三Windows 封锁 445 后域内共享和打印全挂。原因是 SMB 不只是“文件共享”域控的组策略下发、打印机连接都走 445。解决先确认机器是否入域入域机器封 445 要同步调整业务路径或者只对来自外网的源地址做阻止内网放行。现象四iptables 规则写了、iptables -L也能看到但端口照样通。原因是规则被追加在已有的ACCEPT之后或者服务本身监听在别的链比如 Docker 会自动插规则到DOCKER链。解决用iptables -L INPUT -n --line-numbers看顺序用iptables -I插到最前有 Docker 的环境还要在DOCKER-USER链里做限制。现象五MySQL 改usermysql后服务启动报权限错误。原因是数据目录和 socket 文件的属主还是 root。解决chown -R mysql:mysql /var/lib/mysql和/var/run/mysqld再看my.cnf里socket、datadir两处路径是否一致。改运行账户这事权限和路径必须一起捋。6. 从加固到取证把模块 B 的取证思路接在加固后面模块 A 是把门关好模块 B 是门已经被撬过之后怎么查——内存取证、流量分析、渗透测试三条线恰好对应“主机层、网络层、攻击面”三个视角。我平时做完加固复测会顺手用模块 B 的方法反向验证一遍加固到底有没有把攻击路径堵死。内存取证那条线核心是拿到镜像后先hashdump提用户哈希再离线破解题目里 6 位密码属于可爆破范围用john配rockyou字典基本几分钟出结果。查浏览器关键词、找挖矿进程的矿池地址靠的是netstat -anp看异常外联再顺着 PID 找进程路径。这部分我一般会加一步把netstat结果和ps aux交叉比对因为有些挖矿程序会伪装进程名单看一个视图容易漏。流量分析这条线更考验过滤器熟练度。Wireshark 里ftp过滤能直接看到USER/PASS明文ftp.request.command能定位登录后执行的第一条命令ftp-data过滤才能抓到真正下载的文件内容。下面这段是我常用的提取思路把 pcap 里的 FTP 控制流和数据流分开看# 只看 FTP 控制通道的命令与响应 tshark -r capture.pcapng -Y ftp -T fields -e frame.time -e ip.src -e ftp.request.command -e ftp.request.arg # 提取 FTP 数据传输内容 tshark -r capture.pcapng -Y ftp-data -T fields -e ftp-data逻辑说明-Y是显示过滤器-T fields -e指定输出字段比在图形界面一条条点开高效得多。参数说明ftp.request.command只对控制通道有效数据通道要用ftp-data如果数据是二进制-e ftp-data输出的是十六进制需要配合-T fields -e data.data再转存还原。渗透测试那条线考点集中在 Nmap 和 MSF 的参数记忆上-oX输出 XML、msfdb init初始化数据库、db_import导入扫描结果、hosts查看已导入主机、search cve-2019-0708找模块。这些命令不难难在环境——Kali 里 PostgreSQL 没起来时msfdb init会失败先systemctl start postgresql再初始化。CVE-2019-0708 那个检测模块跑完回显最后一个单词通常是Vulnerable或Safe题目要的就是这个词。我自己的习惯是每做完一台机器的加固立刻用模块 B 的思路打一遍自己——端口扫一遍看该关的关没关抓一段流量看有没有明文口令跑一次漏洞检测看补丁打没打。从那以后我每次交付加固报告前都强制走一遍“加固 → 自测 → 取证视角复查”这个循环比只看配置文件靠谱得多。这份试题文档的价值也在这里它把两个方向的动作都列全了照着做一遍等于把主机加固和应急响应的主干流程都过了一遍。希望帮到你。本文还有配套的精品资源点击获取
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑