早期人们要将数据由A计算机带到B计算机,最常使用的方法就是以储存媒体(例如软盘、光盘、ZIP软盘,及目前很流行的随身碟等)来传递。用户将数据由A计算机复制到媒体上,再由B计算机将媒体的数据读出来,以达成数据的传输。后来藉由TCP/IP 网络的流行,很多的数据可以透过通讯协议来达成传输的目的,例如WWW服务器主要提供网页信息,而我们客户端则透过浏览器连接至WWW服务器以取得网页数据;又例如我们使用邮件编辑器(例如Outlook Express)编辑完邮件后,以邮件服务器来进行邮件的接收与传送。
网络数据的传输行为
假如有服务器来提供数据的传输,那么客户端在数据传输方面的使用上,就会相当的方便。不过,如果将数据的传输行为局限在一个办公室内呢?难道要在一个小小的办公室内,架设文件服务器来协助数据的传输吗?这样似乎又有点小题大作。
为了达成这个局域网络内(Local Area Network)的数据传输目的,许多不同的单位便进行一些通讯协议的研发。目前使用最广泛的通讯协议,可能是Windows系列的Common Internet File System(CIFS)。什么是CIFS呢?简单地说,就是『网络上的芳邻』(以下简称为网芳)。我们可以透过网芳在两部Windows的计算机上互通数据,而不必去理会对方计算机的磁盘使用的是什么文件格式(File System)。这种分享数据的模式,我们也可以称为是一种网络文件系统。如(图一)所示,只要在一部计算机上面(WWW1)设定好要分享出来的目录,别部计算机在登入后,就可以看到WWW1所提供的目录数据了。
SAMBA的产生与运作
Windows与Windows之间可以透过网芳来进行数据交流,那么另一个操作系统的大宗Unix Like(诸如FreeBSD/Linux/BSD/Solaris等,底下以Linux做为代表)是否可以加入这个数据交流的机制呢?
为了解决这个问题,1991年一个名叫Andrew Tridgwell的大学生,透过数据封包的反向解析写出一个网络协议,而这就是Server Message Block(SMB)Protocol。事实上,这个SMB协议就是CIFS的主要核心,而架构在这个通讯协议上的自由软件,也就是我们要介绍的Samba。用户只要在Linux的系统当中安装Samba这个套件,那么Linux也可以加入到Windows的网芳当中,并达到数据分享的目的。
那么在Linux上面的Samba有哪些功能呢?这就得要提到网芳可以达到的功能了。笔者列出几个较为广泛使用的功能,介绍如下:
- * 档案与打印服务:这是网芳最主要的功能,提供档案分享与打印分享。
- * 认证与授权(Authentication and Authorization):藉由用户登入网芳时,提供的不同账号/密码来给予适当的权限,达到存取限制与保护本机数据的目的。
- * 名称解析:在Windows系统上面,每部计算机都有一个特定的名称,我们称为NetBIOS Name;而Samba可以协助Linux系统查询与解析NetBIOS Name。
- * 服务讯息提供(提供浏览):当我们使用网芳连上某一部主机时,总是会显示出该主机允许用户所使用的数据;这个数据讯息,就是这里从这里提供。
谈到这里,先让我们来看一看,在平时的状况下,网芳是如何运作?
- 1. 当用户想要登入某部Windows主机,并使用它所提供的档案数据时,必须要加入该主机的工作组。而用户的计算机也必须要设定一个在该群组当中独一无二的NetBIOS名称,以提供群组成员浏览。
- 2. 用户在登入主机时,所输入的账号与密码将会决定登入者的权限。换句话说,用户在登入该主机后,能不能使用该主机所提供的档案数据,还要看 Windows主机有没有提供该用户的权限。所以并不是登入该Windows主机后,用户就可以无限制地取用该主机的档案资源。简单来说,如果对方主机允许用户登入,但却没有开放任何资源让用户取用,那么即使是成功地登入主机,也无法查看对方的硬盘里面的数据。
Samba的基本运作模式与上述网芳的两个步骤大致相同,不过Samba是使用两个服务(Daemons)来提供上述的功能,其介绍如下:
- 1. smbd:这个Daemon 的主要功能就是用来管理Samba主机的认证机制、分享档案与打印机的权限设定等。同时,一部Samba主机可以针对每一个用户做出不同的权限管理。
- 2. nmbd:这个Daemon则是用来管理和提供网域内的NetBIOS name,及工作组等信息与解析。
Samba的一般性应用
如果读者计算机使用的是Linux系统(如X Window系列),却又一直很想加入 Windows的网芳,那么Samba就是读者的大救星。读者只要使用Linux系统默认的Samba套件,并且在 /etc/samba/smb.conf 这个档案当中进行适当的设定,就可以利用Samba所提供的相关功能来提供本机资源,以及进入别台主机的网芳了,其设定是非常地简单。
那么如果读者的Linux是服务器呢?还有没有必要架设Samba呢?这就要见仁见智了。以笔者而言,因为笔者常常进行网页文件的修订,而笔者的日常工作的PC与服务器并非同在一台上面,所以必须利用Samba的功能,笔者才可以轻松地将服务器上的某个目录联机到笔者的工作机上,如(图二)所示。如此一来,在编修网页的实时性/一致性上面都比较好,最起码笔者不用将数据在两部计算机之间作反复复制的动作。
此外,Samba除了可以分享档案与目录外,也可以分享打印机。笔者研究室里的好几部计算机,就是直接以Linux分享的打印机来印制报告。读者可能会说:「Windows也可以办的到啊!没有什么了不起吧!」
话是没错,不过因为Linux在做为服务器主机时,网络功能毕竟还是比较稳定一点,还可以24小时且全年无休的努力工作。
如果在一个办公室的局域网络环境内,每个员工常常会使用到某些工具软件或是一些重要数据,那么用户当然可以架设一部文件服务器。其最简单的作法就是启用网芳的功能来分享出一个特定的目录,然后让所有的员工登入去取用。不过,由于目前透过网芳及局域网络来攻击Windows操作系统的计算机病毒实在是太多了,所以用Linux的Samba所提供的功能来取代网芳,其实就是一个很好的解决方案了。因为Linux对于网芳病毒的攻击,并不会有很大的影响。
在这样的应用中,主要是让Linux服务器与Windows客户端放置在同一个等级的环境,这也就是所谓的Peer/Peer联机架构。什么是Peer/Peer 架构?简单来说,就是在局域网络里面的所有PC均可在自己的计算机上面管理自己的账号与密码,且也都具有独力执行各项软件的能力(例如每一部计算机都有Office软件),然后再藉由网络将各个PC链接在一起的一个架构,所以每一部机器都可以独立运作。
在这样的架构下,如果有两部计算机,其名称假设为PC1与PC2。当用户要坐在PC1这部计算机前使用PC1的资源时,就必须要知道登入PC 1的用户名称与密码,才能够登入使用。而如果用户想由PC1经过网络联机到PC2,以使用PC2的档案资源时,就必须要知道PC2的账号与密码,才可以顺利的登PC2。
这样的架构在目前小型办公室里面是最常见的。例如办公室里面有十个人,每个人桌上可能都安装有一套Windows操作系统的个人计算机,而这十部计算机都可以独立进行办公室软件的执行、独立上网或独立玩游戏等。因为这十部计算机都可以独立运作,所以不会有一部计算机关掉,其他的计算机就无法工作的情况发生,这也是Peer/Peer 的典型架构。
使用Peer/Peer 架构的好处是,每部计算机均可以独立运作,而不受他人的影响。不过其缺点是,当整个网域内的所有人员都要进行数据分享时,光是要知道所有计算机里面的账号与密码,就会令人很伤脑筋。所以Peer/Peer的架构是比较适合小型的网域、没有需要常常进行档案数据分享的网络环境,或是每个用户都独自拥有该计算机的拥有权(换句话说,就是该计算机只让用户独自使用,而不能当公有计算机来用)。如果该单位的所有PC均是公有的,而且您需要统一控管整个网域里面的账号与密码,或许可试试底下的方法。
Samba的企业应用(PDC)
假设今天读者服务的单位有10部计算机,但却有20个员工,那么这20个员工就需要轮流抢着这10部计算机用。如果每部计算机都如同Peer/Peer的架构时,那么每部计算机就需要输入这20个员工的账号与密码,以让他们登入。假如今天有个员工想要变更自己的密码时,那么就需要到10台计算机上面进行密码变更的作业。否则读者就必须要记得这10部计算机里面,那一部计算机是记忆那一个密码,这将令人烦扰不已,而Peer/Peer架构就不适用于这样的情况了,这个时候就需要藉由Domain Model来达成读者的需求。
所谓Domain Model的概念其实也很简单,既然使用计算机资源需要账号与密码,那么我将所有的账号与密码都放置在一部主控计算机(Primary Domain Controller,PDC)后,任何人在我的网域里,想要使用其中的一台计算机时,都需要在屏幕前方输入账号与密码,然后再藉由PDC主机的辨识,才给予适当的权限。换句话说,不同的身份还具有不一样的计算机资源权限,如(图三)。
PDC主机控管整个网域里面的各个机器(PC A - PC D)账号与密码的信息,假如今天有个用户账号名称为Ken,且密码为“mypasswd”时,他不论使用哪一部计算机(PC A - PC D),只要在屏幕前方输入Ken与其密码,该机器便先到 PDC上查验是否有Ken这个账号和Ken的密码。且PDC主机会给予Ken这个用户的相关计算机资源权限,以及工作环境配置文件等数据。当Ken在任何一部主机上面登入成功后,在每一部计算机都会有他所设定的计算机环境与其数据。
这样的架构比较适合用在人来人往的企业里,例如当系统管理员要控管新进人员的计算机资源使用权时,可以直接针对PDC来修改就好了,不需要在每一部主机上去作修改。对于系统管理员来说,这样的架构在控管账号资源上,当然是较为简单与容易
在Windows里面,这样的架构首推Active Directory服务器(AD),然而AD服务器的建置经费可不是每家公司都付的起。假如用户不想付费,那么可以使用自由软件的Samba,因为它能够让用户轻易的架设起PDC主机。
结语
Samba最初发展的目的,是想要让不同的平台间的档案分享服务更为便利,而它也确实达到了这样的功能。不过在后来自由软件工作者的努力下, Samba已可达到更为企业级应用的解决方案。目前Samba的稳定版本已经出到3.0.6版,并支持更多样化的认证模块,例如MySQL与LDAP等等,让Samba的应用更为广泛。
<作者为资深自由软件资深工程师,联络方式:vbird@tsai.adsldns.org>