根据Windows网络设置Samba使用SMB协议实现的网络的情况非常不同,有的网络仅仅由几台Windows计算机组成,只需要提供计算机之间最简单的资源共享,并不需要一个中心控制点 ── 文件服务器提供服务,而有的网络由多个物理网络通过路由器连接而成,网络中拥有多种文件/打印服务器,网络中的操作系统也各不相同,包括Windows和Unix。
Samba服务器能适应这些不同要求的网络的不同要求,然而由于网络的需要各不相同,因此对Samba的设置也不相同。如何根据需要来规划网络、设置Samba是一个灵活但复杂的问题,同时存在各种各样的设置方式都能满足用户的需要,这里给出的只是一种可行性建议。
小型网络,无NT服务器
这种网络的特征是网络资源的使用程度不大,通常所有的计算机都位于一个局域网内,几乎没有专用文件/打印服务器。所有的计算机均使用工作组方式相互访问。此时使用Samba服务器的目的是为了更好的利用网络资源,提供方便的文件/打印服务。
在这样的网络中,仅仅需要最简单的文件/打印共享服务。虽然共享级认证方式能够满足此时的需要,但是最好使用用户级认证方式,因为只有这样才能充分发挥服务器提供服务的优势。需要为每个使用者在FreeBSD服务器上分别建立帐户,这样缺省设置就自动为用户共享其个人目录,用做私人数据的保存。为了网络用户之间的相互交换数据,可以设定一个公用共享目录,例如上面例子中的[public]共享目录。
由于Samba服务器具有优秀性能,最好将Samba服务器设置为本地的Browser,仅需要设置localmaster参数,并给os leverl一个较大的值就能达到目的。可以不使用nmbd的名字解析能力用做名字服务器,因为此时都在一个物理网络内,b-node广播方式能够提供正确的解析。
当为Windows 98或者Windows NT SP3提供认证的时候,它们将使用加密过的口令进行认证,这能提供更大的网络安全性。Samba服务器也能提供这种认证,然而对于这样的小型网络,使用原有的非加密口令认证方式就足够了,因为口令不会跨越网络传输,安全问题限制于本地网络内部。在Samba的文档中,提供了将Windows98或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,以提供不同子网间的Localmaster Browser相互交换浏览信息。
如果远程网络中的计算机不使用本地的Samba作名字服务器,该网络中的Domain master Browser也不与本地网络的Local Master Browser交换信息,那么那个网络上的Brower就无法了解本地上的资源列表。作为本地Browser的Samba服务器能使用一种折衷的方法来通知远程网络上的Browser,告诉它本地网络提供的资源服务,这就称为remote announce,并能用于远程网络中的浏览信息与本地网络同步。为了使用remote announce,需要设置remote announce和remote browse 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的设置不是必须的,只是WindowsNT中一般许可用户使用空口令,这项设置用来与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方式也能在系统启动时的进行一些初始名字解析设置。
未完,待续。。。