1. 局域网实现原理
在了解共享之前,我们需要对局域网的概念有个了解,局域网并不同于外界通讯使用的TCP/IP协议体系,它是一种建立在传统以太网(Ethernet)结构上的网络分布,除了使用TCP/IP协议,它还涉及许多协议。
在局域网里,计算机要查找彼此并不是通过IP进行的,而是通过网卡MAC地址,它是一组在生产时就固化的唯一标识号,根据协议规范,当一台计算机要查找另一台计算机时,它必须把目标计算机的IP通过ARP协议(地址解析协议)在物理网络中广播出去,“广播”是一种让任意一台计算机都能收到数据的数据发送方式,计算机收到数据后就会判断这条信息是不是发给自己的,如果是,就会返回应答,在这里,它会返回自身地址。当源计算机收到有效的回应时,它就得知了目标计算机的MAC地址并把结果保存在系统的地址缓冲池里,下次传输数据时就不需要再次发送广播了,这个地址缓冲池会定时刷新重建,以免造成数据冗余现象。实际上,共享协议规定局域网内的每台启用了文件及打印机共享服务的计算机在启动的时候必须主动向所处网段广播自己的IP和对应的MAC地址,然后由某台计算机(通常是局域网内某个工作组里第一台启动的计算机)承担接收并保存这些数据的角色,这台计算机就被称为“浏览主控服务器”,它是工作组里极为重要的计算机,负责维护本工作组中的浏览列表及指定其他工作组的主控服务器列表,为本工作组的其他计算机和其他来访本工作组的计算机提供浏览服务,它的标识是含有\_MSBROWSE_名字段。这就是我们能在网络邻居看到其他计算机的来由,它实际上是一个浏览列表,用户可以使用“nbtstat -r”来查看在浏览主控服务器上声明了自己的NetBIOS名称列表。
浏览列表记录了整个局域网内开启的计算机的资源描述,当我们要访问另一台计算机的共享资源时,系统实际上是通过发送广播查询浏览主控服务器,然后由浏览主控服务器提供的浏览列表来“发现”目标计算机的共享资源的。
但是仅知道彼此的地址还不够,计算机之间必须建立一条连接的数据链路才能正常工作,这就需要另一个基本协议来进行了。NetBIOS(网络基本输入输出系统)协议是IBM开发的用于给局域网提供网络以及其他特殊功能的命令集,几乎每个局域网都必须在这种协议上面进行工作,NetBIOS相当于Intranet上的TCP/IP协议。而后推出的NetBEUI协议(NetBIOS用户扩展接口协议)则是对前者进行了功能扩充,这几个协议都是组成局域网的基本必备,最后,为了建立连接,局域网还需要TCP/IP协议。
2. Windows下的局域网共享
Windows系统对于局域网内机算机的身份和权限验证是在一个被称为“IPC”(命名管道)的组件技术上实现的,它实质上是Windows为了方便管理员从远方登录管理计算机而设置的,在局域网里它也负责文件的共享和传输,所以它是Windows局域网不可缺的基础组件。
默认情况下,局域网之间的共享服务通过来宾帐户“Guest”的身份进行,这个帐户在Windows系统里权限最少,为方便阻止来访者越权访问提供了基础,同时它也是资源共享能正常进行的最小要求,任何一台要提供局域网共享服务的计算机都必须开放来宾帐户,命令是“net user guest /active:yes”。
除了使用IPC作为身份验证,系统还使用SMB(Server Message Block)协议用来做文件共享,这个协议与共享存在很大联系,稍后我们将会讲到。
二. 局域网共享的实现
虽然我们可以把局域网定义为“一定数量的计算机通过互连设备连接构成的网络”,但是仅仅使用网卡让计算机构成一个物理连接的网络还不能实现真正意义的局域网,它还需要进行一定的协议设置,才能实现资源共享。
首先,同一个局域网内的计算机IP地址应该是分布在相同网段里的,虽然以太网最终的地址形式为网卡MAC地址,但是提供给用户层次的始终是相对好记忆的IP地址形式,而且系统交互接口和网络工具都通过IP来寻找计算机,因此为计算机配置一个符合要求的IP是必须的,这是计算机查找彼此的基础,除非你是在DHCP环境里,因为这个环境的IP地址是通过服务器自动分配的。
其次,要为局域网内的机器添加“交流语言”——局域网协议,包括最基本的NetBIOS协议和NetBEUI协议,然后还要确认“Microsoft 网络的文件和打印机共享”已经安装并为选中状态,然后,还要确保系统安装了“Microsoft 网络客户端”,而且仅仅有这个客户端,否则很容易导致各种奇怪的网络故障发生。
然后,用户必须为计算机指定至少一个共享资源,如某个目录、磁盘或打印机等,完成了这些工作,计算机才能正常实现局域网资源共享的功能。
最后,计算机必须开启139、445这两个端口的其中一个,它们被用作NetBIOS会话连接,而且是SMB协议依赖的端口,如果这两个端口被阻止,对方计算机访问共享的请求就无法回应。
但是并非所有用户都能很顺利的享受到局域网资源共享带来的便利,由于操作系统环境配置、协议文件受损、某些软件修改等因素,时常会令局域网共享出现各种各样的问题,如果你是网络管理员,就必须学习如何分析排除大部分常见的局域网共享故障了。
三. 局域网共享故障的分析与排除
IPC、Server服务与共享故障
临近毕业了,学生小王找了一家平面设计公司作为实习单位,这天办公室有同事急匆匆找网络部索要杀毒软件,但不凑巧管理员外出未归,小王为人比较热心,虽然自己不是学网络专业的,可是想想也略懂皮毛,就自告奋勇去帮忙了,幸好只是个小病毒,他轻易就解决了,在同事的夸奖下,小王心血来潮顺便给她做了系统优化。
可是才过十几分钟,那个同事又出来找网络部了,她说自己的机器被小王摆弄后无法打开别人计算机的共享了,这下,小王第一次明白了什么叫好心的后果……
我在前面说起Windows的局域网共享时,提到了IPC(Internet Process Connection),IPC是NT以上的系统为了让进程间通信而开放的命名管道,可以通过验证用户名和密码获得相应的权限,在远程管理计算机和查看计算机的共享资源时使用,微软把它用于局域网功能的实现,如果它被关闭,计算机就会出现“无法访问网络邻居”的故障。
在Windows NT以后的系统里,IPC是依赖于Server服务运行的,一些习惯了单机环境的用户可能会关闭这个服务,这样的后果就是系统将无法提供与局域网有关的操作,用户无法查看别人的计算机,也无法为自己发布任何共享。
要确认IPC和Server服务是否正常,可以在命令提示符里输入命令net share,如果Server服务未开启,系统会提示“没有启动 Server 服务。是否可以启动? (Y/N) [Y]:”,回车即可以启动Server服务。如果Server服务已开启,系统会列出当前的所有共享资源列表,其中至少要有名为“IPC$”的共享,否则用户依然无法正常使用共享资源。
除了Server服务以外,还有两个服务会对共享造成影响,分别是“Computer Browser”和“TCP/IP NetBIOS Helper Service”,前者用于保存和交换局域网内计算机的NetBIOS名称和共享资源列表,当一个程序需要访问另一台计算机的共享资源时,它会从这个列表里查询目标计算机,一旦该服务被禁止,IPC就认定当前没有可供访问的共享资源,用户自然就没法访问其他计算机的共享资源了;后者主要用于在TCP/IP上传输的NetBIOS协议(NetBT)和NetBIOS名称解析工作,NetBT协议为跨网段实现NetBIOS命令传输提供了载体,正因如此,早期的黑客入侵教材里“关于139端口的远程入侵”才能实现,因为NetBIOS协议被TCP封装起来通过Internet传输到对方机器里处理了,同样对方也是用相同途径实现数据传输的,否则黑客们根本无法跨网段使用网络资源映射指令“net use”。对于本地局域网来说,NetBT是SMB协议依赖的传输媒体,也是相当重要的。
如果这两个服务异常终止,局域网内的共享可能就无法正常使用,这时候我们可以通过执行程序“services.msc”打开服务管理器,在里面查找“Computer Browser”和“TCP/IP NetBIOS Helper Service”服务并点击“启动”即可。
系统安全策略与共享故障
熟悉Windows系统的用户或多或少都会接触到“组策略”(gpedit.msc),这里实际上是提供了一个比手工修改注册表更直观的操作方法来设置系统的一些功能和用户权限,但是这里的设置失误也会影响到局域网共享资源的使用。
由于IPC本身就是用于身份验证的,因此它对计算机账户的配置特别敏感,而组策略里偏偏就有很多方面的设置是针对计算机账户的,其中影响最大的要数“计算机配置 – Windows配置 – 安全设置 – 本地策略 – 用户权利指派”里的“拒绝从网络访问这台计算机”,在Windows 2000系统里默认是不做任何限制的,可是自从XP出现后,这个部分就默认多了两个帐户,一个是用于远程协助(也就是被简化过的终端服务)身份登录的3389用户名,另一个则是我们局域网共享的基本成员guest!
许多使用XP系统的用户无法正常开启共享资源的访问权限,正是这个项目的限制,解决方法也很容易,只要从列表里移除“Guest”帐户就可以了。
除了与帐户相关的策略,这里还有几个与NetBIOS和IPC相关的组策略设置,它们是位于“计算机配置 – Windows配置 – 安全设置 – 本地策略 – 安全选项”里的“对匿名连接的额外限制”(默认为“无”),对于XP以上的系统,这里还有“不允许SAM账户和共享的匿名枚举”(默认为“已停用”)、“本地账户的共享和安全模式”(默认为“仅来宾”),其中“对匿名连接的额外限制”的设置是可以直接扼杀共享功能的,当它被设置为“不允许枚举”时,其他计算机就无法获取共享资源列表,如果它被设置为“没有显式匿名权限就无法访问”的话,这台计算机就与共享功能彻底告别了,所以有时候实在找不出故障,不妨检查一下该项目。
权限与共享的冲突
如今的局域网普遍建立在Windows 2000以上的系统架构上运行,而且IPC的作用本来就是为了提供身份验证,因而共享始终离不开权限的影子,何况如果系统不会把文件共享的访问身份设置为最小权限的来宾帐户的话,别有用心的访问者就能轻易夺取管理员级别了。但是也正因为这样,一些时候权限反而会成为阻挠共享顺利进行的罪魁祸首。
QUOTE
知识回顾:权限的由来
对计算机来说,系统执行的代码可能会对它造成危害,因此处理器产生了Ring的概念,把“裸露在外”的一部分用于人机交互的操作界面限制起来,避免它一时头脑发热发出有害指令;而对于操作界面部分而言,用户的每一步操作仍然有可能伤害到它自己和底层系统——尽管它自身已经被禁止执行许多有害代码,但是一些不能禁止的功能却依然在对这层安全体系作出威胁,例如格式化操作、删除修改文件等,这些操作在计算机看来,只是“不严重”的磁盘文件处理功能,然而它忽略了一点,操作系统自身就是驻留在磁盘介质上的文件!因此,为了保护自己,操作系统需要在Ring 3笼子限制的操作界面基础上,再产生一个专门用来限制用户的栅栏,这就是现在我们要讨论的权限,它是为限制用户而存在的,而且限制对每个用户并不是一样的。
细心的用户如果点击了共享资源属性里的“权限”界面,可能会发现系统已经自动给这里添加了“Everyone”权限,这是个特殊权限,它的存在是为了让用户能访问被标记为“公有”的文件,这也是一些程序正常运行需要的访问权限,任何人都能正常访问被赋予“Everyone”权限的文件,包括来宾组成员。
但是有时候这个理论会因某种原因而产生混乱,进而导致来宾组成员丧失了访问权限,这时候,用户只能手工为它添加一个“guest”的访问权限了。在一些系统上,甚至要添加“Users”或“Administrators”权限才能实现文件共享,但是对于这种权限指派已经严重混乱的系统,我建议还是重新安装一个算了。
对于Windows XP系统,它默认是仅仅给共享显示一个简单的界面而已,如果你要自定义更多东西,就必须进入“控制面板”的“文件夹选项”里,取消“使用简单文件共享”的勾,而且这里还涉及到NTFS分区“安全”页设置的显示。
随着Windows XP的逐步推进以及安全概念的推广,越来越多用户开始使用NTFS格式作为自己的硬盘分区,这样就在IPC的用户身份验证模式上又增加了一种权限限制:NTFS权限。
QUOTE
知识回顾:什么是NTFS
NTFS(New Technology File System)是一个特别为网络和磁盘配额、文件加密等管理安全特性设计的磁盘格式,只有使用NT技术的系统对它直接提供支持,也就是说,如果系统崩溃了,用户将无法使用外面流行的普通光盘启动工具修复系统,因此,是使用传统的FAT32还是NTFS,一直是个倍受争议的话题,但如果用户要使用完全的系统权限功能,或者要安装作为服务器使用,建议最好还是使用NTFS分区格式。
与FAT32分区相比,NTFS分区多了一个“安全”特性,在里面,用户可以进一步设置相关的文件访问权限,而且前面提到的相关用户组指派的文件权限也只有在NTFS格式分区上才能体现出来。
一些刚接触NTFS分区的用户经常会发现,自己机器的共享和来宾帐户都开了,但是别人无论怎么访问都提示“权限不足”,即使给共享权限里添加了来宾帐户甚至管理员帐户也无效,这是为什么?归根究底还是因为在NTFS这部分被拦截了,用户必须理清一个概念,那就是如果你对某个共享目录的访问权限做了什么设置,例如添加删除访问成员,其相应的NTFS权限成员也要做出相应的修改,即共享权限成员和NTFS权限成员必须一致或者为“Everyone”成员,在XP/2003系统里出于安全因素,文件夹时常会缺少Everyone权限,因此,即使你的共享权限里设置了Everyone或Guest,它仍然会被NTFS权限因素阻止访问;如果NTFS权限成员里有共享权限成员的存在,那么访问的权限就在共享权限里匹配,例如一个目录的共享权限里打开了Everyone只读访问权限,那么即使在NTFS权限里设置了Everyone的完全控制权限,通过共享途径访问的用户依然只有“只读”的权限,但是如果在NTFS权限成员或共享权限成员里缺少Everyone的话,这个目录就无法被访问了。因此要获得正常的访问权限,除了做好共享目录的权限设置工作以外,还在共享目录上单击右键---属性----安全,在里面添加Guest和Everyone权限并设置相应的访问规则(完全控制、可修改、可读取等),如果没有其他故障因素,你就会发现共享正常开启访问了。
防火墙与共享的矛盾
现在基本上已经没有一台计算机是不曾安装网络防火墙和病毒防火墙的了,可是用户在众多的墙里享受安全特性的时候,偶尔也会发现局域网共享莫名其妙的失败了,如果用户留意到防火墙正在闪烁的报警状态,也许会发现日志上记录着“计算机x.x.x.x 试图访问本机139 – NetBIOS端口,该操作已被拦截”,这是为什么?因为防火墙把NetBIOS的通讯给拦截掉了,别忘记NetBIOS可是局域网通讯的基础。防火墙此举是为了阻止前面提到的利用NetBT进行的“139入侵”模式攻击,虽然防火墙规则里可能写着“允许局域网资源共享”,但是可能这条规则没被选中,或者防火墙没能认出这是一个局域网。
知道了缘由,解决起来也就容易多了,对于有原配规则设置的防火墙,只要勾上“允许局域网资源共享”,就能让NetBIOS协议正常通讯了,如果没有,就自己建立一个规则:协议方向为“入”,协议选择“TCP”,端口范围134—139,标志位“SYN”,满足时的规则为“通行”即可。一些XP系统内置的Windows防火墙ICF往往会掐了自家共享的脖子,如果是这样,就把它关掉,因为ICF始终比不过专门的防火墙,更别指望靠它抵挡一切入侵了。
特殊的共享故障
在一小部分机器里,网络共享是艰难的,它们怎么做也看不到对方的计算机和资源列表,但是使用一些局域网管理工具如LANExplorer、LANetAdmin等却能看到一切,对于这种计算机,只能通过直接输入资源名称或把对方共享资源通过net use命令给映射过来作为虚拟盘符才能工作,对于这种机器,它实际上并没有故障,只是对方通过某种手段阻止了计算机向浏览主控服务器通报自己的共享资源,让整个局域网里的浏览列表缺少对着台计算机的描述,也就无法在网络邻居里发现它了。
另一种情况是大家都能看到网络邻居里的计算机,但某台计算机的网络邻居里却是空的,而且它也无法通过输入UNC地址(即前面提到的共享资源,它是用“\计算机资源”的格式表达的)来访问到对方计算机,用户会收到一个错误提示“找不到网络路径”,这种就是真正的故障了,一般是因为计算机没有正常获得浏览列表所导致,某种原因让它无法获得浏览主控服务器返回的数据,我们可以先尝试使用“nbtstat -R”清空本机的浏览列表缓存试试看,或者运行“net stop browser && net stop LmHosts && net stop Server && net start Server && net start LmHosts && net start browser”命令集来重新启动几个与文件共享相关的服务,不过建议已经成为浏览主控服务器身份的计算机不要轻易执行这个命令,因为它可能会让你丧失在该工作组里的主控身份,因为当一个网络里的浏览主控服务器停止运行时,同一工作组里的某台计算机会变为浏览主控服务器,这个过程被称为“浏览主控服务器重选”,目的是为了保持工作组共享资源的正常访问,但是如果不幸这个浏览列表被安排在一台故障机器上,整个工作组可能就无法正常进行共享访问了。如果经历这些步骤还是无法查看网络邻居,可以试试看修改“TCP/IP协议属性-高级-WINS”里的“启用TCP/IP上的NetBIOS”,最后可以尝试删除“Microsoft 网络的文件和打印机共享”和“Microsoft 网络客户端”再重新添加一次。
四. 共享与安全
也许,只要是有开放互连的地方,就会有无法逃脱安全问题的难堪,共享更是不例外,许多用户根本不知道,默认情况下系统就已经为你开了一个庞大的后门供人来品尝,而这个后门的官方名称就是“默认共享”——系统会自动为用户开放以每个盘符进行命名的隐藏共享“盘符$”,虽然网络邻居里看不出来,但是有经验的用户都知道那是什么一回事了,只需使用“\IP盘符$”的格式便完成了资源的访问操作。而另一个被称为“默认管理共享”(ADMIN$)的共享,更是提供了一系列强大的网络指令,甚至包括关机命令。你也许会说,这不正符合微软的构思“远程管理”吗?话虽如此,但是对于一个只有来宾帐户身份标识的共享来说,它能判断出谁是主人吗?
因此,稍有经验的用户对这两个共享都是深恶痛绝的,幸好系统提供了永久关闭它的方法:运行regedit开启注册表编辑器,找到“HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServiceslanmanserverparameters”分支,添加名为“AutoShareServer”和“AutoSharewks”的DWORD类型值,均设为0,重启计算机就会发现仅仅剩下一个维持共享功能的IPC$了。
除了这里,共享还为我们带来了“计划任务”的潜在危害,即通过IPC$,入侵者可以设定机器在一个固定的时间里执行某种操作,这实际上是通过“计划任务”实现的,而“计划任务”的实体为“Task Scheduler”服务项,赶快进services.msc里禁止掉它。
在了解共享之前,我们需要对局域网的概念有个了解,局域网并不同于外界通讯使用的TCP/IP协议体系,它是一种建立在传统以太网(Ethernet)结构上的网络分布,除了使用TCP/IP协议,它还涉及许多协议。
在局域网里,计算机要查找彼此并不是通过IP进行的,而是通过网卡MAC地址,它是一组在生产时就固化的唯一标识号,根据协议规范,当一台计算机要查找另一台计算机时,它必须把目标计算机的IP通过ARP协议(地址解析协议)在物理网络中广播出去,“广播”是一种让任意一台计算机都能收到数据的数据发送方式,计算机收到数据后就会判断这条信息是不是发给自己的,如果是,就会返回应答,在这里,它会返回自身地址。当源计算机收到有效的回应时,它就得知了目标计算机的MAC地址并把结果保存在系统的地址缓冲池里,下次传输数据时就不需要再次发送广播了,这个地址缓冲池会定时刷新重建,以免造成数据冗余现象。实际上,共享协议规定局域网内的每台启用了文件及打印机共享服务的计算机在启动的时候必须主动向所处网段广播自己的IP和对应的MAC地址,然后由某台计算机(通常是局域网内某个工作组里第一台启动的计算机)承担接收并保存这些数据的角色,这台计算机就被称为“浏览主控服务器”,它是工作组里极为重要的计算机,负责维护本工作组中的浏览列表及指定其他工作组的主控服务器列表,为本工作组的其他计算机和其他来访本工作组的计算机提供浏览服务,它的标识是含有\_MSBROWSE_名字段。这就是我们能在网络邻居看到其他计算机的来由,它实际上是一个浏览列表,用户可以使用“nbtstat -r”来查看在浏览主控服务器上声明了自己的NetBIOS名称列表。
浏览列表记录了整个局域网内开启的计算机的资源描述,当我们要访问另一台计算机的共享资源时,系统实际上是通过发送广播查询浏览主控服务器,然后由浏览主控服务器提供的浏览列表来“发现”目标计算机的共享资源的。
但是仅知道彼此的地址还不够,计算机之间必须建立一条连接的数据链路才能正常工作,这就需要另一个基本协议来进行了。NetBIOS(网络基本输入输出系统)协议是IBM开发的用于给局域网提供网络以及其他特殊功能的命令集,几乎每个局域网都必须在这种协议上面进行工作,NetBIOS相当于Intranet上的TCP/IP协议。而后推出的NetBEUI协议(NetBIOS用户扩展接口协议)则是对前者进行了功能扩充,这几个协议都是组成局域网的基本必备,最后,为了建立连接,局域网还需要TCP/IP协议。
2. Windows下的局域网共享
Windows系统对于局域网内机算机的身份和权限验证是在一个被称为“IPC”(命名管道)的组件技术上实现的,它实质上是Windows为了方便管理员从远方登录管理计算机而设置的,在局域网里它也负责文件的共享和传输,所以它是Windows局域网不可缺的基础组件。
默认情况下,局域网之间的共享服务通过来宾帐户“Guest”的身份进行,这个帐户在Windows系统里权限最少,为方便阻止来访者越权访问提供了基础,同时它也是资源共享能正常进行的最小要求,任何一台要提供局域网共享服务的计算机都必须开放来宾帐户,命令是“net user guest /active:yes”。
除了使用IPC作为身份验证,系统还使用SMB(Server Message Block)协议用来做文件共享,这个协议与共享存在很大联系,稍后我们将会讲到。
二. 局域网共享的实现
虽然我们可以把局域网定义为“一定数量的计算机通过互连设备连接构成的网络”,但是仅仅使用网卡让计算机构成一个物理连接的网络还不能实现真正意义的局域网,它还需要进行一定的协议设置,才能实现资源共享。
首先,同一个局域网内的计算机IP地址应该是分布在相同网段里的,虽然以太网最终的地址形式为网卡MAC地址,但是提供给用户层次的始终是相对好记忆的IP地址形式,而且系统交互接口和网络工具都通过IP来寻找计算机,因此为计算机配置一个符合要求的IP是必须的,这是计算机查找彼此的基础,除非你是在DHCP环境里,因为这个环境的IP地址是通过服务器自动分配的。
其次,要为局域网内的机器添加“交流语言”——局域网协议,包括最基本的NetBIOS协议和NetBEUI协议,然后还要确认“Microsoft 网络的文件和打印机共享”已经安装并为选中状态,然后,还要确保系统安装了“Microsoft 网络客户端”,而且仅仅有这个客户端,否则很容易导致各种奇怪的网络故障发生。
然后,用户必须为计算机指定至少一个共享资源,如某个目录、磁盘或打印机等,完成了这些工作,计算机才能正常实现局域网资源共享的功能。
最后,计算机必须开启139、445这两个端口的其中一个,它们被用作NetBIOS会话连接,而且是SMB协议依赖的端口,如果这两个端口被阻止,对方计算机访问共享的请求就无法回应。
但是并非所有用户都能很顺利的享受到局域网资源共享带来的便利,由于操作系统环境配置、协议文件受损、某些软件修改等因素,时常会令局域网共享出现各种各样的问题,如果你是网络管理员,就必须学习如何分析排除大部分常见的局域网共享故障了。
三. 局域网共享故障的分析与排除
IPC、Server服务与共享故障
临近毕业了,学生小王找了一家平面设计公司作为实习单位,这天办公室有同事急匆匆找网络部索要杀毒软件,但不凑巧管理员外出未归,小王为人比较热心,虽然自己不是学网络专业的,可是想想也略懂皮毛,就自告奋勇去帮忙了,幸好只是个小病毒,他轻易就解决了,在同事的夸奖下,小王心血来潮顺便给她做了系统优化。
可是才过十几分钟,那个同事又出来找网络部了,她说自己的机器被小王摆弄后无法打开别人计算机的共享了,这下,小王第一次明白了什么叫好心的后果……
我在前面说起Windows的局域网共享时,提到了IPC(Internet Process Connection),IPC是NT以上的系统为了让进程间通信而开放的命名管道,可以通过验证用户名和密码获得相应的权限,在远程管理计算机和查看计算机的共享资源时使用,微软把它用于局域网功能的实现,如果它被关闭,计算机就会出现“无法访问网络邻居”的故障。
在Windows NT以后的系统里,IPC是依赖于Server服务运行的,一些习惯了单机环境的用户可能会关闭这个服务,这样的后果就是系统将无法提供与局域网有关的操作,用户无法查看别人的计算机,也无法为自己发布任何共享。
要确认IPC和Server服务是否正常,可以在命令提示符里输入命令net share,如果Server服务未开启,系统会提示“没有启动 Server 服务。是否可以启动? (Y/N) [Y]:”,回车即可以启动Server服务。如果Server服务已开启,系统会列出当前的所有共享资源列表,其中至少要有名为“IPC$”的共享,否则用户依然无法正常使用共享资源。
除了Server服务以外,还有两个服务会对共享造成影响,分别是“Computer Browser”和“TCP/IP NetBIOS Helper Service”,前者用于保存和交换局域网内计算机的NetBIOS名称和共享资源列表,当一个程序需要访问另一台计算机的共享资源时,它会从这个列表里查询目标计算机,一旦该服务被禁止,IPC就认定当前没有可供访问的共享资源,用户自然就没法访问其他计算机的共享资源了;后者主要用于在TCP/IP上传输的NetBIOS协议(NetBT)和NetBIOS名称解析工作,NetBT协议为跨网段实现NetBIOS命令传输提供了载体,正因如此,早期的黑客入侵教材里“关于139端口的远程入侵”才能实现,因为NetBIOS协议被TCP封装起来通过Internet传输到对方机器里处理了,同样对方也是用相同途径实现数据传输的,否则黑客们根本无法跨网段使用网络资源映射指令“net use”。对于本地局域网来说,NetBT是SMB协议依赖的传输媒体,也是相当重要的。
如果这两个服务异常终止,局域网内的共享可能就无法正常使用,这时候我们可以通过执行程序“services.msc”打开服务管理器,在里面查找“Computer Browser”和“TCP/IP NetBIOS Helper Service”服务并点击“启动”即可。
系统安全策略与共享故障
熟悉Windows系统的用户或多或少都会接触到“组策略”(gpedit.msc),这里实际上是提供了一个比手工修改注册表更直观的操作方法来设置系统的一些功能和用户权限,但是这里的设置失误也会影响到局域网共享资源的使用。
由于IPC本身就是用于身份验证的,因此它对计算机账户的配置特别敏感,而组策略里偏偏就有很多方面的设置是针对计算机账户的,其中影响最大的要数“计算机配置 – Windows配置 – 安全设置 – 本地策略 – 用户权利指派”里的“拒绝从网络访问这台计算机”,在Windows 2000系统里默认是不做任何限制的,可是自从XP出现后,这个部分就默认多了两个帐户,一个是用于远程协助(也就是被简化过的终端服务)身份登录的3389用户名,另一个则是我们局域网共享的基本成员guest!
许多使用XP系统的用户无法正常开启共享资源的访问权限,正是这个项目的限制,解决方法也很容易,只要从列表里移除“Guest”帐户就可以了。
除了与帐户相关的策略,这里还有几个与NetBIOS和IPC相关的组策略设置,它们是位于“计算机配置 – Windows配置 – 安全设置 – 本地策略 – 安全选项”里的“对匿名连接的额外限制”(默认为“无”),对于XP以上的系统,这里还有“不允许SAM账户和共享的匿名枚举”(默认为“已停用”)、“本地账户的共享和安全模式”(默认为“仅来宾”),其中“对匿名连接的额外限制”的设置是可以直接扼杀共享功能的,当它被设置为“不允许枚举”时,其他计算机就无法获取共享资源列表,如果它被设置为“没有显式匿名权限就无法访问”的话,这台计算机就与共享功能彻底告别了,所以有时候实在找不出故障,不妨检查一下该项目。
权限与共享的冲突
如今的局域网普遍建立在Windows 2000以上的系统架构上运行,而且IPC的作用本来就是为了提供身份验证,因而共享始终离不开权限的影子,何况如果系统不会把文件共享的访问身份设置为最小权限的来宾帐户的话,别有用心的访问者就能轻易夺取管理员级别了。但是也正因为这样,一些时候权限反而会成为阻挠共享顺利进行的罪魁祸首。
QUOTE
知识回顾:权限的由来
对计算机来说,系统执行的代码可能会对它造成危害,因此处理器产生了Ring的概念,把“裸露在外”的一部分用于人机交互的操作界面限制起来,避免它一时头脑发热发出有害指令;而对于操作界面部分而言,用户的每一步操作仍然有可能伤害到它自己和底层系统——尽管它自身已经被禁止执行许多有害代码,但是一些不能禁止的功能却依然在对这层安全体系作出威胁,例如格式化操作、删除修改文件等,这些操作在计算机看来,只是“不严重”的磁盘文件处理功能,然而它忽略了一点,操作系统自身就是驻留在磁盘介质上的文件!因此,为了保护自己,操作系统需要在Ring 3笼子限制的操作界面基础上,再产生一个专门用来限制用户的栅栏,这就是现在我们要讨论的权限,它是为限制用户而存在的,而且限制对每个用户并不是一样的。
细心的用户如果点击了共享资源属性里的“权限”界面,可能会发现系统已经自动给这里添加了“Everyone”权限,这是个特殊权限,它的存在是为了让用户能访问被标记为“公有”的文件,这也是一些程序正常运行需要的访问权限,任何人都能正常访问被赋予“Everyone”权限的文件,包括来宾组成员。
但是有时候这个理论会因某种原因而产生混乱,进而导致来宾组成员丧失了访问权限,这时候,用户只能手工为它添加一个“guest”的访问权限了。在一些系统上,甚至要添加“Users”或“Administrators”权限才能实现文件共享,但是对于这种权限指派已经严重混乱的系统,我建议还是重新安装一个算了。
对于Windows XP系统,它默认是仅仅给共享显示一个简单的界面而已,如果你要自定义更多东西,就必须进入“控制面板”的“文件夹选项”里,取消“使用简单文件共享”的勾,而且这里还涉及到NTFS分区“安全”页设置的显示。
随着Windows XP的逐步推进以及安全概念的推广,越来越多用户开始使用NTFS格式作为自己的硬盘分区,这样就在IPC的用户身份验证模式上又增加了一种权限限制:NTFS权限。
QUOTE
知识回顾:什么是NTFS
NTFS(New Technology File System)是一个特别为网络和磁盘配额、文件加密等管理安全特性设计的磁盘格式,只有使用NT技术的系统对它直接提供支持,也就是说,如果系统崩溃了,用户将无法使用外面流行的普通光盘启动工具修复系统,因此,是使用传统的FAT32还是NTFS,一直是个倍受争议的话题,但如果用户要使用完全的系统权限功能,或者要安装作为服务器使用,建议最好还是使用NTFS分区格式。
与FAT32分区相比,NTFS分区多了一个“安全”特性,在里面,用户可以进一步设置相关的文件访问权限,而且前面提到的相关用户组指派的文件权限也只有在NTFS格式分区上才能体现出来。
一些刚接触NTFS分区的用户经常会发现,自己机器的共享和来宾帐户都开了,但是别人无论怎么访问都提示“权限不足”,即使给共享权限里添加了来宾帐户甚至管理员帐户也无效,这是为什么?归根究底还是因为在NTFS这部分被拦截了,用户必须理清一个概念,那就是如果你对某个共享目录的访问权限做了什么设置,例如添加删除访问成员,其相应的NTFS权限成员也要做出相应的修改,即共享权限成员和NTFS权限成员必须一致或者为“Everyone”成员,在XP/2003系统里出于安全因素,文件夹时常会缺少Everyone权限,因此,即使你的共享权限里设置了Everyone或Guest,它仍然会被NTFS权限因素阻止访问;如果NTFS权限成员里有共享权限成员的存在,那么访问的权限就在共享权限里匹配,例如一个目录的共享权限里打开了Everyone只读访问权限,那么即使在NTFS权限里设置了Everyone的完全控制权限,通过共享途径访问的用户依然只有“只读”的权限,但是如果在NTFS权限成员或共享权限成员里缺少Everyone的话,这个目录就无法被访问了。因此要获得正常的访问权限,除了做好共享目录的权限设置工作以外,还在共享目录上单击右键---属性----安全,在里面添加Guest和Everyone权限并设置相应的访问规则(完全控制、可修改、可读取等),如果没有其他故障因素,你就会发现共享正常开启访问了。
防火墙与共享的矛盾
现在基本上已经没有一台计算机是不曾安装网络防火墙和病毒防火墙的了,可是用户在众多的墙里享受安全特性的时候,偶尔也会发现局域网共享莫名其妙的失败了,如果用户留意到防火墙正在闪烁的报警状态,也许会发现日志上记录着“计算机x.x.x.x 试图访问本机139 – NetBIOS端口,该操作已被拦截”,这是为什么?因为防火墙把NetBIOS的通讯给拦截掉了,别忘记NetBIOS可是局域网通讯的基础。防火墙此举是为了阻止前面提到的利用NetBT进行的“139入侵”模式攻击,虽然防火墙规则里可能写着“允许局域网资源共享”,但是可能这条规则没被选中,或者防火墙没能认出这是一个局域网。
知道了缘由,解决起来也就容易多了,对于有原配规则设置的防火墙,只要勾上“允许局域网资源共享”,就能让NetBIOS协议正常通讯了,如果没有,就自己建立一个规则:协议方向为“入”,协议选择“TCP”,端口范围134—139,标志位“SYN”,满足时的规则为“通行”即可。一些XP系统内置的Windows防火墙ICF往往会掐了自家共享的脖子,如果是这样,就把它关掉,因为ICF始终比不过专门的防火墙,更别指望靠它抵挡一切入侵了。
特殊的共享故障
在一小部分机器里,网络共享是艰难的,它们怎么做也看不到对方的计算机和资源列表,但是使用一些局域网管理工具如LANExplorer、LANetAdmin等却能看到一切,对于这种计算机,只能通过直接输入资源名称或把对方共享资源通过net use命令给映射过来作为虚拟盘符才能工作,对于这种机器,它实际上并没有故障,只是对方通过某种手段阻止了计算机向浏览主控服务器通报自己的共享资源,让整个局域网里的浏览列表缺少对着台计算机的描述,也就无法在网络邻居里发现它了。
另一种情况是大家都能看到网络邻居里的计算机,但某台计算机的网络邻居里却是空的,而且它也无法通过输入UNC地址(即前面提到的共享资源,它是用“\计算机资源”的格式表达的)来访问到对方计算机,用户会收到一个错误提示“找不到网络路径”,这种就是真正的故障了,一般是因为计算机没有正常获得浏览列表所导致,某种原因让它无法获得浏览主控服务器返回的数据,我们可以先尝试使用“nbtstat -R”清空本机的浏览列表缓存试试看,或者运行“net stop browser && net stop LmHosts && net stop Server && net start Server && net start LmHosts && net start browser”命令集来重新启动几个与文件共享相关的服务,不过建议已经成为浏览主控服务器身份的计算机不要轻易执行这个命令,因为它可能会让你丧失在该工作组里的主控身份,因为当一个网络里的浏览主控服务器停止运行时,同一工作组里的某台计算机会变为浏览主控服务器,这个过程被称为“浏览主控服务器重选”,目的是为了保持工作组共享资源的正常访问,但是如果不幸这个浏览列表被安排在一台故障机器上,整个工作组可能就无法正常进行共享访问了。如果经历这些步骤还是无法查看网络邻居,可以试试看修改“TCP/IP协议属性-高级-WINS”里的“启用TCP/IP上的NetBIOS”,最后可以尝试删除“Microsoft 网络的文件和打印机共享”和“Microsoft 网络客户端”再重新添加一次。
四. 共享与安全
也许,只要是有开放互连的地方,就会有无法逃脱安全问题的难堪,共享更是不例外,许多用户根本不知道,默认情况下系统就已经为你开了一个庞大的后门供人来品尝,而这个后门的官方名称就是“默认共享”——系统会自动为用户开放以每个盘符进行命名的隐藏共享“盘符$”,虽然网络邻居里看不出来,但是有经验的用户都知道那是什么一回事了,只需使用“\IP盘符$”的格式便完成了资源的访问操作。而另一个被称为“默认管理共享”(ADMIN$)的共享,更是提供了一系列强大的网络指令,甚至包括关机命令。你也许会说,这不正符合微软的构思“远程管理”吗?话虽如此,但是对于一个只有来宾帐户身份标识的共享来说,它能判断出谁是主人吗?
因此,稍有经验的用户对这两个共享都是深恶痛绝的,幸好系统提供了永久关闭它的方法:运行regedit开启注册表编辑器,找到“HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServiceslanmanserverparameters”分支,添加名为“AutoShareServer”和“AutoSharewks”的DWORD类型值,均设为0,重启计算机就会发现仅仅剩下一个维持共享功能的IPC$了。
除了这里,共享还为我们带来了“计划任务”的潜在危害,即通过IPC$,入侵者可以设定机器在一个固定的时间里执行某种操作,这实际上是通过“计划任务”实现的,而“计划任务”的实体为“Task Scheduler”服务项,赶快进services.msc里禁止掉它。