Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1620110
  • 博文数量: 441
  • 博客积分: 20087
  • 博客等级: 上将
  • 技术积分: 3562
  • 用 户 组: 普通用户
  • 注册时间: 2006-06-19 15:35
文章分类

全部博文(441)

文章存档

2014年(1)

2012年(1)

2011年(8)

2010年(16)

2009年(15)

2008年(152)

2007年(178)

2006年(70)

分类: LINUX

2006-11-26 00:23:20

利用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的可用打印机列表中。


阅读(877) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~