一、SMB基本介经绍
1、  Samba是基于NETBIOS协议的用于和WINDOWS系统共享文件或打印机的程序。
2、让LINUX和WINDOWS不同系统之间可以互相访问。
2、  可以做文件服务器和打印机服务器,即文件和打印机共享。
3、  可以做域服务器和备份域服务器
4、  可以成为本地主浏览服务器(LMB)。保存本地所有共享资源,为客户提供所有资源的列表。当WINDOWS用户用网上邻居访问时,可以查找到本地所有共享文件及打印机。
注:SMB是一个NETBIOS协议。所以不能跨网段。 但基于NETBIOS OVER IP也可以跨不同网段。
 
二、SMB的安装及进程
Smb的运行需要SMBD和NMBD两个进程的动行。
SMBD:管理smb主机共享目录、文件、打印机等。主要是针对网络上的共享资源进行管理的服务。
NMBD:管理群组,域和NETBIOS NAME解析。提供浏览服务,显示网上络上的共享资源列表。
 
三、SMB的命令
 
1、  smbtree   
2、  smbclient
3、  smbpssword
4、  nmblookup(类似于nslookup)
5、testparm    //配置完smb.conf后,进行检查的命令。

以下详解以下几个命令:
 
smbpasswd 命令

smbpasswd [-adem] username

-a:在smbpasswd密码文件里新增一个用户
-d:让在smbpasswd密码文件里的某个帐号暂时无法使用samba
-e:与-d参数相反,让某个帐号恢复可以使用samba
-m:该username为机器代码,与domain有关。



smbclinet 命令详解:

smbclinet -L  目标IP地址或主机名  -U 登录用户名%密码
smbclinet -L 192.168.9.4  //查看samba服务器192.168.9.4的所有共享资源
smbclinet -L 192.168.9.4  -u khp%71305   //以samba帐号看samba服务器共享的目录。这里只会显示192.168.9.4 samba服务器
对用户khp的共享资源。



四、SMB的的配置
SMB的配置文件分两个大的模块:一是全局模块,一是共享资源模块。
 
(一)全局配置(global)
 
1、  基本配置
 
(1)       workgrup=linux  //设置工作组或域名。会出现在WINDOWS的网上邻居和LINUX的网络服务器中。注意工作组名要相同。
(2)       netbios name = name //设置主机名
(3)       server sting = samba server //服务器主机说明
(4)       host allow = 192。168。9。0  //安全性设定,允许可访问samba server的客户端。
(5)       interfaces= ip地址及掩码   //当有多个网卡时,可以设置多个网卡地址。
 
 
2、  日志文件的设置
 
(1)Logfile=var/log/samba/%m.log    //log为会不同的登录用户建日不同的日志。记录用户访问的日志
(2)max.logsinze=0  //定义日志文件是最大限制。  为0时,表示不作限制。
 
 
 
 
 
 
3、  安全级别的设置
(1)       security= (share  user  server domain  ads)
share :用户不需帐号密码就可以登录SMABA服务器
user:由samba服务器检查用户的帐号和密码。即需要验证才能登录。配置此项时,需要配置smbpasswd文件。并且需要smb服务器的本地拥有此帐号的同时smbpsswd文件中也拥有此帐号。这是默认级别。
Server:检查登录用户的帐号和密码,并用另一台SABMA服务器进行验证。如无法找到验证服务器,将使用user级别。需要配置 password server项。
Domain:检查登录用户的帐号和密码,并用另一台域控制器验证用户输入的帐号和密码。需配置password server项。使用此级别,SAMBA服务器只是作为域的客户端,并不具有域服务器的功能。
Ads:具备域服务器功能。充当域的域服务器。
以上除SHARE级别外,其他级别都需要在本机系统帐号中有需要登入服务器的客户帐号存在。
 
