Linux基础服务 ·

Samba服务简介

[隐藏]

SambaSamba 是在 Linux 和 UNIX 系统上实现 SMB 协议的一个免费软件,由服务器及客户端程序构成。SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。SMB 协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。通过设置 “NetBIOS over TCP/IP” 使得 Samba 不但能与局域网络主机分享资源,还能与全世界的电脑分享资源。

Samba 名称由来

1991 年一个名叫 Andrew Tridgwell 的大学生,在分别使用 DOS 个人计算机、DEC公司的 Digital Unix 系统,以及 Sun 的 Unix 系统时,发现只有 DEC 公司发展出的套名为 PATHWORKS 的软件,可以用用来分享 DEC 的 Unix 与个人计算机的 DOS 这两个操作系统的文件数据,为了让其三者都能共享文件,这老兄就自行写了个 program 去侦测当 DOS 与 DEC 的 Unix 系统在进行数据分享传送时所使用到的通讯协议信息,然后将这些重要的信息撷取下来,并且基于上述所找到的通讯协议而开发出 ServerMessage Block (SMB) 这个文件系统,而就是这套 SMB 软件能够让 Unix 与 DOS 互相分享数据!

因此 Tridgwell 就去申请了 SMBServer ( Server Message Block 的简写 ) 这个名字来做为他撰写的这个软件的商标,可惜的是,因为 SMB 是没有意义的文字,因此没有办法达成注册。为此他又在字典里面找到相关的字词可以做为商标来注册的词语!翻了老半天,翻到 SAMBA 刚好含有 SMB ,又是热情有劲的拉丁舞蹈的名称,不如就用这个名字来做为商标好了。如此,这成为我们今天所使用的SAMBA 的名称由来。

Samba 的常见应用

由上面说明的 Samba 发展缘由,可以得知, Samba 最初发展的主要目就是要用来解决 Windows 与 Unix Like 这两个不同的作业平台的文件共享,一下就是 Samba 的常见用途:

  • 分享文件与打印机服务;
  • 可以提供用户登入 Samba 主机时的身份认证,以提供不同身份者的个别数据;
  • 可以进行 Windows 网络上的主机名解析 (NetBIOS name)
  • 可以进行设备分享 (例如 Zip, CDROM...)

底下我们来谈几个 Samba 服务器的应用实例:

1.利用软件直接编修 WWW 主机上面的网页数据

多人都是利用个人计算机将网页制作完毕之后,再以类似 FTP 之类的服务将网页上传到 WWW 主机, 但这样 的话,同时在客户端与 WWW 主机上头都有一份网页数据,常常会忘记哪一份是最新的, 最麻烦的是,有时候下载下来的文件已经经过好多修改了,却在下次的 FTP 作业,不小心又下载一次旧数据, 结果将已经修改过的数据覆盖过去~

如果你有安装 SAMBA 服务器的设定的话,那么通过『网络邻居』的功能,直接联机远程服务器所提供的目录, 如此一来你可以直接在你的个人计算机上面修改主机的文件数据,只有一份正确的数据而已! 这就有点像是『在线编修』呢,一修改完成,在 Internet 上面可以立刻检验,非常方便!

 

2.做成可直接联机的文件服务器

在公共服务器上,使用 Samba 做存储空间,不同的用户登录进去,会取得各自的数据,能够方便的将不同用户的数据区分开,并且可以在不同的个人机上登录上去,方便的进行远程数据管理。

 

3.打印机服务器

SAMBA 除了分享文件系统外,还可以分享打印机,虽然 windows 也可以,不过相对而言 Linux 系统的安全性与稳定性可是甩 Windows 好几条街,作为共享服务稳定与安全可是很重要的。

Samba 使用的 NetBIOS 通讯协议

事实上,就像 NFS 是架构在 RPC Server 上面一样, SAMBA 这个文件系统是架构在 NetBIOS (Network Basic Input/Output System, NetBIOS) 这个通讯协议上面所开发出来的。

