在NetBIOS出现之后,Microsoft就使用NetBIOS实现了一个网络文件/打印服务系统,这个系统基于NetBIOS设定了一套文件共享协议,Microsoft称之为SMB(Server Message Block)协议。这个协议被Microsoft用于它们Lan Manager和Windows NT服务器系统中,实现不同计算机之间共享打印
★这里说明一下什么是浏览(Browse):
在SMB协议中,计算机为了访问网络资源,就需要了解网络上存在的资源列表(例如在Windows下使用网络邻居查看可以访问的计算机),这个机制就被称为浏览(Browse)。虽然SMB协议中经常使用广播的方式,但如果每次都使用广播的方式了解当前的网络资源(包括提供服务的计算机和各个计算机上的服务资源),就需要消耗大量的网络资源和浪费较长的查找时间,因此最好在网络中维护一个网络资源的列表,以方便查找网络资源。只有必要的时候,才重新查找资源,例如使用Windows下的查找计算机功能。
但没有必要每个计算机都维护整个资源列表,维护网络中当前资源列表的任务由网络上的几个特殊计算机完成的,这些计算机被称为Browser,这些Browser通过记录广播数据或查询名字服务器来记录网络上的各种资源。
Browser并不是事先指定的计算机,而是在普通计算机之间通过自动进行的推举产生的。不同的计算机可以按照其提供服务的能力,设置在推举时具备的不同权重。为了保证一个Browser停机时网络浏览仍然正常,网络中常常存在多个Browser,一个为主Browser(Master Browser),其他的为备份Browser。★
remote announce = host(subnet)
指定这些机器向网络宣告自己,而不是有Browser得到。
local master = yes|no
这个参数指定nmbd是否试图成为本地主浏览器,默认值是yes,如果设为no则samba服务器就永远都不会成为本地主浏览器。但即使设置了yes,也不等于samba服务器就会成为本地主浏览器。只是参与本地主浏览器选择。
os level = n
n的值是个整数,决定了nmbd是否有机会成为本地广播区域的工作组里的本地主浏览器,默认值是零,零则意味着nmbd失去浏览选择。如果要nmbd更有机会成为本地主浏览器的话,可以设为65。
domain master = yes|no
这个参数让nmbd成为一个域浏览器,取得各本地主浏览器的浏览列表,并将整个域的浏览列表递交给各本地主浏览器。
preferred master = yes|no
这个参数指定nmbd是否是工作组里的首要的主浏览器,如果指定为yes,nmbd在启动的时候就强制一个浏览选择。
★Domain master和local master
工作组和域这两个概念在进行浏览时具备同样的用处,都是用于区分并维护同一组浏览数据的多个计算机。事实上他们的不同在于认证方式上,工作组中每台计算机都基本上是独立的,独立对客户访问进行认证,而域中将存在一个(或几个)域控制器,保存对整个域中都有效的认证信息,包括用户的认证信息以及域内成员计算机的认证信息。浏览数据的时候,并不需要认证信息,Microsoft将工作组扩展为域,只是为了形成一种分级的目录结构,将原有的浏览和目录服务相结合,以扩大Mircrosoft网络服务范围的一种策略。
工作组和域都可以跨越多个子网,因此网络中就存在两种Browser,一种为Domain Master Browser ,用于维护整个工作组或域内的浏览数据,另一种为Local Master Browser,用于维护本子网内的浏览数据,它和Domain Master Browser通信以获得所有的可浏览数据。划分这两种Browser 主要是由于浏览数据依赖于本地网广播来获得资源列表,不同子网之间只能通过浏览器之间的交流能力,才能互相交换资源列表。
但是,为了浏览多个子网的资源,必须使用NBNS名字服务器的解析方式,没有NBNS的帮助,计算机将不能获得子网外计算机的NetBIOS名字。 Local Master Browser也需要查询NetBIOS名字服务器以获得Domain Master Browser的名字,以相互交换网络资源信息。
由于域控制器在域内的特殊性,因此域控制器倾向于被用做Browser,主域控制器应该被用作Domain Master Browser,他们在推举时设置的权重较大。★
preserve case = yes|no
short preserve case = yes|no
指定拷贝DOS文件的时候保持大小写,缺省是no
default case = lower|upper
所有的DOS文件的缺省是大写还是小写
case sensitive = yes|no
大小写敏感,一般是no,不然会出现一些问题。
共享设置:
★共享资源:
每个SMB服务器能对外提供文件或打印服务,每个共享资源需要被给予一个共享名,这个名字将显示在这个服务器的资源列表中。如果一个资源的名字的最后一个字母为$,则这个共享名就为隐藏共享,不能直接表现在浏览列表中,而只能通过直接访问这个名字来进行访问。在SMB协议中,为了获得服务器提供的资源列表,必须使用一个隐藏的资源名字IPC$来访问服务器,否则客户无法获得系统资源的列表。★
共享设置中有个比较奇怪的段:
[homes],在smb.conf文件中一般没有对这个目录的设定特定内容比如路径等。当客户机发出服务请求时,就在smb.conf文件的其它部分查找友特定内容的服务。如果没有发现这些服务,并且提供了homes段时,那么就搜索密码文件得到用户的Home目录。通过Homes段,Samba可以得到用户的Home目录并使之共享。下面是这个段的最基本的几个设置。
[homes]
comment=Home Directory
browseable=no
writable=yes
比较正常的共享的配置如下例:
[MyShare]
comment = grind’s file
path = /home/grind
allow hosts = host(subnet)
deny hosts = host(subnet)
writable = yes|no
user = user(@group)
valid users = user(@group)
invalid users = user(@group)
read list = user(@group)
write list = user(@group)
admin list = user(@group)
public = yes|no
hide dot files = yes|no
create mode = 0755
directory mode = 0755
sync always = yes|no
short preserve case = yes|no
preserve case = yes|no
case sensitive = yes|no
mangle case = yes|no
default case = upper|lower
force user = grind
wide links = yes|no
max connections = 100
delete readonly = yes|no
其中[]里面的MyShare指定共享名,一般就是网络邻居里面可以看见的文件夹的名字。
comment指的是对改共享的备注。
path指定共享的路径,其中可以配合samba变量使用。比如你可以指定path=/data/%m,这样如果一台机器的NETBIOS名字是 grind,它访问MyShare这个共享的时候就是进入/data/grind目录,而对于NETBIOS名是glass的机器,则进入 /data/glass目录。
allow hosts和deny hosts和前面的全局设置的方法一样这里不再提及。
writeable指定了这个目录缺省是否可写,也可以用readonly = no来设置可写。
user设置所有可能使用该共享资源的用户,也可以用@group代表group这个组的所有成员,不同的项目之间用空格或者逗号隔开。
valid users指定能够使用该共享资源的用户和组。
invalid users指定不能够使用该共享资源的用户和组。
read list 指定只能读取该共享资源的用户和组。
write list指定能读取和写该共享资源的用户和组。
admin list指定能管理该共享资源(包括读写和权限赋予等)的用户和组。
public指明该共享资源是否能给游客帐号访问,这个开关有时候也叫guest ok,所以有的配置文件中出现guest ok = yes其实和public = yes是一样的。
hide dot files指明是不是像unix那样隐藏以“.”号开头的文件。
create mode指明新建立的文件的属性,一般是0755。
directory mode指明新建立的目录的属性,一般是0755。
sync always指明对该共享资源进行写操作后是否进行同步操作。
short preserve case指明不管文件名大小写。
preserve case指明保持大小写。
case sensitive指明是否对大小写敏感,一般选no,不然可能引起错误。
mangle case指明混合大小写。
default case指明缺省的文件名是全部大写还是小写。
force user强制把建立文件的属主是谁。如果我有一个目录,让guest可以写,那么guest就可以删除,如果我用force user= grind强制建立文件的属主是grind,同时限制create mask = 0755,这样guest就不能删除了。
wide links指明是否允许共享外符号连接,比如共享资源里面有个连接指向非共享资源里面的文件或者目录,如果设置wide links = no将使该连接不可用。
max connections = n设定同时连接数是n。
delete readonly指明能否删除共享资源里面已经被定义为只读的文件。
有两类特殊的共享,分别是光驱和打印机
光驱的共享设置:
[cdrom]
comment = grind’s cdrom
path = /mnt/cdrom
public = yes
browseable = yes
root preexec = /bin/mount -t iso9660 /dev/cd0 /mnt/cdrom
root postexec = /bin/umount /mnt/cdrom
这里root preexec指明了连接时用root的身份运行mount命令,而root postexec则指明了断开时用root身份运行umount,有效实现了对光驱的共享。
打印机共享的设置:
[printers]
path = /var/spool/samba
writeable = no
guest ok = yes
printable = yes
printer driver = HP LaserJet 5L
这里printable指明该打印机可以打印, guest ok说明游客也能打印,path指明打印的文件队列暂时放到/var/spool/samba目录下。printer driver的作用是指明该打印机的类型,这样我们在安装网络打印机的时候可以直接自动安装驱动而不必选择。
添加用户:
samba添加用户比较方便,一般是用smbadduser,用法是smbadduser unixid:netid,举个例子:如果你的本机有个叫grind的用户,你用smbadduser grind:grind,这样从网上邻居访问的时候用户名就用grind,而如果你用了smbadduser grind:glass的话,网上邻居访问的时候提供的用户名就是glass而不是grind了。
关于samba服务端的设置基本就是这些,我想一般应用中所要使用的上面几乎都覆盖到了,所以有些不重要的就省略了,如果要更加详细的信息可以用man smb.conf参考。
查看本文来源