Samba协议基础

在NetBIOS出现之后,Microsoft就使用NetBIOS实现了一个网络文件/打印服务系统,这个系统基于NetBIOS设定了一套文件共享协议,Microsoft称之为SMB(Server Message Block)协议。这个协议被Microsoft用于它们Lan Manager和Windows NT服务器系统中,实现不同计算机之间共享打印机、串行口和通讯抽象(如命名管道、邮件插槽等)。

随着Internet的流行,Microsoft希望将这个协议扩展到Internet上去,成为Inter net上计算机之间相互共享数据的一种标准。因此它将原有的几乎没有多少技术文档的SMB协议进行整理,重新命名为 CIFS(Common Internet File System),并打算将它与NetBIOS相脱离,试图使它成为Internet上的一个标准协议。

因此,为了让Windows和Unix计算机相集成,最好的办法即是在Unix计算机中安装支持SMB/CIFS协议的软件,这样Windows客户就不需要更改设置,就能如同使用Windows NT服务器一样,使用Unix计算机上的资源了。Samba是用来实现SMB的一种软件,它的工作原理是,让NETBIOS(Windows95网络邻居的通讯协议)和SMB(Server Message Block)这两个协议运行于TCP/IP通信协议之上,并且使用Windows的NETBEUI协议让Unix计算机可以在网络邻居上被Windows计算机看到。它的功能有:

共享Linux磁盘给Win95/NT

共享Win95/NT磁盘给Linux机器

共享Linux打印机给win95/NT

共享win95/NT打印机给Linux机器。

同时它的文件服务功能比NT系统还高,而且在Windows2000之前就提供了用户磁盘空间限制的功能。

Samba的配置

在我写这篇文章的时候,Samba的版本已经到了2.2.2了,需要的可以通过samba.org得到最新的rpm安装包。然后执行rpm –Uvh samba-2.2.2-20011013.i386.rpm来安装或者升级它。安装完后,可以看见/etc/samba这么一个目录,里面存放和Samba相关的一些文件,最主要的是smb.conf,现在根据配置文件讲讲它的配置选项:

全局设置:

workgroup = MYGROUP

定义该Samba服务器所在的工作组或者域(如果下面的security=domain的话)。

server string = MY Samba Server

设定机器的描述,当我们通过网络邻居访问的时候可以在备注里面看见这个内容,而且还可以使用samba设定的变量。这里说一下samba定义的变量:

%S = 当前服务名(如果有的话)

%P = 当前服务的根目录(如果有的话)

%u = 当前服务的用户名(如果有的话)

%g = 当前用户说在的主工作组

%U = 当前对话的用户名

%G = 当前对话的用户的主工作组

%H = 当前服务的用户的Home目录

%v = Samba服务的版本号。

%h = 运行Samba服务机器的主机名

%m = 客户机的NETBIOS名称

%L = 服务器的NETBIOS名称

%M = 客户机的主机名

%N = NIS服务器名

%p = NIS服务的Home目录

%R = 说采用的协议等级(值可以是CORE, COREPLUS, LANMAN1, LANMAN2,NT1)

%d = 当前服务进程的ID

%a = 客户机的结构(只能识别几项:Samba,WfWg,WinNT,Win95)

%I = 客户机的IP

%T = 当前日期和时间

hosts allow = 网络或者主机

这里可以设置允许访问的网络和主机IP,比如允许192.168.1.0/24和192.168.2.1/32访问,就用host allow = 192.168.1. 192.168.2.1 127.0.0.1(网络注意后面加”.”号,各个项目间用空格隔开,记得把本机也加进去)

printcap name = printcapFile

到printcapFile(一般是/etc/printcap)这个文件中取得打印机的描述信息

load printers = yes|no

设定是否自动共享打印机而不用设置下面的[printer]一节的相关东西

printing = PrintSystemType

定义打印系统的类型,缺省是lprng,可选项有:bsd, sysv, plp, lprng, aix, hpux, qnx。

guest account = pcguest

定义游客帐号,而且需要把这个帐号加入/etc/passwd,不然它就用缺省的nobody

log file = LogFileName

定义记录文件的位置LogFileName(一般是用/var/log/samba/%m.log)

max log size = size

定义记录文件的大小size(单位是KB,如果是0的话就不限大小)

security = security_level

定义Samba的安全级别,按从低到高分为四级:share,user,server,domain。它们对应的验证方式如下:

share:没有安全性的级别,任何用户都可以不要用户名和口令访问服务器上的资源。

user:samba的默认配置,要求用户在访问共享资源之前资源必须先提供用户名和密码进行验证。

server:和user安全级别类似,但用户名和密码是递交到另外一个服务器去验证,比如递交给一台NT服务器。如果递交失败,就退到user安全级。

domain:这个安全级别要求网络上存在一台Windows的主域控制器,samba把用户名和密码递交给它去验证。