Samba的工作原理是,让Windows系列操作系统网络邻居的通讯协议——NETBIOS(NETwork Basic Input/Output System)和SMA(Server Message Block)这两个协议在TCP/IP通信协议上运行,并且使用Windows的NETBEUI协议让Linux可以在网络邻居上被Windows看到。其中最重要的就是SMB(Server Message Block)协议,在所有的诸如Windows Server 2003、Windows XP等Windows系列操作系统中广为应用。Samba就是SMB服务器在类UNIX系统上的实现,目前可以在几乎所有的UNIX变种上运行。
文件共享和打印共享是Samba最主要的功能。Samba为了方便文件共享和打印共享,还实现了相关的控制和管理功能。具体来说,Samba完成的功能有:
安装和配置好了Samba服务器后,Linux就可以向局域网中的Windows用户提供文件和打印服务了。
在NetBIOS出现之后,Microsoft就使用NetBIOS实现了一个网络文件和打印服务系统,该系统基于NetBIOS设定了一套文件共享协议,Microsoft称之为SMB(Server Message Block)协议。这个协议被Microsoft用于它们的Lan Manager和Windows服务器系统中,而Windows系统均包括这个协议的客户软件,因而这个协议在局域网系统中影响很大。
随着Internet的流行,Microsoft希望将这个协议扩展到Internet上,成为Internet上计算机之间相互共享数据的一种标准。它将原有的几乎没有多少技术文档的SMB协议进行整理,重新命名为CIFS(Common Internet File System)。因此,为了让Windows和UNIX计算机相集成,最好的办法即是在UNIX中安装支持SMB/CIFS协议的软件,这样Windows客户就不须要更改设置,就能如同使用Windows NT服务器一样,使用UNIX计算机上的资源了。
下面介绍Samba的安装、简易配置以及启动和停止的指令。
用户在主流的Linux版本(如Fedora和CentOS下)都可以采用如下命令进行安装:
#yum -y install samba
在创建配置文件以后(一般情况下,安装好Samba软件后,其配置文件为缺省状态),需要测试Samba正确性。首先确认客户和服务器之间可以互通。如果网络不能工作,则Samba必然不能工作。
我们使用testparm程序。testparm是一个简单的程序,用于检查/etc/smb.conf文件的内部正确性。如果该文件报告没有问题,则可以确定smbd可以成功地加载该配置文件。请注意:使用testparm并不能保证在配置文件中指定的服务可用或者工作正常。这种测试只保证Samba可以读取和理解该配置文件。
testparm命令行如下:
testparm [configfile [hostname hostip]]
当smb.conf文件不在默认位置时,使用configfile可以(/etc/smb.conf)指明其位置。可选参数hostnamehostip指示testparm查看该主机是否有权限访问smb.conf文件中提供的服务。如果指定hostname,则必须还指定该主机的IP地址。否则结果不可预知。
下面的例子演示了testparm运行的输出。如果有某些错误,testparm程序会给出特定的错误消息报错:
//测试smb.conf文件配置是否正确//该测试只能测试smb.conf文件配置是否正确,并不能保证Samba服务器正常工作#testparm smb.conf gjspring 15.26.40.9Load smb config file from smb.confProcessing section “[home]”Processing section “[GONGsprn]”Load services OK .Allow connection from gjspring(15.26.40.9)to homes.Allow connection from gjspring(15.26.40.9)to GONGsprn.
Samba服务器的启动有两种方式,一种是Linux终端命令行形式,一种是使用Linux提供的System Services方式。下面将分别介绍这两种启动方式。
(1)Samba的命令行启动和关闭
安装并配置好Samba后,可以在Linux终端将Samba启动,也可通过终端命令行将已经启动的Samba服务关闭。若要启动Samba,必须以管理员身份登录Linux,如果是以普通用户身份登录Linux,可以在终端输入如下命令切换到管理员身份:
#su root //暂时切换到系统管理员身份登录系统,系统会提示用户输入root密码
切换到root用户后,在命令行输入如下命令可启动Samba:
#smbd start //启动samba服务器
smbd是Samba的服务守护进程,时刻侦听网络的文件和打印服务请求,该程序默认安装在/usr/sbin/目录下。一般情况下,该目录是系统默认目录,也就是说如果shell在用户当前目录下找不到输入的命令时,系统会自动到/usr/sbin/目录下查找输入的命令。如果该目录没有设置成系统默认目录,用户也可以手动将当前目录更改到该目录,然后执行smbd守护程序。
同理,若用户欲关闭Samba服务,可以在命令行输入如下命令:
#smbd stop //停止samba服务器
系统将中止smbd守护进程,局域网内的Windows用户将不能再访问该系统提供的文件或打印服务。
在某些特定情况下,用户可能希望重新启动Samba服务器,用户可以先关闭Samba服务器,然后再启动服务器,过程如下:
#smbd stop //停止samba服务器#smbd start //启动samba服务器
Samba为这种操作提供了简便操作方式如下:
#smbd restart //启动samba服务器
Samba服务器由两个守护程序组成,smbd和nmbd.smbd守护程序提供文件和打印共享服务,nmbd守护程序提供NetBIOS有名服务器支持。可以从init脚本或者xinetd作为系统服务运行Samba。因为RedHat默认在每次引导系统时从init脚本启动SMB服务,而不是从xinetd作为服务引导,因此可以使用以下命令启动或者停止SMB服务器:
#/etc/rc.d/init.d/smb start#/etc/rc.d/init.d/smb stop
(2)在System Services中启动和关闭Samba服务
Linux提供了System Services方式启动或关闭系统服务。如果用户系统已经安装Samba服务,则可以在System Services窗口中看到smb服务选项。在System Services中启动Samba服务的过程如下:
图2 System Services窗口
到这里为止,Samba服务器的准备工作基本就完成了。接下来就是要通过Samba服务器实现Linux与Windows之间的互访。
Samba共享可以由SMB客户在Windows或Linux平台访问。Windows访问Linux系统共享文件一般通过网络邻居或Windows的IE浏览器;Linux访问Windows系统下共享文件一般通过smbclient和smbmount命令实现。
(1) Windows客户使用Linux系统共享文件
一个正确配置的Samba共享可以通过Windows网络邻居或Windows的IE浏览器访问。其访问路径一般具有如下格式:
网上邻居\整个网络\工作组名\Linux机器名Linux系统下目录
如果有问题,最值得怀疑的是Windows还不知道Samba服务器、用户和口令大小写的问题以及明文和加密口令问题。如果是Windows还不知道Samba服务器,则在找到该计算机的Windows窗口刷新屏幕,等待几分钟或者重新引导Windows客户。如果是用户和口令大小写的问题,则在[global]段中临时将用户名级和口令级设置足够大,如100。如果是明文和加密口令问题则在[global]段中设置encrypt passwords=yes和smb passwdfile=/etc/smbpasswd。
(2)用smbclient工具访问局域网上的Windows系统
在Linux系统下访问局域网上其他系统(包括Windows系统和Linux系统)的共享文件,有很多种不同的方式。下面我们先介绍smbclient工具。
用smbclient工具可以访问局域网上的Windows系统的SMB共享。smbclient提供一个类似FTP的界面,允许与另一个运行SMB服务器的网络共享的计算机进行文件传输。mbclient将另一个共享作为本地目录加载。smbclient提供命令行选项查询服务器可用的共享目录或者交换文件。关于所有命令行选项的详细信息,参考smbclient手册页。表1列出了smbclient工具最常用的一些命令及其功能。例如可使用如下命令列出计算机15.26.40.9上所有共享文件:
#smbclient –L 15.26.40.9
其中,- L参数要求列表输出,15.26.40.9是欲访问机器的IP地址,也可以使用任何可以解析为该IP地址的机器名。若要传输一个文件,必须首先使用以下命令连接到Samba服务器:
#smbclient //15.26.40.9/homes -U gong
其中,参数//15.26.40.9/homes指定另一台计算机上的远程服务。通常是一个文件系统目录或者打印机。任何解析为该IP地址的名字都可以替换该IP地址。-U选项允许指定希望用于连接的用户名。还有许多其他的smbclient命令配置,详细的信息请参阅smbclient手册页。如果该用户需要口令,则smbclient工具提示输入口令,然后出现如下提示:
smb: \
\表示当前工作目录。下面列出smbclient的所有命令参数如表1所示:
表1 smbclient的参数及其含义
参 数 |
含 义 |
?或help [命令] |
提供命令的帮助消息,当不指定命令时提供一般的帮助 |
![shell命令] |
执行指定的shell命令或者为用户提供shell提示符 |
cd [目录] |
更改服务器上的指定目录(不是本地计算机)。如果不指定目录,则smbclient报告当前的工作目录 |
lcd[目录] |
在本地计算机上更改到指定的目录。如果不指定目录,则smb-client报告本地计算机上当前的工作目录 |
el[文件] |
如果用户拥有权限,则删除服务器上的指定文件。文件可以包含通配符 |
dir或ls[文件] |
列表显示指定的文件 |
exit或quit |
退出smbclient程序 |
get |
获得指定的远程文件并在本地服务器上保存该文件。如果指定了本地名称,则复制的文件以该文件名而不是远程服务器上的名称保存 |
mget[文件 |
复制所有指定的文件,包括所有匹配通配符的文件到本地计算机 |
md或mkdir[目录] |
在远程计算机上创建指定的目录 |
rd或rmdir[目录] |
在远程计算机上删除指定的目录 |
put |
从本地计算机上复制指定的文件到服务器 |
mput[文件] |
从本地计算机上复制所有指定的文件到服务器 |
print[文件] |
在远程计算机上打印指定的文件 |
queue |
显示在远程服务器上排队的所有打印作业 |
(3)用smbclient工具访问局域网上的其他系统
为了访问方便,可以使用smbmount命令允许将一个Samba共享加载为本地目录。要实现该功能,在本地工作站创建一个/mnt/test目录。使用root用户运行以下命令:
#/usr/sbin/smbmount ‘//15.26.40.10/homes’ ‘/mnt/test’ –U gong
该命令应在本地机器上运行,而且该机器应已经包含/mnt/test目录。Samba服务器在IP地址为15.26.40.9的机器上,本地机器可以通过网络可以访问此服务器。注意任何解析为该IP地址的名字都可以替换该IP地址。在本地计算机上运行上述命令,以用户gong登录,将[homes]段中定义的共享加载到本地/mnt/test目录。
要卸载该目录,可作为root用户运行下面的命令:
#smbumount /mnt/test
(4)用LinNeighborhood访问局域网上其他系统的共享文件
LinNeighborhood基于GUI界面,可用于在Linux系统下浏览局域网上运行Windows操作系统的“网络邻居”或其他运行Samba的Linux系统共享文件。下面介绍LinNeighborhood的用法。
1)下载LinNeighborhood软件包:首先到网上下载LinNeighborhood软件包。一般情况下LinNeighborhood软件包的提供形式是.tar.gz文件,现在的最新版本是0.6.5版,其文件名为LinNeighborhood-0.6.5.glibc-i386.tar.gz。下载后保存到某个目录。这里假设用户保存到/temp目录。
2)解压缩并解包文件:执行下述命令可以完成文件的解压缩和解包。
#cd /temp //切换目录#tar xvfz LinNeighborhood-0.6.5.glibc-i386.tar.gz //解压缩
3)执行程序:软件不用任何设置,就可以直接执行。若欲执行LinNeighborhood,直接找到可执行文件输入LinNeighborhood命令即可。例如步骤(2)解压缩解包后,可以输入以下命令执行程序:
//找到LinNeighborhood可执行文件所在目录,输入可执行文件名打开LinNeighborhood
#cd /temp/LinNeighborhood-0.6.5.glibc-i386#./LinNeighborhood
打开程序出现如图3所示界面。
图3 LinNeighborhood窗口