Linux系统工程师——Linux网络管理Version:1.091第六章文件服务器Samba的配置Samba是一种在UNIX环境中运行的免费软件,利用Samba,Linux可以创建基于Windows的计算机使用共享。另外,Samba还提供一些工具,允许Linux用户从Windows计算机进入共享和传输文件。本章目标:学习完本章你将能够¾理解smb的工作原理¾配置Samba服务¾在Linux下使用windows共享服务Linux系统工程师——Linux网络管理Version:1.0921.网上邻居工作原理网上邻居的工作模式是一个典型的客户端/服务器工作模型,现在,回想一下访问网络邻居的过程,首先,点击网络邻居图标,打开网上邻居列表,其次,点击打开目标服务器图标,列出目标服务器上的共享资源,接下来,点击需要的共享资源图标,进行需要的操作(这些操作包括列出内容,增加,修改或删除内容等。进当点开网上邻居列表时,这个阶断的实质是列出一个网上的可以访问的服务器的名字列表。在点击一台具体的共享服务器时,这时先发生了一个名字解析过程,我们的电脑会尝试解析名字列表中的这个名称,并尝试进行连接。在连接到该服务器后,我们可以根据服务器的安全设置对服务器上的共享资源进行允许的操作。下面一步步的来分析这些过程。1.1获取网络资源列表当点击网上邻居图标时,是如何获得当前网络上可以访问的服务器列表的呢?在一个有域的windows网络环境下,我们也可以通过活动目录服务来取得这个列表。而在工作组环境中这主要依靠windows的浏览服务。当客户端A启动时,如果客户机A是域的成员或者有Wins服务器,它向域控制器登记自己,或向Wins服务器登记自己;如果不是,客户端A广播它的名称,当它成功广播自己,并没有其他人和它重名,客户端就登记成功。登记过程如下:(1)客户端A在所有地方广播它自己和它的NetBIOS信息6到10次确保其他网络成员收到信息。(如果有机器没有收到,那该机的网上邻居里就不能看到客户端A,这也就是为什么在使用windows网上邻居时,有时网络是通的,一切配置正常,可是在网上邻居看不到对方的机器。)(2)如果有另一客户端B已用此名,另一客户端B发布它自己的广播,包括它正在使用的名字。请求登录的客户端A停止所有登记的企图。(3)无其他客户端反对登记,请求登录的客户端A完成登记过程。如果有可用的名称服务器,那么名称服务器会在它的数据库里记上一笔,某机的名称是A,IP地址是XXX.XXX.XXX.XXX(4)当A机正常关机时,重新广播释放刚才注册的这个名字,同一网段上的计算机收到后把这个名字从网上邻居中删除。如果非正常关机,则如果网上有Wins服务器的话,客户机非正常关机一定时间以后,Wins也会注销这个名字;如果没有wins服务的话,下次访问A服务器时,等待广播应答,没有应答再删除。Linux系统工程师——Linux网络管理Version:1.093在登记完成后,其它计算机中就有了A的信息。如果中途A计算机关机了会是什么效果?这里需要知道的是,浏览服务为各客户机提供的资源列表并不是实时的,也不一定是全局一致的,它依靠每12分钟一次的轮询来刷新和同步这个列表,因此,这个列表经常与实际情况不一致。例如:在域环境中,如果域控制器刚确认完A主机的信息,A主机就关机了,那么A的资源列表依然存放在域服务器中,其它机器访问网上邻居时,A主机会被列出,但是不能访问到(废话,已经关机了,当然访问不到)。A主机要从访问列表中去掉,要等到域控制器(或Wins服务器)做下一次轮询时。1.2名称解析当点击网络邻居列表里的一台机器时,这时首先会发生一个名称解析过程。谈起名称解析,我们常会想到DNS,事实上,网上邻居的名称解析也是可以使用DNS系统的。不过前提是需要架设局域网DNS服务器对局域网的各机器名进行解析。如果没有安装局域网DNS,也可以使用NETBIOS的名字服务还对机器名进行解析,NETBT(TCP/IP上的NETBIOS)协议也可以将一台NETBIOS机器名解析为IP地址,在windows下可以用nbtstat-c命令查看本机缓存的NETBIOS名称和IP地址的映射表。也可以使用nbtstat–r命令来利用NETNBT广播来将指定NETBIOS名称解析为IP地址。由于广播方式是无法跨子网的,所以当NETBIOS要求解析跨子网的名称时,必需要正确设置WINS服务器来进行跨网络的NETBIOS名称解析。除以上方式外,网上邻居还允许通过Lmhost文件来进行名字解析。当访问网上邻居时遇到找不到服务器的提示,而又肯定服务器目前是在线的,在排除了网络物理故障的原因后,首先应该考虑的是这是否是名称解析的问题,检查一下网上邻居名称解析相关的各种设置是否正确。(可以直接使用IP来访问,看是否成功。)1.3网络共享服务的协议和端口作为网上邻居基础的微软文件和打印服务可以基于多种不同的协议,它们使用不同的端口。在较早的WIN98/95系统下面,主要使用NETBT(TCP/IP上的NETBIOS)协议来完成相关功能,使用137,138和139端口,同时完成包括列表维护,名称解析和文件传输等多种功能,而2000后,网络共享服务也可以通过TCP/IP上的SMB直接承载实现,使用445端口。名称解析也可以通过DNS系统来实现。这样一方面可以Linux系统工程师——Linux网络管理Version:1.094省略NETBIOS层,提高工作效率,另一方面免除了NETBIOS名称解析引起的广播,减小了网络负荷。但是如果网络中存在一些老版本的windows系统或者没有局域网DNS服务器,为了名字解析的顺利进行不得不启用NETBT,否则就只能通过IP地址访问网上邻居。图6-1显示了基于TCP/IP协议的windows文件服务的访问连接:图6-1注意:137端口是NetBIOS名称UDP,138端口是NetBIOS数据报UDP,139端口是NetBIOS会话tcp。1.4用户身份认证当客户机发现服务器上的服务与协议都安装正确以后,就开始了用户身份认证过程。也就是确定客户机以什么身份在服务器上进行操作。关于网上邻居访问过程的身份认证有以下两个原则:首先是客户机优先以当前登录账户的信息来提交认证信息,例如客户机当前的登录用户为test,密码为test,如果这时它访问网上邻居,它用以此为用户名和密码来提交验证信息。其次,由服务器决定是否将客户机用户身份映射为guest。如果Windows服务器的本地安全策略——安全选项中“网络访问:本地账户的共享和安全模式”设为仅来宾或者服务器启用了简单文件共享,网络访问的本地用户将以来宾身份验证,这时如果guest账户未被禁用,则直接进入下一步本地安全策略验证阶段,如果服务器启用了简单文件共享却没有启用guest账户,就会弹出如图6-2所示的对话框,用户名为灰色无法更改,密码无论输入什么都无效。Linux系统工程师——Linux网络管理Version:1.095图6-2如果服务器上禁用了简单文件共享,或者服务器的本地安全策略——安全选项中的“网络访问:本地账户的共享和安全模式”设为经典,本地账户模式,当客户机连接服务器时,首先以客户机的登录名和密码在服务器上进行验证,如果恰好服务器上存在同名且同密码的账户而且该帐户没有被禁用,客户机将以此用户的身份进入下一本地安全策略的验证阶段;如果服务器上不存在此同名同密码的账户,而服务器上的guest账户未被禁用,客户机将以guest账户的身分直接进入下一阶段的安全策略验证阶段。如果服务器上禁用了guest账户,会弹出要求输入用户名和密码的对话框如图6-3所示,这时如果提供了服务器上存在的用户名和密码,则会以此用户的身份进入下一阶段安全策略检查过程。图6-3关于Windows的安全策略检查过程,请参考《Windows系统管理》,它与Samba无关,在此不作详细介绍。Linux系统工程师——Linux网络管理Version:1.0961.5文件权限检查在通过了本地安全策略检查后,服务器还要检查用户想访问的共享文件夹的共享权限与系统(NTFS)权限是否允许当前登录账户访问。首先要检查共享权限,然后再检查文件系统权限。用户对该文件(或目录)的有效权限是两个权限的交集。例如,用户bearzhang对文件file1.txt的共享权限是r、w、x,在文件系统上的权限是r,那么最后bearzhang对file2.txt文件的有效权限是r。2.NetBIOS协议(参考资料)2.1简介Netbios(网络基本输入/输出系统)最初由IBM,Sytek作为API开发,目的是使用户软件能够使用局域网的资源。自从诞生,Netbois成为许多其他网络应用程序的基础。严格意义上,Netbios是接入网络服务的接口标准。Netbios原来是作为THE网络控制器为IBM局域网设计的,是通过特定硬件用来和网络操作系统连接的软件层。Netbios经扩展,允许程序使用Netbios接口来操作IBM令牌环结构。Netbios已被公认为工业标准,通常参照Netbios-compatibleLANs。它提供给网络程序一套方法,相互通讯及传输数据。基本上,Netbios允许程序和网络会话。它的目的是把程序和任何类型的硬件属性分开。它也使软件开发员可以免除以下负担:开发网络错误修复,低层信息寻址和路由。使用Netbios接口,可以为软件开发员做许多工作。通过使用Netbios的数据报或广播方式,在Netbios局域网上的pc机建立会话彼此联络。会话允许更多的信息被传送,探测错误,和纠正。通信是在一对一的基础上的。数据报或广播方式允许一台计算机和多台其他的计算机同时通信,但信息大小受限。使用数据报或广播方式没有探测错误和纠正。然而,数据报通信可以不必建立一个会话。在这种环境下所有的通信以一种称为“网络控制块“的格式提交给NetBIOS。内存中这些块的分配依赖于用户程序。这些“网络控制块“分配到域中,分别为输入/输出保留。在当今的环境中,NetBIOS是使用很普遍的协议。以太网,令牌环,IBMPC网都支持NetBIOS。在它原始版本中,它仅作为程序和网络适配器的接口。从那以后,传输类功能加入NetBIOS,使它功能日益增多。Linux系统工程师——Linux网络管理Version:1.097在NetBIOS里,面向连接(tcp)和无连接(udp)通信均支持。它支持广播和复播,支持三个分开的服务:命名,会话,数据报。2.2NetBIOS名称NetBIOS名称用来在网络上鉴别资源。程序用这些名称开始和结束会话。你能用多个程序配置一台单独的机器,每个程序都有独特的NetBIOS名称。每台支持应用的pc机也有用户定义或通过内部方法获得的NetBIOS站名。NetBIOS能包含至多16个阿尔法数字字母。在整个资源路由网络里,字母的组合必须独特。在一台使用NetBIOS的pc机在网络上能完全工作起来之前,pc必须先登记NetBIOS名称。NetBIOS命名允许16个字母用在NetBIOS名称中。而微软只允许15个字母用在NetBIOS名称中,第十六个为NetBIOS后缀。NetBIOS后缀用在Microsoftnetworking软件中,区别安装的功能,登记的设备和服务。2.3NetBIOS会话NetBIOS会话服务提供给用户程序一种面向连接,可靠的,完全双重的信息服务。NetBIOS要求一个是客户端程序,一个是服务器端程序。NetBIOS会话的建立需要双方预定的合作。一个程序必须先发出listen命令,其他程序才可以发出call命令。listen命令参考在它的NetBIOS名称表中的名称(或windows服务器中的),也参考用于作为会话另一端的远端程序的名称。如果聆听者不在聆听,call命令将不会成功。如果call成功,各程序将接到会话id,以作为会话建立的确认。send和receive命令操作传输数据。在会话最后,各程序将执行挂起命令。没有为会话服务的实际流控制,因为假定局域网足够快,