电脑技术学习

FreeBSD连载(68):根据Windows网络设置Samba

dn001

根据Windows网络设置Samba

  使用SMB协议实现的网络的情况非常不同,有的网络仅仅由几台Windows计算机组成,只需要提供计算机之 间最简单的资源共享,并不需要一个中心控制点 ── 文件服务器提供服务,而有的网络由多个物理网络通过路由器连接而 成,网络中拥有多种文件/打印服务器,网络中的操作系统也各不相同,包括Windows和Unix。

  Samba服务器能适应这些不同要求的网络的不同要求,然而由于网络的需要各不相同,因此对Samba的设置 也不相同。如何根据需要来规划网络、设置Samba是一个灵活但复杂的问题,同时存在各种各样的设置方式都能满足用户 的需要,这里给出的只是一种可行性建议。

  • 小型网络,无NT服务器

  这种网络的特征是网络资源的使用程度不大,通常所有的计算机都位于一个局域网内,几乎没有专用文件/打印服务 器。所有的计算机均使用工作组方式相互访问。此时使用Samba服务器的目的是为了更好的利用网络资源,提供方便的文 件/打印服务。

  在这样的网络中,仅仅需要最简单的文件/打印共享服务。虽然共享级认证方式能够满足此时的需要,但是最好使用 用户级认证方式,因为只有这样才能充分发挥服务器提供服务的优势。需要为每个使用者在FreeBSD服务器上分别建立 帐户,这样缺省设置就自动为用户共享其个人目录,用做私人数据的保存。为了网络用户之间的相互交换数据,可以设定一个 公用共享目录,例如上面例子中的[public]共享目录。

  由于Samba服务器具有优秀性能,最好将Samba服务器设置为本地的Browser,仅需要设置local master参数,并给os leverl一个较大的值就能达到目的。可以不使用nmbd的名字解析能力用做名字 服务器,因为此时都在一个物理网络内,b-node广播方式能够提供正确的解析。

  当为Windows 98或者Windows NT SP3提供认证的时候,它们将使用加密过的口令进行认证 ,这能提供更大的网络安全性。Samba服务器也能提供这种认证,然而对于这样的小型网络,使用原有的非加密口令认证 方式就足够了,因为口令不会跨越网络传输,安全问题限制于本地网络内部。在Samba的文档中,提供了将Windows 98或Windows NT SP3设置为原有认证方式的注册表信息,分别为/usr/local/share/examples/samba 目录下的Win95_PlainPassWord.reg和NT4_PlainPasswor.reg文件。

  • 小型网络,与NT服务器相互协作

  这种网络中存在一个或几个Windows NT服务器,因此网络中的关键问题是认证的策略问题。有的网络中使 用分散式的认证策略,即各个服务器各自认证使用自己资源的客户,适合网络上服务器属于不同管理者的情况,另一种情况是 希望在访问多个服务器时使用一致的认证,无论是在NT服务器还是在Samba服务器,对于同一个用户只需要使用一个口 令就能使用网络资源。

  当使用分散认证策略的时候,Samba服务器可以使用缺省设置security=user,当要求Samba 服务器和NT服务器认证同样的用户的时候,可以使用security=server,让NT服务器来认证用户,此时还 需要设置password server的名字,以设置提供认证的NT服务器的名字。

  由于是使用NT服务器对用户进行认证,然而NT上的用户与FreeBSD用户的名字可能不同,为了将NT用户 重新映射到FreeBSD上的Samba用户,就需要进行用户名的映射。这需要使用username map参数,这 个参数设置一个用于用户名映射的文件名,在这个指定的文件中,可以设置FreeBSD用户(或用户组)等价于哪个NT 用户(或用户组)。

  • 具备多个物理网段的网络

  如果用户的网络跨越了多个物理网络,为了实现浏览,最重要的问题就是设置使用名字服务器进行名字解析。此时可 以选择使用Samba的nmbd作为名字服务器,也可以使用Windows NT的WINS服务器作为名字服务器。

  但如果计划在网络上使用多个NetBIOS服务器,以提供相互备份的能力,就只能使用多个Windows NT 来运行WINS,WINS的一项功能是具备相互复制的能力,而nmbd不能和其他WINS服务器相互复制数据。WINS 使用这个功能主要是用于克服系统操作本身的故障,以提高可靠性。对于一般的网络,使用一个名字服务器,尤其是运行 在高稳定性的FreeBSD系统之上的Samba,可靠性就能满足网络的需要。当然偶然发生的物理故障是无法避免的, 这样将使用分布在不同地点的多个服务器会有一定的帮助。

  当选择好了名字服务器的设置策略,就可以决定Samba是用作名字服务器,还是普通的使用名字服务器的客户机 。Samba可以同时设置为名字服务器和客户,这并不冲突。还可以设置Samba为wins proxy和dns proxy ,为不能使用wins和dns进行名字解析的NetBIOS客户提供b-node方式的代理解析。

  当网络使用的是分散式的工作组方式的时候,要实现跨越子网的浏览,Samba服务器就担任了重要的角色。因为 不存在域控制器,此时Samba要设置成为Domain master Browser,以提供不同子网间的Local master Browser相互交换浏览信息。

  如果远程网络中的计算机不使用本地的Samba作名字服务器,该网络中的Domain master Browser 也不与本地网络的Local Master Browser交换信息,那么那个网络上的Brower就无法了 解本地上的资源列表。作为本地Browser的Samba服务器能使用一种折衷的方法来通知远程网络上的Browser ,告诉它本地网络提供的资源服务,这就称为remote announce,并能用于远程网络中的浏览信息与本地网 络同步。为了使用remote announce,需要设置remote announce和remote brow se sync参数,使用的设置值为远程网络的广播地址,如192.168.1.255,可以同时设置多个地址,以同 步多个远程Browser。

  如果网络中使用NT域认证方式,就不要让Samba和域控制器争夺Domain master Browser 的权利,Samba还不能设置为PDC为整个域服务。因此需要设置domain master=no,但可以让Samba 服务器在没有PDC的子网中担当Local master Browser的任务,即设置local master=yes。

  当前NT服务器使用SAM数据库用于保存认证信息,但是下一代NT服务器将转向kerberos认证方式,这 种认证方式本来就是在Unix上开发的,更有利于与Samba软件集成在一起。

  此时也可以使用NT的域控制器提供认证(设置security=server,并将password server 设置为PDC或BDC),以使得Samba服务器能承认域控制器认证过的用户。这样客户技术就可以使用加密认证 方式,因为Samba服务器不进行认证,仅仅是把认证信息转发给相应的NT服务器进行认证。

  • 支持加密口令认证

  前面提到过为了适应Windows 98和Windows NT 4.0 SP3之后的客户使用加密过的口令 认证方式,可以将客户计算机再次设回使用普通口令认证方式来解决认证问题,然而当客户可能跨越子网进行认证的时候,就 应该使用加密认证,以防止口令明文跨越子网传输,提供更高的安全性。

  为了支持加密口令认证,就需要使用独立于FreeBSD系统口令文件之外的认证系统,需要在smb.conf 中的[globals]中增加设置为:

      encrypt passwords = yes
      null passwords = yes
      smbpasswd file = /usr/local/private/smbpasswd

  然后使用命令smbpasswd -a user,将用户user及其口令加入指定的口令文件smbpasswd 文件中,这样在进行认证时,就能通过这个smbpasswd文件中的设置,通过口令的加密认证方式进行认证了。然 而此时将绕过系统标准认证过程,原有的用户数据必须重新一个一个加入smbpasswd文件中才能完成认证,没有添加 到这个文件中的用户就无法完成认证以使用系统资源。其中null passwords的设置不是必须的,只是Windows NT中一般许可用户使用空口令,这项设置用来与Windows NT的设置保持一致。加密口令文件smbpasswd 在FreeBSD系统下缺省位于/usr/local/private目录中。

  Samba手册中使用的目录可能会与FreeBSD中的具体目录不一致,这是因为使用Packages Collection 或Ports Collection安装的Samba,其软件的安装目录均按照FreeBSD的习惯 做了调整,因此会与Samba手册提到的位置不太相同。

  此时,使用SWAT的PASSWORD设置选项可以直接将一个用户加入口令数据库,并打开访问这个用户的许可 ,对于加密口令的管理更为简便。因此应该使用SWAT来管理加密口令数据文件,而不必直接使用smbpasswd命令。

  • 将Samba服务器加入域

  使用域代替工作组的好处是,所有的客户能使用同一个认证来访问所有的资源。虽然域的概念还是一种非常初级的目 录服务的概念,但由于Microsoft网络的流行,它的重要性也非常之大。

  在一个以域为认证方式的网络中,可以将Samba加入域中去,以采用与域一致的认证和管理方式。在一个域中的 SMB计算机有各种形式,一种为提供认证服务的域控制器,分为PDC(Primary Domain Controller) 和BDC(Backup Domain Controller),另一种为不提供认证服务的成员服务器,还有 就是普通客户机。Samba当前能作为普通成员服务器加入域。

  为了将Samba加入域,首先要为Samba服务器在PDC服务器中创建一个帐户,这个操作就如同为普通NT 成员服务器创建用户一样,通过NT服务器的Server Manager for Domain来完成。

  加入NT域的时候首先需要停止Samba服务器的正常工作,使用smbpasswd将这个Samba服务器登 记进域,这需要使用:

