【51CTO专稿】Linux下进行资源共享有很多种方式,Samba服务器就是最常见的一种。Samba服务器可以让Windows操作系统(Windows 2000/XP/2003等)用户访问局域网中Linux主机,就象访问网上邻居一样方便。如图1所示,图中的服务器运行Samba服务器程序,其操作系统是Linux。该服务器通过Samba可以向局域网中的其他Windows系统提供文件服务。同时,在Linux服务器上还连接了一个共享打印机,打印机也通过Samba向局域网的其他Windows用户提供打印服务。
图1 由Samba提供文件和打印服务的局域网
1、Samba工作原理
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变种上运行。
2、Samba服务器的功能
文件共享和打印共享是Samba最主要的功能。Samba为了方便文件共享和打印共享,还实现了相关的控制和管理功能。具体来说,Samba完成的功能有:
- 共享目录:在局域网上共享某个或某些目录,使得同一个网络内的Windows用户可以在网上邻居里访问该目录,就跟访问网上邻居里其他Windows机器一样。
- 目录权限:决定每一个目录可以由哪些人访问,具有哪些访问权限。Samba允许设置一个目录让一个人、某些人、组和所有人访问。
- 共享打印机:在局域网上共享打印机,使得局域网的其他用户可以使用Linux操作系统下的打印机。
- 打印机使用权限:决定哪些用户可以使用打印机。
安装和配置好了Samba服务器后,Linux就可以向局域网中的Windows用户提供文件和打印服务了。
3、SMB协议
在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的安装、简易配置以及启动和停止的指令。
#p#
4、安装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.9 Load smb config file from smb.conf Processing 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.
5、启动及关闭Samba服务器
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服务的过程如下:
- 打开System Services窗口,在Linux终端窗口中输入setup命令,Linux出现Text Mode Setup Utility窗口。在Text Mode Setup Utility窗口中选中System Services菜单项。如图2所示。
- 在System Services窗口选中smb菜单项即可。
图2 System Services窗口
到这里为止,Samba服务器的准备工作基本就完成了。接下来就是要通过Samba服务器实现Linux与Windows之间的互访。
#p#
6、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所示界面。
以上就是Samba服务器的简易使用说明。在Linux下实现资源共享还有其他几种方法,我们将在接下来几天为您一一分解。
作者介绍:李洋,信息安全专家,博士毕业于中科院计算所,ACM/IEEE会员。自2001年以来一直从事计算机网络信息安全领域的研发工作,曾主持和参与多项国家重点项目以及信息安全系统和企业信息安全系统的研发工作。具有丰富的系统应用、管理、安全及内核的研发经验。他的博客:http://patterson.blog.51cto.com/
【编辑推荐】