分类: LINUX
2008-05-05 16:49:46
Samba是葡萄牙语“韵律、舞蹈”的意思,它来源于西非班图语“Samba”,意思是祈祷祖先的精神。在班图语中Samba作为动词的意思是“喊”或“伤心沮丧”。而在巴西语中,Samba指一个女性宗教舞蹈演员。
在UNIX系统中,“Samba”是通过服务器信息块(SMB)协议在网络上的计算机之间远程共享UNIX文件和打印服务的软件包。SMB是基于NetBIOS的协议,传统上用在LAN Manager、Windows和OS/2网络中访问远程文件和打印机,统称为共享服务。SMB为网络资源和桌面应用之间提供了紧密的接口,与使用PC-NFS、FTP和LPR等协议相比,使用SMB协议能把二者结合得更加紧密。Samba是基于TCP/IP(NBT,参见RFC1001和RFC1002)的SMB协议在UNIX中的实现。从Windows或LAN-Manager的角度,通过Samba共享的UNIX资源就像在另一台Windows或LAN-Manager服务器上一样,不需要任何其他的桌面客户软件就可以访问。任何对该产品有兴趣的人都可以免费得到它的源代码和可执行文件。
Samba的开发者是Andrew Tridgell。他是从1991年12月开始着手开发Samba的,当时他还是澳大利亚国立大学计算机科学实验室的研究生。根据他自己的解释,在他测试DEC公司eXcursion软件Beta版时,试图反汇编DEC公司DOS下的Pathworks网络所用的文件共享协议程序,并因此产生了这一思想。eXcursion为PC机提供了X Window服务。在测试eXcursion时不能使用PC-NFS的文件共享协议,并且需要用Pathworks进行安装。这样产生了一个问题:Pathworks限制了DEC平台的网络文件服务功能,使之只能运行Ultrix或VMS。
作为一个具有开放系统思想的人,Andrew决定监视Pathworks的网络流量,以检查是否有可能将该协议移植到其他平台上。这需要对网络编程有一定的研究,而且需要使用软件工具捕获网络中的报文。在对Pathworks的报文数据进行逐位逐字节的分析之后,他已经能够在Sun计算机平台上设计一些基本的文件操作了。在对协议进行研究时,他阅读了关于NBT的RFC文档。尽管他无法确定NBT标准和他的SMB应用之间的关系,他仍然继续工作,并在1992年1日推出了“ Server 0.1”。
接下来的几个月,Andrew继续将该软件向其他非DEC平台移植。这项工作还包括修补bug和增加一些功能。然后他推出了一个新的版本,“Server 1.0”,并在Internet上发布了这一软件。接下来,像所有成功的软件开发项目一样,在随后的几年里,软件的代码按照用户的需要进行了相应的修改。
在收到一个名叫Dan Shearer的Linux迷对此软件的非常感兴趣的来信后,这个项目又继续进行。此外,DEC公司也发来请求,希望他们能将该软件封装在随Alpha版一起发布的CD盘中。而Linux与PC机的互连,以及Microsoft SMB标准的制定,也进一步推动了Samba的发展。在1993年12月,该项目以“Samba for UNIX”的名字重新露面。“Server”也被“smbserver”所替代,然而,由于商标上的歧义,这一名字在不久以后就被放弃了。在为软件重新命名的过程中,Andrew在UNIX的/usr/dict/words 数据库中找到了一个含有“SMB”的词。这样“Samba”这一名字就诞生了。
Internet上的用户对Samba非常感兴趣,他们需要有一个关于Samba的专用网站,在那里能容易地访问Samba最新版本和更新。人们还建立了邮件讨论列表和新闻组,提供了一个讨论问题、报告bug、以及提出新项目的论坛。由于Samba发布中包含源代码,很快就有人进行移植和改进。这些工作将Samba从一个仅由个人开发的项目扩展为研究机构和厂商开发的项目。随着时间的流逝,一个最初大约只有20个成员的开发小组现在发展为著名的Samba小组。Samba也已移植到绝大多数版本的 UNIX以及其他许多操作系统中。Samba小组还参与了制定与SMB和CIFS应用相关的标准的工作。
我们已经讨论了为了方便Windows和LAN Manager客户共享UNIX文件系统和打印机,Samba是如何完成SMB协议的UNIX实现的。我们还要讨论Samba是如何将UNIX紧密地结合在这些环境中。
Samba通过两个UNIX服务守护进程nmbd和smbd实现了Windows的域和工作组功能。nmbd守护进程既可以提供 NetBIOS域名服务,也可以提供NetBIOS浏览服务。而smbd守护进程则提供了SMB协议的资源共享功能。这两个守护进程和其他辅助性的管理工具以及客户命令一起,提供了以下功能:
• NBNS、WINS和DNS服务。
• 网络浏览服务。
• UNIX和Windows域之间的认证和授权网关。
• Windows和UNIX网络中的满足CIFS协议的UNIX文件共享。
• Unicode字符集和域名映射。
• 网络文件系统服务可见的oplock。
• 在Windows和LAN Manger网络中共享UNIX打印机,包括自动为Windows9x客户安装驱动程序。
• UNIX客户访问Windows文件系统。
• UNIX作为域中的客户。
• UNIX作为最小主域控制器。
和其它网络服务一样,它们的配置文件都在/etc/下
[root@ts3-142 samba]# pwd /etc/samba [root@ts3-142 samba]# ls -l total 36 -rw-r--r-- 1 root root 20 03-24 22:00 lmhosts -rw------- 1 root root 8192 07-07 02:00 secrets.tdb -rw-r--r-- 1 root root 9871 07-07 02:08 smb.conf -rw------- 1 root root 0 07-07 02:00 smbpasswd -rw-r--r-- 1 root root 97 03-24 22:00 smbusers
我们来配置一个简单的Samba例子,使Windows客户端能访问linux上的共享。
1、在linux上创建一个目录/data
[root@ts3-142 samba]# mkdir /data
2、添加一个Samba用户
[root@ts3-142 samba]# useradd smbtest [root@ts3-142 samba]# smbpasswd -a smbtest New SMB password: Retype new SMB password: Added user smbtest.
3、编辑/etc/samba/smb.conf,在最后面添加如下几行:
[Mysamba-share] path = /data guest ok = yes writable = no valid users = smbtest
4、重起Samba服务 5、在Windows客户端测试。
首先,在地址栏输入\\smb-server-ip,如图:
然后输入用户名和密码,此用户名和密码是我们在第2步所设置的。我这里输入的是“smbtest”和它的密码,然后确定。 我们会看到我们共享的目录以及用户smbtest自己的HOME目录。如图:
6、这样我们就实现了用Windows访问linux的文件共享了。