(2)       password server= 192.168.9.1  //当为server和domain级别时,需要配置此项,以指定另一台验证服务器的地址。
(3)       smbpasswd file = /etc/samba/smbpasswd  //当为user级别时,必须在此处文件中增加用户和密码。  用smbpasswd命令。
(4)       encrypt passwords=yes  //用户密码加密
(5)       password level=8 //密码等级
(6)       username level=8   //用户名等级。当参数越大时,所尝试用户名大小写字母组合就越多。当用户名全为小写时,此项可不定义。
 
 
 
4、  口令同步
(1)       unix.password sync =yes    //当windows用户修改了口令后,samba就同步用户的unix口令。并用password programe中的指定程序,作为root修改unix下的用户口令。
(2)       password programe=user/bin/passwd/%u //指定设置UNIX帐号密码的程序。即SAMBA运行哪个程序来修改用户的UNIX口令。
(3)       passwd chat    //当windows客户端修改口令时,SAMBA服务器提供给WINDOWS客户端的提示。(如旧密码是多少,要修改成什么新密码,类似的提示序列)
 
注:windows 和unix的密码的存储是两种算法和方法。所以当windows客户端修改了自已的密码时,无法在LINUX服务器上修改相应的密码。此时就要借助 smbpasswd文件,即samba密码文件。此文件是samba承载windows客户密码的地方。即当windows客户端修改了自已的密码后,会更新SAMBA服务器端密码文件smbpasswd文件中的相对应的密码。
然后再更新LINUX系统本地的密码。(etc/password文件中的密码)以达到同步。当然要在smbpasswd文件中事先录入相应的帐号。
 
(4)       pam password change =YES //表示使用权用PAM来修改SMB客户端的密码。而不使用上面 password program中指定的程序。
 
 
 
5、  用户名映射
 
Username map = /etc/samba/smbusers   //指定客户端用户名与服务器端用户名的用户映射文件。
些处的用处自已理解有二:
一是,windows的用户名长度可以很长,但samba只能8位。当多于8位的用户名时,就需要映射。例:  root = administrator admin;  即把windows的administrator用户映射为UNIX的root用户名。
二是,为了安全起见,也可以映射。因为每一个客户端在samba服务器里需要同时拥有本地帐号(etc/password里拥有的实际帐号)和samba帐号(smbpasswd里拥有帐号),且这两个帐号的用户名和密码相同,如果知悉了samba的帐号和密码就知道了samba本地的帐号和密码,就很不安全。就可以把虚拟帐号映射到samba帐号。这样客户端就用虚拟帐号访问samba资源,即使被***知道了虚拟帐号的帐号和密码也无法操控smaba服务器了。
例:   test = test1  test2   test3
即把test1 test2 test3这三个虚拟帐号映射到samba帐号 test上。就算***知道了test1和test2等虚拟帐号的密码,也无法得知samba服务器的系统帐号test的帐号名和密码。就安全多了。
 
注:也可以把一个组名映射到一个帐号:  test =@zjt  即把zjt这个组,映射到test这个帐号上。
 
 
 
 6、打印机配置
(5)printcap name=/etc/printcap //设置打印机配置文件路径
(6)loadprinters = yes //是否将打印机共享
(7)printing=cups //打印机类型,默认为CUPS,还有BSD,SYSV,PLP。AIX等。
(8)guest account = pcguest //让用户pcguest以匿名的身份访问samba服务器,注意/etc/passwd中必须有此用户存在。  即samba服务器的本地帐户中要有此帐号。可以根据实际情况和喜好,更改为其他用户名。
 
 
7、  浏览服务器设置
 
