所周知,Unix和Windows系统采用的是完全不同的文件系统,从比特级上就有极大差异,这种底层设计思路上的不同对两种系统平台的共存和共享是一个很大的挑战。本期我们选择了下面这篇文章,希望给广大网管朋友提供一个解决资源共享问题的方法,同时也希望大家把自己想到的好办法提供给我们,通过我们的杂志与全国同行共享您的宝贵经验!
众所周知,Unix和Windows系统采用的是完全不同的文件系统,从比特级上就有极大差异,这种底层设计思路上的不同对两种系统平台的共存和共享是一个很大的挑战。本期我们选择了下面这篇文章,希望给广大网管朋友提供一个解决资源共享问题的方法,同时也希望大家把自己想到的好办法提供给我们,通过我们的杂志与全国同行共享您的宝贵经验!
需要说明的是,由于在与Windows共享的问题上Linux与Unix有诸多类似,本文中所指Unix均含Linux。
这些年来,Unix与Windows操作系统各自拥有其支持者及相应的市场份额,在很多企业和学校里,都同时存在Unix与Windows系统的电脑终端。Windows主机彼此间可以利用网上邻居达到资源共享的目的,Unix系统之间也能通过NFS(Network File System,网络文件系统)实现目录共享,而Unix和Windows之间由于采用了完全不同的文件结构,无法直接实现资源共享,本文就为大家介绍一种利用Samba服务器来实现Unix与Windows间资源共享的办法。
在介绍如何安装及使用Samba服务器之前,我们先来谈谈它所应用的理论基础。
在Unix系统中,"Samba"是通过服务器消息块协议(SMB,Server Message Block)在网络上的计算机之间远程共享Unix文件和打印服务的软件包。虽说大多数人都不清楚,但事实上,任何使用Samba和微软Windows组网协议的人都在使用SMB协议。SMB协议是Windows使用共享文件和打印服务的标准化协议,它可以在两台计算机之间共享文件、打印机、接口,也支持共享通信元素,如邮件和命名管道。SMB协议以请求回应的方式运行,当客户机发送请求时,请求包含在SMB协议中传到服务器。服务器收到这些信息,经过解释,对客户机发回应答。当一台计算机通过SMB协议在网络上共享资源时,它就变成了这种模式下的服务器。当一台计算机隶属于共享资源时,它就变成了客户机。一旦客户机连接到服务器上并且被授权,该客户机就可以向服务器发送命令,来打开文件、读写文件、关闭文件、删除文件、查找目录和执行其他文件和目录命令。SMB协议是一种应用层协议,Samba就是在TCP/IP基础上实施SMB协议的应用软件(关于SMB协议更详细的资料,可以访问,这里有针对SMB协议的较为详细的阐述)。
Samba是一个开放源代码的软件,任何拥有GNU通用公共许可证(GPL)的人都可以使用,任何对该产品有兴趣的人都可以免费得到它的源代码或可执行文件。您可以通过获得有关Samba的详细信息,同时在此主页,也可以取得Samba软件的最新版本(当笔者撰写本文时,最新版本为2.2.7)。
Solaris和Linux是我们在网络应用中使用较多的网络操作系统,下面我们分别以这两个操作系统为例来介绍如何使用Samba软件实现与Windows系统的资源共享,其中Solaris使用的是Solaris 8 for SPARC,Linux使用的是Red Hat Linux 7.3 for x86。Samba软件的使用主要包括三个部分:在Windows系统上访问Unix的共享资源、在本地或远程通过浏览器来管理Samba服务器、在Unix系统上访问Windows的共享资源,下面我们就依次介绍。
一、安装Samba
在Red Hat Linux 7.3中已经自带了Samba软件,如果您在安装系统时没有选择安装,那么可以从Samba的官方站点下载其rpm版本,执行下面的命令安装:
# rpm -ivh samba-2.2.7-1.i386.rpm
在Sun公司最新发布的Solaris 9中已经自带Samba 2.2.0,但在Solaris 8及以前的版本中需要将Samba作为第三方软件包安装,可以从Samba的官方站点或下载,解压安装:
# gzip -d samba-2.2.2-sol8-sparc-local.gz
# pkgadd -d samba-2.2.2-sol8-sparc-local
二、配置Samba在Windows系统上访问Unix的共享资源
(1)配置Samba服务器
下面介绍如何手工配置Samba的配置文件smb.conf以使samba成为一个符合需求的文件服务器。在Solaris 8中当安装完Samba之后,安装程序并没有为Samba服务建立配置文件smb.conf,而需要用户创建该文件。方法如下:
# cd /usr/local/samba/lib
# vi smb.conf
Red Hat Linux 7.3如果默认安装samba,则会自动产生smb.conf配置文件,且每个设置项有详细的注释,只需在其配置文件上修改即可:
# vi /etc/samba/smb.conf
smb.conf配置文件类似于Windows系统中的.ini文件,由一系列单元组成,每个单元包含一系列参数,这些参数控制了Samba的行为方式。除了三个特殊单元global、homes和printers外,还有一个单元描述了一个单独的共享资源,客户端连接到这些共享资源,然后访问共享资源中的文件。用户可在文件smb.conf中插入注释,帮助自己和他人更好地了解文件所要完成的任务。有两种插入注释的方法:在注释行前插入分号";"或英镑符"#"均可。一般来说,注释符仅对当前行有效。用户也可以使用标准Unix连接字符将注释行扩展到一行以上,也就是说,用户可在行的结尾处放置一个反斜杠"\",这样就能强制Samba将下一行当成是本行的继续。下面我们创建一个简单的smb.conf配置文件,并对其意义加以解释。如下:
[global]
# 此区域设定Samba服务器的整体环境。
netbios name = no1
# 设定Samba服务器的NetBIOS名称。若不设定此参数,且Samba服务器主机的域名为no1.cuug.com,则默认值将设为no1。
workgroup = cuug
# 设定Samba服务器所要加入的工作组的名称。
server string = %h Samba Server %v
# 指定浏览列表里的主机描述。可以是任何字符串,也可以不填,在此字符串中可指定2个变量:
%h:显示执行Samba服务器的主机名称
%v:显示Samba服务器的版本编号
若将参数设成以上范例,将会在客户端说明中看到结果:sun Samba Server 2.2.2。
hosts allow = 166.111.1.*
# 允许连接的主机地址,默认允许所有主机可以访问,因此不设定也可以。
以下范例允许来自166.111.1.*的所有主机连接,但166.111.1.1主机除外:
hosts allow = 166.111.1.* EXCEPT 166.111.1.1
以下范例将允许来自150.203.5.*及no2主机连接:
hosts allow = 150.203.5.no2
printcap name = /etc/printcap
# 打印机设定文件存放的位置。
load printers = yes
#是否要载入打印机设定文件printacp,默认值为"yes"。
log file = /var/log/samba/log.%m
#设定日志文件的存储位置,"log.%m"表示依登入账号名称来生成不同名称的记录文件。
max log size = 50
# 设定日志文件的最大尺寸,上述范例设置此文件最大不得超过50Kb,若设成"0"则表示没有限制。
security = user
# 设定安全级别,Samba一共有4种不同的安全等级:
1.Share:用户不需要账号及密码即可登入Samba服务器。
2.User:Samba服务器默认的安全等级,检查账号及密码的工作由Samba服务器负责。
3.Server:检查账号及密码的工作指定另一台Windows服务器或Samba服务器负责。
4.Domain:指定Windows服务器来验证用户所输入的账号及密码。
除了share等级之外,其他3种等级,用户均必须输入正确的账号及密码才能登入并使用Samba服务器的共享资源,本例我们使用user等级,这也是我们使用最多的官方推荐的等级。
encrypt passwords = yes
# 设定当Samba用户端将账号与密码传送到服务端时,是否采取加密的方式。由于Windows95 OSR2及NT SP3以后的版本,默认均采用加密的方式传送密码,所以采用这些版本的主机,需要在Samba服务端,将此选项设成"yes",缺省是注释的。
smb passwd file = /usr/local/samba/lib/smbpasswd
# 指定对用户口令校验的密码文件,从安全起见,smbpasswd文件的存取权限应设为600。如果使用Red Hat Linux 7.3则默认此目录为/etc/samba/smbpasswd。
[homes]
# 当用户请求一个共享时,服务器将在存在的共享资源段中去寻找,如果找到匹配的共享资源段, 就使用这个共享资源段。如果找不到,就将请求的共享名看成是用户的用户名,并在本地的password文件里找这个用户,如果用户名存在且用户提供的密码是正确的,则以这个home段克隆出一个共享提供给用户。这个新的共享的名称是用户的用户名,而不是homes,如果home段里没有指定共享路径,就把该用户的宿主目录(home directory)作为共享路径。
comment = Home Directories
# 针对此共享资源所做的说明文字,默认值为空字符串。
browseable = no
# 设定用户是否可看到此资源。默认值为"yes"。若将此参数设为"no",用户虽然看不到此资源,但拥有权限的用户仍可直接输入该资源的网址,来存取资源。例如将某服务器所共享的/tmp目录,设成"browseable = no",则用户就看不到此共享的目录,但直接输入目录的路径"\\no1\tmp",仍可进入此共享目录。
writable = yes
# 设置共享资源是否可写入,此参数与"read only ="参数有相反的作用,默认值为"no"。此参数只适用于共享的资源是目录时;若共享的资源是打印机,则不需设定此参数。
[printers]
# 此区段设定共享的打印机。
comment = All Printers
path = /var/spool/samba
# 打印机队列(spool),用户必须自行建立此目录。
browseable = no
guest ok = no
# 设定是否不需账号及密码即可使用。
writable = no
printable = yes
# 设定是否允许用户更改打印机队列中文件。
[webfile]
# 对共享资源段的设定,webfile为下面所共享目录的共享名。一个设置段只能设置一个共享目录,如果要共享多个目录可以写多个设置段。
path = /usr/local/httpd/htdocs
# 指定共享目录的位置
valid users = webmaster
# 设定允许登入的用户,多个用户可以使用空格分隔,如"valid users = webmaster ftpmaster"。
若设成以下范例,则允许用户liming和属于baoshi工作组的用户登入:
valid users = liming,@baoshi
writable = yes
# 上述语句定义了共享目录/usr/local/httpd/htdocs,用户webmaster对这个目录具有读写权限。
(2)建立账户
如果上述可以访问共享资源的用户在系统中没有,则以root身份添加此用户,如有可以跳过下面步骤的前两步,执行命令如下:
# useradd webmaster
# 生成口令是空的一个账户
# passwd webmaster
# 为新用户设置口令
# cd /usr/local/samba/bin
# ./smbpasswd -a webmaster
# 赋予webmaster用户Samba服务器的验证密码
笔者在实际使用中发现,用户在系统中的密码和用户使用Samba服务Samba的验证密码如果设为一致,有时使用上会出现问题,所以建议读者最好两个密码不要设置为同一个。
(3)启动Samba服务
Samba包含两个主要的程序smbd和nmbd,包括验证、通告、名称解析和共享等。其中共享包括文件共享和打印机共享。验证和共享工作由smbd,SMB守护进程(SMB Daemon)处理,而nmbd处理通告(浏览共享)和名称解析。启动Samba服务时需要分别启动这两个进程。
Solaris 8:
# cd /usr/local/samba/sbin
# ./smbd start
# ./nmbd start
Red Hat Linux 7.3:
# cd /etc/rc.d/init.d
# ./smb start
smb程序会分别启动smbd和nmbd两个进程。
(4)检测
a.用smbclient查看共享资源
Solaris 8:
# /usr/local/samba/bin/smbclient sun
Red Hat Linux 7.3:
# /usr/bin/smbclient sun
屏幕上显示如下:
Added interface ip =166.111.1.12 bcast=166.111.1.255 nmask=255.255.255.0
Password (直接按Enter键)
Domain=[SAMBASERVER]Os=[Unix]Server=[Samba 2.2.2]
Sharename Type Comment
----------- ------- ------
webfile Disk
IPC$ IPC IPC Service(Samba Server)
Server Comment
no1 sun Samba Server 2.2.2
Workgroup Master
---------- -------
Cuug
b.testparm命令,解析和描述的smb.conf文件的内容,特别有用,因为它提供了一个简易的方法发现配置上的错误。
Solaris 8:
# /usr/local/samba/bin/testparm
Red Hat Linux 7.3:
# /usr/bin/testparm
屏幕上显示如下:
Load smb config files from /usr/local/samba/lib/smb.conf
Processing section "[global]"
Processing section "[homes]"
Processing section "[printers]"
Processing section "[webfile]"
Press enter to see a dump of your service definitions
..........................................
键入enter,系统会给出Samba配置文件的一个详细列表,如果smb.conf配置文件设置有错误,则在执行testparm会报告这个错误。
(5)客户端访问
如果您使用的是Windows NT/2000/XP作为Samba服务器的客户端,只需在网上邻居中找到Samba服务器或干脆使用微软的UNC(Universal Naming Convention,通用命名标准)来访问。
三、通过浏览器来管理Samba服务器在Unix系统上访问Windows的共享资源
如果您的Unix系统中已经安装了Samba,那么访问Windows的共享资源是一件很容易的事。要注意的是:我们在做通过Windows访问Unix共享资源时,密码验证的工作是在Samba服务器,也就是Unix系统这一端进行的;而如果通过Unix访问Windows的共享资源,验证工作是由Windows系统来完成的,所以在Unix系统上访问Windows的共享目录您必须具有Windows系统上合法的账户,也就是说Windows端共享的目录要具有访问的权限才可以。
Solaris 8:
在Windows端设置共享目录的访问用户及权限,然后使用如下命令:
# /usr/local/samba/bin/smbclient //Windows主机名/共享目录名 -U 用户名
其中"//Windows主机名/共享目录名"为您想要访问的Windows主机的共享资源,"-U 用户名"指定访问该共享资源的合法用户名,在Windows 9x系统中这项可以不写,因为它不需要验证,如果是Windows NT/2000/XP系统则会要求您输入密码,这时输入该用户的密码即可登入资源共享提示符"smb:\>"下,在Solaris系统中实现共享有些麻烦,可以键入help指令查看可以使用的命令,基本上类似于FTP使用的命令,可以使用get、mget下载;put、mput上传等等。
Red Hat Linux 7.3:
执行如下指令:
# mount -t smbfs -o username=用户名,password=密码 //Windows主机名/共享目录名 /本地挂接点
"-t smbfs"指定使用Samba服务共享时的文件类型;"-o username=用户名,password=密码"指定访问共享资源的合法用户名、密码;"/本地挂接点"远程系统挂接到本地的存放目录,该目录应为空或新创建的目录。不同于Solaris,在Linux中可以直接通过挂接点访问远程Windows系统的共享资源,类似于NFS服务。
另外,我们要注意的是,在Unix系统中目录或文件名是不允许有空格的,而这在Windows系统中是可以的,当使用Samba服务时,不要在Windows系统中使用空格命名的目录或文件,否则在Unix系统中是无法访问的。
到此,我们已经介绍了Samba的基本应用,在我们的日常网管工作中Samba是一个很实用的工具,如本文的例子就是笔者单位的一台Unix系统上的Apache Web服务器,因为要经常更新网页,每一次在Windows上改完网页再通过FTP上传到Web服务器上是很麻烦的,配置Samba之后修改完的网页就可以直接拷贝到远程Unix系统的Web服务器存放页面的默认目录中,十分方便。Samba服务器可以取代局域网内部的很多FTP、Web服务的应用,因为其使用简单方便。
但您不要以为Samba的功能仅是如此,Samba不仅可以让Windows和Unix系统间实现资源共享,在OS/2、VMS、DOS系统中也可以安装Samba实现与Windows系统的资源共享;而Samba本身还可以配置成为Windows系统的域控制器、WINS服务器等来管理Windows网络,如果您想更多的了解Samba,可以访问Samba的官方站点,它提供了大量的Samba技术文档。
阅读(653) | 评论(0) | 转发(0) |