当前位置:Linux教程 - Samba - Samba(桑巴)介绍

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 服务器安装过程, 配置 和维护过程的所有细节.

    发布人:netbull 来自:Linux公报