(1)       local master = no //是否参与本地主控浏览器的选举。当设为YES时,则本samba服务器参与到本地主控浏览器的选举。  通过OS –LEVEL参数的设定,以决定是否选举成功。NO则不参加选举。
(2)       os level =33  //本地子网如有多个浏览服务则进行选举。此处设定优先级。优先级越高选举上的机会越大。0为总选举不上。33为总选举成功。   17则和WINNT级别一样。
(3)       domain master = YES  //设定是否作为域主控制浏览器。 当已有一个windows NT的主域控制器时,这个一定要设为NO
(4)       preferred master=yes  //设定为此samba服务器是否为它所属工作组的主控浏览器。设为YES的话,每次启动都会强迫进行重新选举。这个参数要谨慎。如几个都设为主控浏览器将会不停的选举。
 
 
跨子网浏览:
A:客户端浏览的步骤:
客户端要浏览域或工作组网络时(不是INTERNET网页浏览),先向网络上发送浏览请求,以得到所在域或工作组的浏览服务器列表。再通过向任一浏览服务器请求,以得到客户端列表。(如网上邻居里的域里面得到客户端列表一样)(浏览服务器可以是运行WINDOWS NT服务器,工作站,WIN9X,或SAMBA的系统)这样客户端不用维护浏览列表(客户端列表),需要查找网络中的其他工作站时,先向浏览服务器请求,浏览服务器再传回浏览列表。但浏览服务器只传回本子网内的列表,需跨网段查询时,工作方法如下B。就需配置以下几个参数。
 
B:跨网段浏览:
每个域有一个域主控浏览器,每个子网拥有一个本地主控浏览器。域主控浏览器每15分钟向子网主控浏览器发送请求,把子网主控浏览器的浏览列表与自已的合并,这样就拥有了整个域的浏览列表,包括与自已不同子网的浏览器列表。
 
(5)       remote browse sync = 192.168.3.255  或  192.168.3.20   //设置同步子网的广播地址或对端子网中的主控浏器地址。即和哪些子网的主控浏览器进行浏览列表同步
(6)       remote announce=192.168.1.255   192.168.2.44  //如一个工作组或域跨越了多个子网时,每个子网都会有一个主浏览器。则在本地主浏览器上配置对端子网的广播地址,或对端子网的主浏览器地址。即向别的子网宣告自已的存在。
 
 
 
8、  网络参数配置:
 
Wins support=yes //wins服务器支持,即samba是否作为wins服务器运行。当已有一个wins服务器时,此项设为NO
WINS server  //设置wins服务器的IP地址
Wins proxy =yes //是否作为wins代理运行
Dns proxy =no //是否作为dns代理。即是否为客户端作DNS查询。
Domain logons =yes //必须作为域控制器运行





(二)共享资源模块
除[global]段外,其他所有段都可以看作是共享资源。段名是该共享资源的名字,而段里的参数是共享资源的属性。只是有几个段是特殊共享资源而以。
1、普通共享资源
[share]
(1)Comment=home directory  //共享的注释说明
(2)Path=/home/share     //此项是定义共享资源的目录路径
(3)Browsable=yes | no   //默认是YES,即让共享被客户看到。仅当不希望被客户看到时才用到此项。
(4)Writable =yes |no  // 是否允许客户对共享资源有写的权限,yes为允许写,no为只读。
(5)Read only = yes |no   //是否只允许客户对共享资源只读。与writable正好相反。Yes,只为只读,no只允许写的权限。
(6)Read list= fred @guest  //赋予后面定义的用户或组对共享资源的只读权限
(7)Write list=@admin    //赋予后面定义的用户或级对共享资源的写权限。而不管 read only的参数是什么。即可以覆盖前面定义的权限。如一个用户同时存在于read list和write list中,则赋予写的权限。

(8)Hosts allow //设定允许哪些用户可以访问此共享资源
(9)Hosts deny //设定拒绝哪些用户可以访问此共享资源。   如果全局中定议了allows或deny参数,将以全局中定义的为准,此处无效。

(10)Guest only = yes  //只允许用guest帐号访问
(11)Guest ok = yes  //默认值为NO ,即设定在没有提交帐号和口令的情况下,是否允许访问此区段中定义的共享资源。如同意guest帐号访问时,设为YES。 即是否允许匿名访问。
(12)Guest account =pcguest //设置guest帐号的名称。通常为pcguest,在区段中设置的guest帐号覆盖全局中设置的.

