提到samba,总是让人联想到热情奔放的桑巴舞,一个linux下的网络服务,为什么会有这样一个有点奇怪的名字呢?其实,linux下很多的网络服务都有一个很有个性的名称,并且这些名称还有各自的说法甚至故事,了解它们的由来是很有意思的事情,可以大大增 加学习这些网络应用的兴趣。 samba是在1991年由一个叫作Andrew Tridgell的澳大利亚大学生编写的,目的是为了能在unix和dos上方便地进行文件共享, Andrew Tridgell最初把自己编写的这段程序命名为Server Message Block (SMB),但是smb是个缩写,而samba中既包含了smb,又是热情奔放的桑巴舞的名称,Andrew Tridgell就选择它来命名自己的程序,也就有了先在使用很广泛的“samba”这个网络服务的名称。 在samba组织的官方页面()上,是用这样一段话定义samba的--“Samba is an Open Source/Free Software suite that provides seamless file and print services to SMB/CIFS clients ” samba官方组织的定义强调了samba的开源的,并且是为SMB客户端和CIFS客户端提供文件服务和打印服务的套件。 samba 的发展历史 最初,Unix和Unix之间进行文件共享的是nfs,在客户端可以将nfs服务提供的共享目录mount到本地,并且就像本地目录那样使用,nfs的本意也就是network file system,但是它只能在Unix和Unix之间共享文件。 后来,微软在dos中,加入了允许NetBIOS管理磁盘I/O的新特性,这样就使得可以在网络上将硬盘中的资源都共享出来。在windows中,文件共享程序就是众所周知的CIFS。Widnows和widnows之间进行文件共享使用CIFS。 为了使widnows机器和Unix机器之间也能方面的共享文件,samba应运而生。 Samba经历了几个大版本的升级,目前比较新的版本是samba3.0.23d,更多的新版本信息,我们可以通过它的官方主页了解到。
#rpm -qa |grep samba 能到名称中包含samba的几个rpm包,它们通常包括samba-client、samba-common和samba,其中samba-client主要提供了linux作为samba客户端时需要使用的smbmount、smbclient命令等;samba-common主要提供了samba的配置文件(smb.conf)和调试工具(testparm);而samba则主要提供samba的主要进程、帮助文件和启停管理等资源。 2 初次体验samba共享 修改配置文件 确认了红旗linux中已经包含了samba的包以后,就可以准备开始用samba配置自己的共享了, 实现最简单的共享功能,只需要修改几个基本的配置参数。红旗linux中,配置文件位于/etc/samba/目录中,可以看到,smb.conf配置文件中是以中括号括起的名称为一段开头的,我们在[global]中进行samba的全局配置: [global] workgroup = COMPANY #规定加入哪个工作组或者域 netbios name = REDFLAG #规定共享主机名 security = USER #这是个重要的安全参数,有4个值;user是默认的安全级别,后面我们会再讲到这个参数
每一个登录samba server的用户都可以拥有自己的主目录,只有主目录拥有者可以登录,浏览和在自己的主目录中创建文件: [homes] comment = Home read only = no #read only与writables呼应,可以控制对目录的读写权限 writable = yes browseable = no #在server的共享资源中不可见 还可以配置共享打印机,通常smb.conf文件中默认带有这一段: [print$] comment = Printer Drivers Download Area path = /var/samba/printer guest ok = Yes 在文件最后定义想要共享出去的文件夹,例如是/opt/files目录,而希望被看到的共享名称是music: [music] path = /opt/files #本地文件夹路径 read only = yes #目录是只读共享 public = ok #所有用户都可以访问 好了,保存配置文件。 现在可以使用刚才提到的调试工具testparm来检测配置文件: #testparm Load smb config files from /etc/samba/smb.conf Processing section "[homes]" Processing section "[print$]" Processing section "[music]" Loaded services file OK. Server role: ROLE_STANDALONE Press enter to see a dump of your service definitions 提示我们“Loaded services file OK.”,说明配置文件没有错误,如果按下enter键,还可以列出去除注释语句的配置文件,这样看起来更加一目了然。 修改配置文件后,还需要启动samba服务。 #service smb start Starting SMB services: [ OK ] Starting NMB services: [ OK ] Samba的主配置文件的参数超过200个,篇幅有限,我们只列举了几个比较常用的参数,随着后文的深入,我们会逐渐接触到更多的功能,遇到配置文件中的新参数,我们会以注释的方式进行说明。 使用samba客户端访问共享资源 smbmount可以用来将samba server提供的共享资源挂在到本地,使用方法类似于mount, mount -t smbfs -o username=tridge,password=foobar //fjall/test /data/test 这是不加任何参数输入smbmount命令后,给出的一个命令使用示例;其中,username后面写samba用户名,password后面写samba用户口令,//后面写samba server的名称或者ip地址,当然samba server的名称要经过解析才能使用,然后/后面是共享文件夹的名称,最后写本地的一个挂载目录。如果使用过mount命令,对这个命令就会很容易理解,它也相当于是mount命令的一种扩展。 如果在/etc/fstab文件中定义一行,在linux启动的时候就挂载samba server上的资源,则有点类似widnwos上的网络映射驱动器了。 smbclient -L hostname <-U username> 可以列出指定samba server上的的共享资源。 smbclient \\\\server\\共享名 <-U username> 登录samba server,使用网络共享资源;登录后的指令类似ftp,这里就不再详述。
关键词security security控制了samba服务器的验证方式,它有4个值,分别是share、user、server和domain, 这4个安全级别的定义如下: share:所有用户都可以不用提供用户名和密码,就可以访问samba服务器上的共享资源,安全级别是最低的。 user:用户在访问samba服务器上的共享资源时,需要先提供用户名和密码进行验证,通常情况下,samba都运行在这个级别上。 samba有单独的用户帐号,系统用户不一定都是samba用户,但是要添加samba用户,首先要添加系统帐号,然后再使用smbpasswd将系统帐号添加到samba用户帐号中。 例如,已经建立了系统帐号work,现在需要将这个帐号添加到samba中: #smbpasswd -a work New SMB password: Retype new SMB password: Added user work. samba的密码不需要与系统帐号的密码相同。 samba的密码文件是/etc/samba/目录下的smbpasswd,添加一个系统帐号为samba帐号后,都会在这个文件中生成一行,记录了帐号与口令的对应信息。 server:普通用户不会感觉到server极和user级有什么不同,用户在访问samba服务器上的共享资源时,仍然需要提供用户名和密码,但是可以由另外的服务器来进行统一验证,如果验证失败了,那么降到user级,进行本地验证,如果成功,可以访问共享资源。 domain:samba把用户名和密码windows域控制器(PDC)进行验证,同样,如果验证失败了,那么降到user级,进行本地验证。 在后面,我们会讲samba是如何在这个级别上加入windwosPDC并实现文件服务器功能的。在实际中,有些项目提出linux是否可以实现类似widnowsPDC的功能,我们的解决方案是使用linux的ldap进行统一验证,将ftp文件服务器、samba文件服务器、邮件等等资源管理起来,可以替代windows实现域管理功能,这种实现方式是很具有实际意义的。