FreeBSD根据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命令。