(13)Admin users= root,fred  //设定拥有共享管理特权的用户。即这些用户拥有些共享资源的管理权限。 @开头则表示一个组, +开头表示为UNIX组, &开头表示为NIS组。
(14)Invalid users=root //设定不允许访问此共享资源的用户或组。
(15)Valid users =root  //设定仅允许指定的用户或组访问此共享资源,其他所有用户都不能访问。

(16)Max connections =10  //设置此共享资源的最大连接数。此例为10个用户。

以上设置类似于WINDOWS共享资料夹的共享权限,下面还要以定义如WINDOWS下的安全权限的参数。

(17) create mode 和create mask
Create mode=0664 //定义用户在此共享资源中创建的文件的权限。 此例中为:拥有者和拥有者组有读和写的权限,而其他用户仅为读的权限。
(18)directory mode  和directory mask
Directory mode =0775 //在共享文档中创建的文件夹的权限。 此例为拥有者和组有读写执行的权限,其他用户只有读和执行的权限。

(19)force create mode =0755 //即强制性规定在共熟文档下创建的文件至少拥有755的权限。即最低权限的设定。可以覆盖 create mode 设定的权限。当create mode中的权限与此处设定的权限相冲突时,取两者中权限高的。如果此处设定的权限比较低,而create mode中设定的权限比较高(假如为777),将以create mode中定义的777权限为准。

(20) force directory mode =775  //此项与上面的意思一样,只是此处定义的是创建文件夹的最低权限。

(21)force group 和force user //规定创建的文件或文件夹的拥有者和组拥有者是谁 。一般这两个值来空,则表示拥有者和组拥有者为创建文件者。 如设定值,如force group=khp 
Force user=khp,则不管是谁创建的文件和文件夹,拥有者都为khp和khp组。
(22)public = yes //是否允许匿名访问



2、特殊区段的设定之[home]
此字段的设定一般不要更改。
当客户端向SAMBA服务器请求建立到共享资源的连接时,将扫描samba服务器上的所有共享资源,如果有匹配的共享资源则使用。如果没有找到,则请求的共享被当作一个用户名称,并在口令工具(etc/password)中查找,如果存在这个用户名,且得到确认,则从[home]区段中复制且创建一个共享。当创建这个从[home]中复制的共享时,[home]中没有设定目录(共享目录路径),则共享的路径被设为这个用户的宿主目录。
如果查找没有这个用户名,刚查找是否有 [prints]共享,并用请求的共享名称,看是否与某一打印机相匹配,如匹配则复制[prints]区段建立共享。如果都没有,查看是否有默认共享服务。如果连默认共享服务都没有则返回一个错误。

例如:客户查找samba服务器上是否有一个名为 khp的共享文件夹,但没有发现有共享这个文件夹,就查找/etc/password ,看是否有一个khp的用户名,如果有,从[HOME]中复制并创建一个共享。且共享文件夹的目录为:/home/khp   即,khp用户的宿主目录。
如没找到这个用户名,则看smb.conf中是否有一个[prints]区段,如果有,看请求的共享与printcap 文件中的任一打印机相匹配。如果匹配则复制并创建共享。
如果仍没找到,则看是否有默认的服务。没有的话就返回一个错误信息。

3、特殊区段的设定之[prints]


Commont   //注释文字
Path=/var/spool/samba  //此处为打印机共享的目录。客户端使用samba共享打印机打印东西时,先把打印的信息发送到此文件夹下排队,samba再指定文件往哪个打印机上打印。如果没有指定就一直存放在此目录下。
Printable= yes //允许共享打印机,即用户可以共享打印机。
Samba从/etc/printcap中获取打印机的列表。如果有些打印机类型没有此默认文件,则可手工建立一个。

Load printers=yes //是否加载printcap文件夹中的所有打印机以供浏览。
Printcap name= /etc/printcap   //设定查找共享打印机printcap文件的位置。可更改。
Print =lp //当客户关闭打印文件后,应将打印的文件发送到哪个打印机。即指定打印机。
Printer driver = hp 2200 //  给客户端提供打印机的驱动名称
Printer driver file=   //为客户端提供驱动。指定驱动的存放位置,客户端可以自动的安装驱动。