最早 IBM 发展出 NetBIOS 的目的仅是要让局域网络内少数计算机进行网络链接的一个通讯协议而已, 所以考虑的角度并不是针对大型网络,因此,这个 NetBIOS 是无法跨路由的 (Router / Gateway)。这个 NetBIOS 在局域网络内还是很好用, 所以微软的网络架构就使用它来进行沟通的!而 Samba 最早发展的时候,其实是想要让 Linux 系统可以加入 Windows 的系统当中来分享使用彼此的文件数据的,所以当然 Samba 就架构在 NetBIOS 发展出来的。

不过 NetBIOS 是无法跨路由的,因此使用 NetBIOS 发展起来的服务器理论上也是无法跨越路由的! 而为了解决此限制,发展出了 NetBIOS over TCP/IP 的技术!

TCP/IP 是目前网络连接的基本协议,现在我们将 NetBIOS 想成是一封明信片, 这个明信片只能让你自己欣赏而已,如果今天我们要将这个明信片送到远方的朋友那边时!就需要通过邮件系统 (例如邮局、国际快递等等的) 来传送了!这个 TCP/IP 就可以视为邮件传递系统!通过这个 NetBIOS over TCP/IP 的技术,我们就可以跨路由的使用 Samba 服务器所提供的功能了! 当然啦,目前 SAMBA 还是比较广泛的使用在局域网里面。

Samba 使用的 daemons

NetBIOS 当初发展时就着眼在局域网络内的快速数据交流,而因为是定义在局域网络内,因此他并没有使用类似 TCP/IP 之类的传输协议,也就不需要 IP 的设定,而主机在 NetBIOS 协议当中的定义为使用『NetBIOS Name』,每一部主机必须要有不同的 NetBIOS Name 才行, 而文件数据就是在不同的 NetBIOS name 之间沟通!我们以一个网络邻居的设定来作简单的说明:

  1. 取得对方主机的 NetBIOS name 定位该主机所在:当我们想要登入某部 Windows 主机使用他所提供的文件数据时,必需要加入该 Windows 主机的群组 (Workgroup),并且我们的机器也必需要设定一个主机名,而这个主机名跟 Hostname 是不一样的,因为这个主机名是架构在 NetBIOS 协议上的,我们可以简单的称呼他为 NetBIOS Name。在同一个群组当中,NetBIOS Name 必需要是独一无二的!
  2. 利用对方给予权限存取可用资源:在我们找到该主机名后,是否能登入该对方主机或者是取用对方主机所提供的资源, 还要看对方 Windows 主机有没有提供我们使用的权限!所以,并不是登入该 Windows 主机之后我们就可以无限制的取用该主机的 文件资源了。也就是说,如果对方主机允许你登入, 但是却没有开放任何资源让你取用,那么,登入主机也无法查看对方的硬盘里面的数据的!

我们的 SAMBA 则是透过两支服务来控制这两个步骤,分别是:

  • nmbd :这个 daemon 是用来管理工作组、NetBIOS name 等等的解析。主要利用 UDP 协议开启 port 137, 138 来负责名称解析的任务;
  • smbd :这个 daemon 的主要功能就是用来管理 Samba 主机分享的目录、文件与打印机等等。 主要利用可靠的 TCP 协议来传输数据,开放的端口为 139 及 445(不一定存在) 。

所以, Samba 每次启动至少都需要有这两个 daemons !而当我们启动了 Samba 之后,主机系统就会启动 137, 138 这两个 UDP 端口及 139 这一个 TCP 端口。

联机模式介绍 (peer/peer, domain model)

Samba 服务器的应用相当的广泛,而且可以依照不同的网域联机方式,与不同的用户账号密码的控管方式来进行分类。 例如最常见的 Workgroup 及 Domain 两种方式的联机模式!

我们主要来介绍一下这两种最常见的局域网络的联机模式: peer/peer (对等模式) 及 domain model (主控模式)。

peer/peer (Workgroup model, 对等模式):

peer 有同等、同辈的意思存在,所以由字面上来看,peer/peer 是指两部主机的地位相等! 简单的说,假如在局域网络里面的所有 PC 均可以在自己的计算机上面管理自己的账号与密码, 同时每一部计算机也都具有独力执行各项软件的能力,只是藉由网络将各个 PC 链接在一起而已的一个架构, 所以,每一部机器都是可以独立运作的!

