利用Samba共享Linux和Windows资源
[Come From]
2001-08-12 16:48:00
一、Samba 概述
Samba是一组用于实现各种操作系统相互通信的功能广泛的程序。使用Samba要求各台计算机用网络连接在一起。如果没有网络,Samba的用途是十分有限的。
在大规模的网络中,管理员利用Samba把大量的Unix系统和大量的Windows以及其他类型的工作站连接在一起。有许多优秀的书籍专门解释关于
Samba的各种复杂问题,不过这里只涉及基础知识——但这已经足以让我们在一个小型的网络内连接一个Linux系统和一个Windows系统,安装一个
Linux系统上的共享打印机。
Samba使用Microsoft的Server Message
Block,或者说是SMB协议。SMB最初出现于80年代,后来Microsoft采用并扩展了它。SMB运行在另一个协议即NetBIOS之上,而
NetBIOS又运行在其他诸如IPX或TCP/IP之类协议之上。我们并不需要详细了解这些协议,只需要知道Microsoft使用SMB让我们在网络
上共享文件。
Microsoft从来没有公开过SMB协议的细节,这给开发基于SMB的系统带来了困难。然而,一组由Andrew
Tridgell领导的天才对该协议实施了反向工程,并在此基础上创建了早期的Samba。现在,Samba是源代码开放的,它由遍及世界各地的志愿者维
护和改进。
只要你用过连接局域网的Windows
PC就会知道,Windows允许我们“映射”或“共享”网络驱动器,这是通过在Windows资源管理器(即Windows中的文件管理工具)中选择
“工具/映射网络驱动器”实现的。只要网络允许进行映射,我们就可以利用这个工具映射另一个系统中的驱动器,使它看起来就象本地文件系统的一部分。或者
说,我们可以让另一台机器的D:驱动器成为本地系统的G:驱动器。
Samba的功能远远不止这一点,它能够让Windows PC共享Linux系统中的目录,也能够实现其他资源的共享,比如打印机。
大多数流行的Linux发行中都包含Samba。如果你的系统中没有安装Samba,最简单的方法就是下载一个编译好的Samba软件包。当然,最好的下载网站应该是Samba的官方网站: 。
二、配置Samba
安装好Samba之后还要配置它,“声明”某些可以被其他系统访问的资源。具体声明哪些资源在Samba的配置文件/etc/smb.conf中指
定。在大规模的网络中,smb.conf文件可能相当复杂,但对于小型网络,只要为每个需要共享的目录或资源加入几行内容到smb.conf文件就可以
了。
配置Samba可以用文本编辑器手工编辑smb.conf,但最简单的方法是使用SWAT。SWAT是一个Web界面的配置工具。本文后面会介绍使用SWAT配置Samba的方法。
smb.conf的man文档总长度超过75页,相当复杂。好在配置一个连接2到3台机器的Samba并不需要我们融会贯通全部75页文档,实际上只需要了解本文所介绍的基础知识即可完成这个任务。
不过必须明白Samba涉及到许多严肃的安全问题,这一点非常重要。当我们通过Samba声明某个目录共享时,网络上的其它系统就可以直接访问该目
录。在大型网络里,或者网络与Internet连接时,最终有权访问该目录的机器数量可能远远超过设置Samba时所设想的数量。
如果你认为有必要关注系统的安全问题,我建议你读几本有关Samba的专著。本文提供的例子非常简单,有关安全方面的考虑很少,它适用于通常不能从Internet访问的小型家庭网络。
smb.conf文件会在安装Samba的时候自动安装到/etc/smb.conf下,因此,你应该通过修改smb.conf文件配置Samba,
而不是从头开始创建smb.conf。默认文件包含了相当丰富的说明,指导用户如何启用、禁止或改变各种选项。在这个文件中,说明内容的前面由;或者#符
号引导,这两个符号告诉Samba在读取配置信息的时候忽略这些行。
smb.conf文件按“节”组织,每个节开头是一个加括号的关键字。配置网络时必须编辑[global]节,为每一个需要声明为共享的目录和资源加
入对应的条目。[global]节里定义的是一组全局选项,访问Samba共享资源的Windows组和机器的IP地址都在这里指定。
例如,在我的配置文件中,[global]节的内容如下:
[global]
workgroup = my_workgroup_name
hosts allow = 172.16.127.
security = user
workgroup行指定了Windows工作组的名字,hosts
allow行指定了允许访问本地共享资源的机器(所有这些机器的IP地址都以172.16.127开头)。security行用于指定基本的访问安全级
别。再次提醒一下,如果共享资源位于大型网络之中或直接连接到Internet,一定要特别小心,务必仔细地阅读与安全有关的Samba文档。
[global]节影响所有Linux下声明为共享的目录,但用户设置具体到每一个共享目录。,例如,下面是摘自我的smb.conf的一部分内容:
[hal]
comment = "Hal's home directory"
path = /home/hal
browseable = yes
writable = yes
available = yes
public = yes
only user = no
create mode = 0750
节的名字([hal])公布给Windows客户机,如果需要的话,Windows客户机还可从comment行得到更多有关该共享目录的说明。
path是共享目录的路径。[hal]节的其他几行内容指定了客户机可以浏览目录、在目录中写入内容,以及赋予该目录和在该目录下创建的文件的各种许可。
这里仅列出了可能用到的一部分参数,更详细的说明可以在man文档找到。
Linux系统的打印机也可以被Samba客户共享。下面是我的smb.conf文件中有关打印机共享的声明:
[ljet]
comment = "Laserjet"
path = /var/spool/lpd/lp
printer = lp
public = yes
printable = yes
print command = lpr -r -h -P %p %s
设置共享打印机时可能要把打印假脱机目录(/var/spool/lpd/ lp)设置成可以被所有用户访问,这可以用chmod a+rwx /var/ spool/lpd/lp命令实现。如果在配置打印共享时出现问题的话,不妨试一下这个命令。
编辑好smb.conf文件后可以用testparm命令检验它。testparm命令读取smb.conf文件并显示它找到的所有错误。显示错误的
时候,按一下Enter键可以显示已设置的所有参数。下面显示的是testparm在我的系统上的输出(由于长度原因,[global]节已被截掉一部
分)。
Load smb config files from /etc/smb.conf
Loaded services file OK.
Press enter to see a dump of your service definitions
# Global parameters
workgroup = YAMANOTE
netbios name =
netbios aliases =
server String = Samba Server
interfaces =
bind interfaces only = No
security = USER
encrypt passwords = No
...
[homes]
comment = /Home
path = /home
read only = No
create mask = 0750
guest ok = Yes
[hal]
comment = Hal Home
path = /home/hal
read only = No
create mask = 0750
guest ok = Yes
[ljet]
path =/var/spool/lpd/lp
read only = No
guest ok =Yes
print ok = Yes
print command =lpr -r -h -P %p %s
printer name=lp
启动Samba Daemon
Samba通信由一组后台运行的daemon程序处理,这些程序可以配置成在Linux系统启动的时候自动启动。daemon是对在后台持续运行的程
序的称呼。如果Samba
daemon没有在系统启动的时候自动启动,你可以用linuxconf之类的工具把它设置成自动启动。另外也可以用下面的命令手工启动Samba
daemon,注意这些命令必须用root身份运行:
# /usr/sbin/smbd -D
# /usr/sbin/nmbd -D
Samba daemon启动后读入smb.conf文件并公布在该文件中设置成共享的目录和服务。缺省情况下,Samba会每隔60秒重新检查smb.conf文件,对smb.conf文件的改动会在Samba daemon下一次检查文件的时候生效。
三、用SWAT配置Samba
利用SWAT(Samba Web Administration Tool)可以在Web浏览器中管理Samba。
●第一步:配置SWAT
SWAT提供了一种编辑Samba配置文件smb.conf的简单方法,但使用SWAT之前先必须进行配置,编辑/etc/services和/etc/inetd.conf文件。把下面这行内容加入/etc/services文件:
swat 901/tcp
把下面这行内容加入/etc/inetd.conf文件:
swat stream tcp nowait,400 root /usr/sbin/swat swat
这里假定SWAT安装到了/usr/sbin目录。如果SWAT安装在其他目录,则必须修改上述内容使其反映出实际安装位置。
●第二步:启动并登录到SWAT
修改好上述几个文件之后,启动Web浏览器并在地址栏输入下面这个URL:
出现提示时,输入root用户名和密码。通过SWAT主页可以访问所有联机Samba说明文档。
●第三步:设置全局参数
在SWAT中点击“Globals”按钮可以打开设置smb.conf全局参数的页面,在这里可以设置Windows工作组和网络上机器的IP地址。
●第四步:用SWAT创建共享资源
用SWAT创建共享资源时,先点击“Shares”按钮,在“Create Share”按钮的右边为共享资源输入一个名字,点击“Create Share”按钮,然后再为该共享资源指定其他的参数。
四、配置Windows
用Windows NT来访问Linux服务器上的共享驱动器。在Linux上配置并测试了Samba之后,我重新启动了NT,NT自动找到了Linux系统上的共享驱动器。
如果你使用的是Windows
95或98,你还要设置用户密码。首先从控制面板打开“密码”,在“用户配置文件”下启用“用户可以定制自己的参数”,然后在“设置密码”下面为自己设置
一个用户名字和密码,注意要确保这里设置的内容和访问Linux系统时所使用的名字和密码一样。当你打开Windows桌面上的“网上邻居”时,应该已经
可以访问共享驱动器了。
如果你在使用Samba的时候遇到了问题,它们很可能与安全设置和密码有关。请仔细阅读一下Samba的文档,包括HOWTO和FAQ。
在Windows中使用Linux打印机
如果你在Linux机器上把打印机指定为共享的Samba资源,你就可以从Windows系统访问这个打印机。不过在使用这个打印机之前,你先要把它加入到Windows的可用打印机列表中。
添加打印机的方法很简单。首先从Windows控制面板选择“打印机”,然后选择“添加打印机”。选中“网络打印机”并点击“下一步”,在网络的Samba服务器上找到待添加的打印机,双击这个打印机的图标,按照提示完成接下来的步骤。
完成后,Linux打印机就会出现在Windows的可用打印机列表中。