# smbpasswd -j DOMAINNAME -r SAMBASRV

其中DOMAINNAME为域的名字,SAMBASRV为前面PDC上为Samba服务器创建的帐户名,这样Samba服务器就加入了域。然后需要更改smb.conf的设置:

       security = domain
       workgroup = DOMAINNAME
       password server = PDC_name BDC1 BDC2

  password server设置为这个域内的PDC和BDC的名字。此后,再次启动Samba服务器,则 服务器就为这个域的一个成员服务器了。

  虽然使用域认证方式和服务器认证方式都能让同样的用户访问Samba服务器上的资源,然而对于认证细节是不同 的,使用域认证方式能利用域提供的更安全的认证通道。

  • 设置lmhosts

  在Miscrosfot扩展的NetBIOS协议中,可以使用查询设置文件的方法来进行名字解析,这个静态文件为 lmhosts。在Windows下的这个文件位于系统目录中,Samba将其放在与smb.conf相同的目录下,FreeBSD系统中 为/usr/local/etc中。

# Sample Samba lmhosts file. 
192.168.1.24  WIN95 
192.168.1.21  NTSRV#20 
192.168.1.121 FBSDSRV		   #PRE

  lmhosts的文件格式与/etc/hosts文件非常类似,也是IP地址/主机名字对,除了这个文件中使 用的名字是NetBIOS名字。此外NetBIOS名字有一个定义属性类别的字节(NetBIOS中的第16个字节) ,这个属性字节可以在lmhosts中直接设置,以回应特定类别的请求,不设置这个属性,就对应所有类别。例如上例中 的第二项定义的NTSRV,就明确指定了其属性为16进制的0x20。

  此外,lmhosts也支持一些特殊的语法,例如用在一个设置项之后的#PRE选项将使得这项设置在启动Samba 时自动载入系统缓冲区中,使得能最先识别。标准情况下的lmhosts文件在名字解析查询顺序的后部,在经过wins 和b-node广播之后才会检查lmhosts设置,而#PRE选项设置的名字就会在此之前进行解析。

  一般情况下不必设置这个文件,因为使用其他方法进行名字查询就足够了,这种方法用于辅助解析的,例如在跨越子 网进行浏览,但wins服务器不能提供访问时的一个备份措施。其中的#PRE方式也能在系统启动时的进行一些初始名字 解析设置。

未完,待续。。。  

标签: