Linux 版 (精华区)

发信人: howdoit (教练让我上场!!!), 信区: Linux
标  题: Samba(桑巴)介绍
发信站: 哈工大紫丁香 (Tue May 18 08:53:36 1999), 转信

《Linux公报》……让Linux更富魅力!

A Linux Journal Review: This article appeared first in the

July 1998 issue of Linux Journal. 

                 Samba(桑巴)介绍

                             By John Blair

                         翻译:Zou hongbo

    网络的宗旨是更容易地在计算机间共享信息. 信息共享, 在

Linux 机器之间, 或者与 任何的 Unix 主机, 是容易的--诸如 FTP

和 NFS 之类的工具是现成的, 也容易设置. 不过不幸的是, 即使是死

心踏地的 Linux 狂热分子也不得不承认在这个世界上大多数 的 PC

使用的是 Windows 系统几个不同版本中的一个. 除非你生活在一个与

世隔绝的 环境中, 你的 Linux 机器难免要与运行 Windows 系统的机

器交换信息. 如果不想用 软盘来转移文件, 那么你就需要 Samba 这

个工具. 

    Samba 实际上是一组程序, 它们让你的 Linux 机器懂得 SMB

(Server Messages Block) 协议. SMB 是一套通讯协议, 让运行

OS/2, Windows NT, Windows 95, Windows for Workgroups 的计算机

实现文件共享和打印机共享服务. 这套协议类似于 NFS (网络文件系

统) 和 lpd (Unix 标准打印服务器), 及一套分布式授权认证 系统

(如 NIS 或 Kerberos)的组合. 如果你熟悉 Netatalk , 那么 Samba

所做的正如 Netatalk 在 Macintosh 上的表现. 在运行 Samba 服务

器程序的时候, 你的 Linux 机器在"网络邻居"中看起来如同一台

Windows 机器. Windows 机器的用户可以"登录"到 你的 Linux 机器

中, 当然这要求你给予适当的权限, 从你允许的部分 Unix 文件系统

中 拷入或者拷走文件, 提交打印任务, 甚至向你发送 WinPopup 消

息. 如果你的 Linux 运行 环境中几乎为 Windows NT 和 Windows 95

包围, Samba 将是无价的工具. 

                   图 1. 网络邻居中的 Samba 服务器

    Samba 也能做一些一般来说需要 Windows NT 服务器去完成的工

作, 如作为一个 WINS 服务器和处理来自 Windows 95 机器的 "网络

登录" 请求等等. 从 Samba 代码中导出的一个 PAM 模块可以让你使

用一个 Windows NT 服务器来验证 Unix 登录. 目前, 一个 Samba 项

目正在进行逆向工程解析 Windows NT 主域控制协议, 并将作为

Samba 的一部分重新实现它. 这部分代码, 仍然处于实验阶段, 已经

能成功 地处理一个来自 Windows NT 工作站的登录请求. 距离它成为

一个羽翼丰满的主域控制 者(PDC)已经不远了, 那时它将可以存储用

户帐户资料和与其它 NT 域建立信任关系. 最令人高兴地是, Samba

是在 GNU 通用公共许可证(GPL)下自由发行的, 正如 Linux. 在大多

数环境中, Windows NT 服务器只是向一群 Windows 95 机器提供文件

服务, 打印 缓冲池和权限控制. Linux 和 Samba 的组合提供了高性

能, 低价格的解决方案, 当然是 与典型的微软解决方案相比较. 

Windows 网络

    如果你知道一点 Windows 网络如何工作的话, 那么也比较容易理

解 Samba 是如何完成 工作的. Windows 客户通过一个 NetBIOS 对话

传送"Server Messages Block"来使用 服务器端的文件和打印机资源.

NetBIOS 原本是由 IBM 开发的, 它定义了一个对应于 运行在 MS-DOS

或者 PC-DOS 上的软件的网络界面. 它定义了一套网络服务和使用这

些 服务的软件界面, 但没有规定实际用来传送比特数据的网络协议. 

    NetBIOS 三个主要特点在首次实现时已经呈现出来, 每一个都使

用了不同的传输协议. 最初实现时参考的(传输协议)是 NetBEUI

(NetBIOS 扩展用户界面), 它是一个设计为 单段网络使用, 低负荷的

传输协议. NetBIOS over IPX, Novell 使用的协议, 也很流行.

Samba 使用 NetBIOS over TCP/IP, 这种方式有多个优点. 

    TCP/IP 已经在每一个操作系统中高效地实现了, 所以相对来说易

于移植到每一种风格 的 UNIX 中, 同样地移植到 OS/2, VMS,

AmigaOS, Apple's Rhapsody(现在是 NextSTEP) 和(令人惊奇地)主机

操作系统(如 CMS). Samba 也使用在嵌入式系统中, 如独立的打印机

服务器和 Whistle's InterJet Internet appliance. 使用 TCP/IP

也意味着 Samba 可以 很好地适应大型的 TCP/IP 网络, 如因特网.

认识到这些优势, 微软已经将 SMB 和 NetBIOS over TCP/IP 的组合

重命名为 通用因特网文件系统(CIFS). 微软正在努力使 CIFS 作为一

个文件传输的因特网标准. 

              图 2. SMB 的网络视图与 OSI 网络模型比较

Samba 的组成部分

    一个 Samba 服务器实际上包括两个服务器程序: smbd and

nmbd. smbd 是 Samba 的核心. 它建立对话, 验证客户和提供文件系

统和打印服务. nmbd 实现了 "网络浏览者". 它的任务是广播 Samba

服务器必须提供的服务. nmbd 使 Samba 服务器显示在 Windows 95

和 Windows NT 的"网络邻居"中, 允许用户浏览可以使用的资源. 没

有 nmbd 的 Samba 服务器是可能的, 但是用户必须 提前知道他们想

使用的服务器和资源的 NetBIOS 名称. nmbd 实现了微软网络浏览者

协议, 这意味着它将参与浏览者选择(又称"浏览者 战争"), 可以作为

一个主控者或者是一个后备浏览者. nmbd 还有一种功能, 作为一个

WINS (Windows Internet Name Service) 服务器, 在你的网络跨越一

个 TCP/IP 子网时是必要的. 

    Samba 也包含了一组其他工具. smbclient 是一个 SMB 客户, 带

有一个 shell-based 用户界面, 类似于 FTP, 它允许你从 Samba 服

务器拷入和拷出文件, 同样允许你通过它使用 SMB 打印机资源和 发

送 WinPopup 消息. 对于 Linux 用户, 也有一个 SMB 文件系统让你

将一个 Windows 机器的共享目录连接到 Linux 文件系统中. smbtar

是一段 shell 脚本, 它通过 smbclient 使用 tar 格式备份和恢复

一台远程 Windows 的共享文件. 

    testparm 命令, 解析和描述你的 smb.conf 文件的内容, 特别有

用, 因为它 提供了一个简易的方法发现配置上的错误. 其他命令用来

管理 Samba 的加密密码文件, 配置不同的国际字符集和诊断问题. 

配置 Samba

    通常, 解释一个程序能做什么的最好方法是举几个例子说明. 出

于两个原因, 我 假设你已经安装了 Samba. 首先, 介绍编译和安装

Samba 足以另外写一篇文章了. 其次, 在新的稳定版本发行后, Red

Hat 和 Debian 都将包含 Samba, 安装将是一瞬间 的事. 更进一步,

多数的流行(Linux)版本"基本"安装已经自动包括了 Samba. 

    在 Samba 1.9.18 版本以前, 如果你想使用加密密码验证, 就必

须自己编译 Samba. 这是因为 Samba 使用了一个 DES 库实现加密,

而美国将之列为军事机密, 所以二进制 执行码的版本不能合法地流出

美国, 镜像站点也不能发行预编译的带有加密密码验证的 Samba 版

本. 从 1.9.18 版本起, Samba 使用一个修改过的 DES 算法, 不再受

限. 现在唯一一个自己编译 Samba 的理由是如果你想测试一下最新的

alpha 版本或者 你希望有一些非标准的特性. 

    因为 SMB 是一个大型而复杂的协议, 配制 Samba 往往会使人气

馁. 在 smb.conf Samba 的配置文件中存在超过 170 个不同的配置选

项. 尽管如此, 不要害怕. 就象 Unix 的其他部分一样, 一个简单的

可运行的配置是相当容易的. 然后你可以在学会了一项 参数后再调整

初始的配置. 最后, Samba 的最新版本, 在这篇文章一月写完时, 是

1.9.18p1. 也可能在本文发表后, 其中的一些参数已经被改变了. 通

常, Samba 发行包包括的文档与软件还是比较贴切的(特别是 README

文件). 

    smb.conf 文件在 Red Hat 和 Debian 发行包中是在 /etc 目录.

如果你手工编译了 Samba, 而且没有修改过任何安装路径, 那么它可

能位于 /usr/local/samba/lib/smb.conf. Samba 的所有应用程序都

会首先读取这个文件, 它结构类同于 Windows 的 INI 文件, 其中存

放着配置信息. 每一段的开头是一个方括号括住的名字, 这个名字可

能是一个服务名称或者是一个 特别段(名称): [global], [homes] 或

者 [printers]. 

    每一个配置参数可以是全局参数, 控制整个服务器的某些功能,

也可以是服务类参数, 只影响某一类服务. [global] 段用来设置所有

的全局配置选项, 和缺省的服务设置. [homes] 是一个特殊服务段,

动态地映射到每一个用户的主目录(home). [printers] 段提供了一个

便易的方法, 可以共享 printcap 中 定义的打印机. 

一个简单的配置过程

    下面的 smb.conf 文件描述了一个简单有效的 Samba 配置, 它可

以使我的 Linux 机器 上的所有用户主目录共享在网络中. 

[global]

        netbios name = FRODO

        workgroup = UAB-TUCC

        server string = John Blair's Linux Box

        security = user

        printing = lprng

[homes]

        comment = Home Directory

        browseable = no

        read only = no

    在 [global] 段中设置了主机名称, 主机所在的工作组名称和浏览

时可看到 的对本机的描述. 安全参数告诉 Samba 使用"用户级别"的

安全保护方式. SMB 有两种 安全模式: 共享级别, 将资源加密码控

制; 用户级别, 可以使用某一用户的所有资源. 这里不能详细解释两

种方式的微妙差别, 但大部分情况下, 你会想用用户级别安全控制. 

    printing 命令描述了本地打印系统类型, 这可以让 Samba 知道

怎样提交打印任务, 显示打印队列, 删除打印任务和其它操作. 如果

打印系统是 Samba 所不知道的, 你必须在每次执行打印操作时指明命

令. 

    因为没有设定使用加密模式, Samba 将使用明文来调用标准 UNIX

密码功能验证每一次 (网络)连接(请求). 记住, 如果你购买的 Linux

系统使用了 PAM, 那么必须修改 PAM 的配置以使 Samba 可以使用密

码数据库验证(请求). Red Hat 是自动处理这些事情的. 很明显地,

许多情况下, 使用明文验证密码是愚蠢的. 如何配置 Samba 以支持加

密的密码 已经超出了本文的讨论范围, 但这并不困难. 看一下 /docs

目录中的 ENCRYPTION.txt 文件即可明白. 

    [homes] 段中的设置控制了每一个用主目录的共享权限. comment

参数指定 的字符串在你浏览本机资源时出现在指定资源的旁边.

browseable 参数控制一项服务是否能够出现在网络资源浏览表中. 这

里是一些非直觉的东西, browseable = no 意味着这个目录将在浏览时

显示为要验证的用户名称. 举例来说, 指定 browseable = no, 当我浏

览这个 Samba 服务器时, 我将看到一个名称为 jdblair 的共享目录.

当指定 browseable = yes 时, 我将看到一个名为 homes 和 jdblair 的

共享目录. 设置 read only = no 将允许通过验证的用户对主目录有写

入的权限. 但是, 如果他们的主目录的 UNIX 权限 不允许写入, 那么

他们就无写的权限. 无论 UNIX 的权限怎样, 设置 read only = yes

后, 他们的主目录是只读的. 

    下面的一段配置允许任何能够登录到 Samba 服务器的用户使用

printcap 中出现的 每一台打印机. 正常情况下, 如果使用用户级别

安全控制, guest ok = yes 并不能授权每一个用户(使用系统). 每一

个打印服务必须定义为 printable = yes. 

[printers]

        browseable = no

        guest ok = yes

        printable = yes

    最后一段配置片断增加了一个命名为 public 的共享目录, 直接

对匿名 FTP 目录有只读的 权限. 你必须在客户机上建立打印机驱动

程序. 对于 Windows 95 和 Windows NT 客户机, 你可以使用 printer

name 和 printer driver 命令自动建立打印驱动. 

[public]

        comment = Public FTP Directory

        path = /home/ftp/pub

        browseable = yes

        read only = yes

        guest ok = yes

                图 3. 在 Windows Explorer 中配置 Samba

    应该明白这段描述并不是解释一些微妙的主题, 例如用户级和共

享级安全性的区别或者 其它的授权认证主题. 它仅仅让我们看到了

Samba 这座冰山的一角. 另一方面, 这是一个良好的例子, 从中我们

可以了解产生一个简单但 可工作的 smb.conf 文件是多么容易. 

Conclusions

    Samba 是一个工具, 它架起了 Unix 和 Windows 系统之间的桥

梁. 本文特别讨论了在 Linux 上使用 Samba, 事实上它也可以极好地

运行于更多的商业 Unix 系统中, 例如 SUN 和 RS/6000 服务器. 更

进一步, Samba 证明了自由软件的优异特性, 尤其是与商业软件相比

较时. Samba 是强有力的, 由 Samba 小组极好地支持, 并处于 不间

断地活跃开发中. 

资源

    Samba 主页, 在 http://samba.anu.edu.au/samba/, 限定于发布

关于 Samba 的新闻 和其他信息. 随同 Samba 发行的文档相对比较凌

乱, 但它已经覆盖了配置服务器需要 的每一个角落. 如果你对 Samba

有什么疑问, 首先参考 FAQ, 然后尝试 Samba 邮件清单. 这两部分的

位置你在 Samba 的主页中都可以找到. 

    书 Samba: Integrating UNIX and Windows, 作者 John Blair ,

SSC 出版, 覆盖了一个 Samba 服务器安装过程, 配置 和维护过程的

所有细节.  

                       版权所有 (C) 1999 NJLUG

           出版于第36期《Linux公报》1999年1月 中文版第三期

                            


--
☆ 来源:.哈工大紫丁香 bbs.hit.edu.cn.[FROM: bin@mtlab.hit.edu.cn]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:4.934毫秒