在上一篇关于数据库备份操作的文章中,简单带入了PowerShell脚本及命令操作,以及两个Windows命令行程序:net和robocopy。
很显然,会写脚本,无论是传统的批处理抑或现代的PowerShell,都是网管运维水平的分水岭,尤其是在网络安全运维领域,这分水岭就越发显得差距巨大。
笔者:国际认证信息系统审计师、软考系统分析师
如果想全面了解Windows操作系统提供的命令行工具,可以在这个地址找到完整的命令清单:
https://learn.microsoft.com/zh-cn/windows-server/administration/windows-commands/windows-commands
本文中介绍的命令都可以在这个清单中找到相应的入口。
在笔者的认识中,这么多命令,具体到网络安全运维上,作为一名网管应该掌握的主要且关键的Windows命令行程序应包括下面这些:
(觉得基础命令无聊的可以直接跳过,看第二部分)
熟悉得不需要介绍,只是为归类而提及。但是需要注意随着Windows操作系统版本变化,ping命令也在不断加强。比如最新版本的ping支持源路由,支持IPV6等等。
pathping知道的人相对较少,该命令提供有关源和目标之间的中间跃点的网络延迟和网络丢失的信息,执行时能返回PING测试过程中路由上每个节点的RTT、发起PING的设备到每一个路由节点的丢包率。
通过pathping给出的路由器或链路的数据包丢失程度,可以确定哪些路由器或子网可能有网络问题。
tracert,也是已经相当熟悉的路由节点分析命令。它和pathping是相似的,但pathping在碰到路由节点不响应icmp包时就会自动中断,而tracert则会按最大跃点数量进行尝试找到路由的最终节点。
ipconfig,也是作为网管不可能不知道的命令。除了显示网络接口信息之外,还支持dhcp和dns相关操作。在网络安全运维上最大的作用在于在脚本中获得网络接口信息作进一步处理使用。
操作路由表,从这个命令开始,不少网管员就开始转向使用Microsoft管理控制台(MMC)或者某些单机网管软件了。但类似route命令这样Windows操作系统内建的命令的优势,就是在于可以把操作记录到命令脚本,实现自动化运维。route命令的主要用途一般在于操作本机的静态(永久)路由。
netstat除了用于观察端口开放状态和对外链接情况外,在网络安全运维中的关键意义最重要在于找出端口被哪个进程占用,具体命令形式是:
netstat -ano
得到和端口对应的进程ID清单后,可以通过进程管理命令tasklist检索进程名称,或者通过taskkill杀掉进程。
另外,通过netstat列出与本地端口连接的远端地址和端口,有经验的网管可以从这些连接信息中判断是否存在可能的恶意情况。
cipher比较小众,使用的场合并不多。该命令主要用途包括加密、解密和复写擦除数据,但需要注意只适用于NTFS文件系统分区的文件。
作为网络安全运维管理员来说,需要明确的是cipher进行的是文件一级的加解密(Encrypting File System,EFS)和数据擦除,这和BitLocker这种对整个分区进行的加解密工具是不同的概念。具体可以参考:
https://learn.microsoft.com/en-us/windows/win32/fileio/file-encryption
一般来说,如果已经对硬盘进行了BitLocker加密,那么除非有足够的理由,比如计算机是多人公用的计算机,否则就没必要再对文件应用EFS加密。
值得注意的是加解密之外的用法,比如擦除硬盘分区上的空闲空间,可以给出如下的参数去使用cipher,该命令不会覆盖已存在的文件:
cipher /w
实在不好定义,姑且叫“复杂操作”。这类命令通常通过大量的参数去灵活使用,实现多种类别的操作系统管理配置操作能集中在一个命令行程序内完成。普遍需要给出多级命令参数,个别还提供了交互式操作控制台。
很多网管员都是通过Windows的各种图形界面功能去实现这些配置工作,但通过掌握这些命令,不仅工作效率能得到提升,而且通过脚本实现运维自动化,更能释放自己。
这两个进程管理的命令,使用起来介乎于基本和复杂之间。tasklist列出当前运行中的进程,taskkill则是杀掉进程。大多数网管员会习惯于通过任务管理器界面去操作进程,但如果需要在脚本中进行这些操作,那就必须使用这两个命令。
在网络安全运维方面值得指出的是,一些特殊的木马程序,会针对任务管理器在UI上做手脚来隐藏自己。但tasklist可以更直接地列出全部进程,这些木马就不容易隐藏自己。
tasklist有比较多的参数,其中一个比较有用的参数是:
tasklist -svc
这个参数可以列出和每个进程相关的服务,这在查找隐藏服务时很有效。
由于输出内容会包括没有服务的进程,所以一般通过管道操作把输出重定向到find命令进行过滤,比如
tasklist /svc | find /v "暂缺"
又如需要给出进程关联的DLL文件时,可以使用
tasklist /m
这功能会列出每个进程所调用的DLL文件。
tasklist命令本身提供了筛选器参数,可以按进程状态、名称、PID、SESSION等进程信息进行筛选过滤。这就是我前面说的这两个命令具有一定复杂性的特征。
如果要杀掉进程,最简单的操作是通过:
taskkill -im 进程名称
taskkill -pid 进程ID
注意taskkill支持批量杀进程操作,既可以通过一次给出多个PID参数的方式,也可以通过筛选器参数实现对进程的条件筛选,把符合筛选条件的进程一次全部杀掉。
必须指出的是这两个命令还可以操作远程计算机。
robocopy在我们上一篇文章 MSSQL数据库自动备份和自动复制转移备份中起到关键作用。这个文件复制命令的功能其实远远不是那么简单,网络上也有大量的参考介绍,比如:
另外,由于robocopy的参数是如此之多,为了方便使用,不少人开发了一些图形界面的外壳工具去调用robocopy,比如:
RoboCop RoboCopy:
https://sourceforge.net/projects/robocoprobocopy/files/RoboCopRoboCopy.exe/download
RoboMirror:
https://sourceforge.net/projects/robomirror/files/RoboMirror/RoboMirror%202.0%20Setup.exe/download
ChoEazyCopy:
https://github.com/Cinchoo/ChoEazyCopy/releases/tag/v2.0.0.1
RoboCopyGUI:
https://www.softpedia.com/get/System/OS-Enhancements/RoboCopy-GUI.shtml
还有好几个。但GUI工具并不是这里要介绍的,而且大部分GUI工具并没有完整实现robocopy的全部功能。但为了充分学习了解robocopy的使用方法,从GUI操作界面开始入手,观感会来得更直接一些。
robocopy的使用重点主要在于同步备份,支持多线程同时复制的特性在合理运用时可以充分利用网络带宽或者压榨存储设备性能,但如果不合理使用,反而会拖慢robocopy的复制效率。
net命令相当有历史了,可以追溯到WINDOWS 95 版本。只要看一眼NET命令的操作参数,就能领会到NET命令的设计目标是打造成为能对操作系统进行全面配置和管理操作的单一命令行程序,所以net命令包括了账号管理、用户组管理、域计算机管理、共享文件管理、登录会话管理、后台服务管理、时间服务管理、用户管理等等。
由于net命令功能多且杂,要在这里详细介绍是不可能的。由于微软也认为net命令过于繁杂已经不应该再被使用而需要重构,因此net命令在微软网站上的介绍已经基本消失,仅剩下若干片言只语,比如:
https://learn.microsoft.com/zh-cn/windows/win32/winsock/net-exe-2
不过,在互联网上还可以搜索到大量关于net命令使用方法的介绍文章,虽然有点零碎散乱,但还是能良好支撑使用net命令的,而且net命令也一直保留直到现在的Windows 11都还提供。下面这个链接文章对net命令进行了详细的介绍,可以保存起来作为参考:
在网络安全运维上,从net命令所能实现的操作,就可以理解到net命令对于编写自动脚本非常有用,而且相比其它功能完整的复杂命令,高度简化隐藏细节的net命令,反而是网管员实现有限度脚本的好帮手。
sc是用来与服务控制管理器和服务进行通信的命令行程序。sc也即Service Control的首字母缩写。
很显然sc的出现就是net start/net stop这两个操作的深度和完整替代。因此,在自动化脚本中按需启动和停止服务,通过sc命令就可以方便地实现。
除了最基础的启动和停止系统服务之外,sc支持大量面向系统服务的配置操作,而且相当多的功能在服务管理控制台中是没有的,比如创建服务、删除服务、设置服务器的安全描述符等等。
但是微软网站上也没有足够详细的介绍文档,只是介绍了config/create/delete/query四个命令参数。或者我以后会专门写一下sc.exe的特殊用法。
reg是注册表编辑器的命令行版本。作为网络安全运维的管理员,在掌握注册表编辑器之余,也应该熟悉reg命令,这样就可以在自动化脚本中操作注册表了。
值得一提的是reg命令也具有一些注册表编辑器所不具备的功能,典型如:
reg compare 比较指定的注册表子项或条目。
reg copy 将注册表项复制到本地或远程计算机上的指定位置。
reg restore/save 将保存的子项和项写入注册表/在指定的文件中保存指定子项、项和注册表值的副本。
注意restore/save操作与注册表导出/导入注册表文件、加载/卸载配置单元是不同的。
netsh是功能强大的Windows网络组件配置安装的命令行工具。前述的清单中对netsh的介绍内容太少。但好在netsh是当前推荐使用的工具,所以在微软网站上有比较详细的文档,比如:
https://learn.microsoft.com/zh-cn/windows/win32/winsock/netsh-exe
https://learn.microsoft.com/zh-cn/windows-server/networking/technologies/netsh/netsh
以及一些旧版本Windows服务器的文档都有介绍:
netsh是从Windows 2008 Server版本开始引入的,其作用是实现操作网络配置的交互式命令行界面,这类似于企业级可网管的交换机、路由器之类的网络设备的命令行操作。
通过netsh,可以安装Windows操作系统内的各种网络通信服务器角色和组件、配置和显示它们的状态,典型如配置网络访问保护(NAP)客户端和动态主机配置协议(DHCP)客户端等。
基本上,netsh命令提供了每个服务器角色或组件使用Microsoft管理控制台(MMC)管理单元时相同的功能。
此外,netsh命令还有大量操作功能是在MMC管理控制台中没有提供的,比如配置IPv6、配置网桥、配置远程过程调用(RPC)等。
查询和设置用户账户审计策略的命令行工具。在网络安全中,审计的要求和作用对于网络安全运维管理员来说已经是耳熟能详。通过auditpol,可以实现和“本地安全策略”管理控制台中的“账户策略”的相关设置,包括有:
设置并查询系统审核策略。
设置并查询每个用户的审核策略。
设置和查询审核选项。
设置并查询用于委托访问审计策略的安全描述符。
将审核策略报告或备份到以逗号分隔的值(CSV)文本文件中。
从CSV文本文件中加载审核策略。
配置全局资源SACL。
auditpol命令比较方便的一个参数功能是backup,可以把系统审核策略设置、所有用户的按用户审核策略设置以及所有审核选项备份到 CSV 格式文件中。
小结
Windows还有很多命令行工具,这里介绍只是我认为比较有用和常用的,好像写了很多,又好像没写什么,就已经4千字了,总之三言两语就只能带个入门而已。
还有一些其它的命令行工具,比如mpcmdrun.exe,可以配置和管理Microsoft Defender,都是值得关注的。
本站微信订阅号:
本页网址二维码: