解决局域网默认共享问题
2015-12-03
默认共享是微软为了保证Windows网络正常运行和方便Windows系统管理人员的日常工作而设计的,包括“命名管道”共享IPC$、系统目录Winnt或 Windows共享ADMIN$以及各硬盘逻辑驱动器的共享,如C$、D$等。默认情况下,Windows每次启动默认共享都是开启的状态,并在它们的共享名称最后都有一个“$”符号,作用就是能够在网上邻居中隐藏自己,防止被网络上的攻击者发现继而利用。通过右击“我的电脑→管理”,在“系统工具→共享文件夹→共享”里可以看到计算机当前的默认共享(如图 1)。
图1 脚本执行效果
但除了IPC$是Windows网络尤其是活动目录域正常运行需要的默认共享外,其他默认共享无论对于服务器还是客户端,都属于鸡肋功能基本不用,并且Windows的漏洞层出不穷,且预设的共享名称早已被大家所熟知,这些鸡肋共享成为巨大的安全隐患。因此单位网络的安全策略要求关闭网络上所有计算机除了IPC$外的默认共享。
为满足这个要求,笔者在域控制器的与策略中设置开机脚本,在域中计算机每次启动时执行,自动关闭除了IPC$外的默认共享。执行后效果如图1所示。脚本内容如下:
for %%i in (admin,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) do net share %%i$ /delete
由于不同计算机的硬盘逻辑驱动器数量不同,脚本枚举了所有a到z的逻辑驱动器盘符,以做到封杀不留死角。
故障现象
一直以来脚本的运行效果理想,但近期发现有些网内计算机出现了默认共享没有关闭或部分关闭的情况,且带有不确定性。经检查,客户端计算机启动脚本策略接收都正常,本地手动执行脚本也能正常执行,问题出在哪里呢?
故障排查
经过仔细排查,发现问题计算机的事件日志都存在类似的两条记录,记录中显示该计算机8:02:43Netlogon域登录事件失败,8:02:45网卡完成初始化,也就是说计算机开机时登录域进行验证的时间比网卡初始化完成时间要早2秒钟,域客户端计算机进行域登录验证时也在根据本地生效的域策略执行启动脚本,但由于脚本本身在域控制器上,而此时域客户端和域控制器的网络连接尚未就绪,启动脚本执行失败,关闭默认共享的动作没有执行。
近期网内安装过新的安全软件,估计是该软件影响了某些计算机网卡的初始化速度,导致了问题发生。测试卸载了一台计算机的软件终端,问题果然解决,但安全软件是不能卸的,软件厂商对此问题也说不出个所以然,看来指望他们解决问题是不可能了,只能自己想办法。
故障解决
域中的其他策略根据活动目录域的策略刷新机制每隔一段时间会自动执行,其他启动脚本可以调整为关机脚本满足运行要求,但这个关闭默认共享的脚本在关机时执行没有任何意义,所以必须对脚本内容进行调整,以满足以下要求:
1.保证所有计算机在运行期间有效关闭ADMIN$以及各硬盘逻辑驱动器的默认共享,但不会对计算机IPC$和WSUS服务器的必要默认共享(UpdateServicesPackages、WsusContent、WSUSTemp)产生影响。
2.由于开机脚本的执行已不可靠,脚本需要在关机执行时达到第一条的要求或执行一次就可以一劳永逸地达到第一条的要求。
一般关闭默认共享无外乎三种方法:1.逐一删除共享法;2.禁用Server服务法;3.修改注册表法。方法1和笔者原先采用的方法类似,目前不满足第2条要求;方法2会关闭所有共享,杀伤太大,不满足第1条要求;只能在方法3上做做文章了。
注册表HKEY_LOCAL_MACHINESYSTEMCurrentControlSet ServicesLanmanServerParameters下可以新建两项DWORD类型值AutoShareWks和AutoShareServer分别控制专业版(如WindowsXP)和服务器版(如Windows2003)操作系统的默认共享,值为0代表关闭默认共享,值为1代表打开默认共享。
经过笔者测试(笔者网络环境为服务器Windows 2003 R2企业版 SP2,客户端 Windows XP SP3),这两项值设为0后,服务器和客户端ADMIN$以及各硬盘逻辑驱动器的默认共享都被关闭,而 IPC$以及WSUS服务器的必要默认共享未受影响。此外,修改注册表后,计算机再次开机也不会再打开默认共享了,该方法可以满足第1和第2条要求。下面就是把该方法在网内进行推广设置了。
步骤一:建立两个修改注册表的批处理脚本,对应服务器端和客户端,使得脚本在执行时分别建立修改服务器端和客户端的AutoShareServer和AutoShareWks的值为0的注册表文件并导入注册表中。
服务器端脚本stopSrvShare.bat如下:
rem 通过注册表禁止2003等服务器系统除IPC$外的默认共享,以防重启后再次加载
客户端脚本stopClntShare.bat如下:
rem 通过注册表禁止客户端XP系统等计算机除IPC$外的默认共享,以防重启后再次加载
步骤二:在域控制器中将stopClntShare.bat设置为客户端所在组织单元策略的关机脚本,将stopSrvShare.bat设置为服务器所在组织单元和策略的关机脚本,分别如图2图3所示。
图2 stopSrvShare.bat关机脚本设置
图3 stopClntShare.bat关机脚本设置
进行上述设置后,问题计算机在刷新策略并重新启动计算机后默认共享果然不再出现了,问题圆满解决。
最后再说一下,对于要进一步强化IPC$安全的,可以修改注册表HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlLsa下的restrictanonymous值为1,计算机就不允许匿名用户枚举SAM账号和共享了。
可以在两个脚本中regedit/s c:delshare.reg之前加入以下代码:
这样,强化IPC$安全随脚本同步执行,安全系数又提高了一层。