这样的架构在目前小型办公室里面是最常见的。例如办公室里面有十个人,每个人桌上可能都安装有一套 Windows 操作系统的个人计算机,而这十部计算机都可以独立进行办公室软件的执行、独立上网、独立玩游戏等等, 因为这十部计算机都可以独立运作,所以不会有一部计算机关掉,其他的计算机就无法工作的情况发生,这就是 peer/peer 的典型架构。

以下图的架构为例,在这样的架构下,假设 老王 (PC A) 写了一个报告书,而 小张 (PC B) 想要以网络直接取用这个报告书时,那 小张 就必须要知道 老王 使用的密码,并且 老王 必须要在 PC A 上面启用 Windows 的『资源共享(或者是共享)』之后,才能够让 小张 联机进入 (此时 PC A 为 Server) !而且, 老王 可以随时依照自己的喜好来更改自己的账号与密码,而不受 小张 的影响。不过,小张 就得要取得 老王 同意取得新的账号与密码后,才能够登入 PC A !反过来说,同样的, 老王 要取得 小张 的数据时,同样需要取得 PC B 的账号与密码后,才能够顺利登入 (此时 PC A 为 Client )!因为 PC A, PC B 的角色与地位都同时可以为 Client 与 Server ,所以就是 peer/peer 的架构了!

peer/peer 联机的示意图
使用 peer/peer 的架构的好处是每部计算机均可以独立运作,而不受他人的影响!不过, 缺点就是当整个网域内的所有人员都要进行数据分享时,需要提前告知对方账户与密码! 所以, Peer/Peer 的架构是比较适合小型的网域,或者是没有需要常常进行文件数据分享的网络环境,或者是每个使用者都独自拥有该计算机的拥有权(就是说,该计算机是用户的,不用频繁更换账户密码) 而,如果该单位的所有 PC 均是公有的 (例如学校的计算机教室环境),而且你需要统一控管整个网域里面的账号与密码的话, 那就得使用底下的 domain models 了!

domain model (主控模式)

假设今天你服务的单位有 10 部计算机,但是你的单位有 20 个员工,这也就是说,这 20 个员工轮流抢着用这 10 部计算机。如果每部计算机都如同 peer/peer 的架构时,那么每部计算机都需要输入这 20 个员工的账号与密码来提供他们登入。而且,今天假如有个员工想要变更自己的密码时,就需要到 10 台计算机上面进行密码变更的作业!否则他就必须要记得这 10 部计算机,每一部的密码。

如果上述是这样的情况,使用 peer/peer 架构就不是一个好方法了!这个时候就需要藉由 domain model 来达成你的需求!所谓的 domain model 概念其实也很简单,既然使用计算机资源需要账号与密码, 那么我将所有的账号与密码都放置在一部主控计算机 (Primary Domain Controller, PDC) 上面,在我的网域里面,任何人想要使用任何计算机时,都需要在屏幕前方输入账号与密码,然后通通藉由 PDC 服务器的辨识后,才给予适当的权限。也就是说,不同的身份还具有不一样的计算机资源权限! 例如底下的图示:

domain model 联机的示意图
PDC 服务器控管整个网域里面的各个机器 (PC A ~ PC D) 的账号与密码的信息,假如今天有个使用者账号名称为 vbird ,且密码为 12345 时,他不论使用哪一部计算机 (PC A ~ PC D) 只要在屏幕前方输入 vbird 与他的密码,则该机器会先到 PDC 上面查验是否有 vbird 以及 vbird 的密码,并且 PDC 主机会给予 vbird 这个用户相关的计算机资源权限。当 vbird 在任何一部主机上面登入成功后,他就可以使用相关的计算机资源了!

这样的架构比较适合人来人往的企业架构,当系统管理员要控管新进人员的计算机资源使用权时,可以直接针对 PDC 来修改就好了,不需要每一部主机都去修修改改的,对于系统管理员来说,这样的架构在控管账号资源上,当然是比较简单的啦!

各种架构适用的环境与适用的人都不相同,并没有那个是最好!依照不同的工作环境来选择联机的模式!

参与评论