第 48 章 Samba

目录

48.1. 配置服务器
48.2. 将 Samba 用作登录服务器
48.3. 使用 YaST 配置 Samba 服务器
48.4. 配置客户机
48.5. 优化

摘要

使用 Samba,可以将 Unix 计算机配置为 DOS、Windows 和 OS/2 计算机的文件和打印服务器。Samba 已经发展成为一个功能完备且相当复杂的产品。除了介绍基本功能外,本章还介绍 Samba 配置的基础知识以及可用来在网络中配置 Samba 的各个 YaST 模块。

关于 Samba 的详细信息,请参见数字文档。在命令行输入 apropos samba 可显示一些手册页;如果安装了 Samba,也可以浏览 /usr/share/doc/packages/samba 目录获得更多的联机文档和示例。examples 子目录中提供了一个带注释的示例配置 (smb.conf.SuSE)。

附带的 samba 包版本 3 的重要新功能包括:

[Tip]迁移到 Samba3

当从 Samba 2.x 迁移到 Samba 3 时有几点应特别注意。Samba HOWTO 文档集中有一章专门讨论此主题。安装 samba-doc 包后,可在 /usr/share/doc/packages/samba/Samba-HOWTO-Collection.pdf 中找到 HOWTO 文档。

Samba 使用基于 NetBIOS 服务的 SMB 协议(服务器讯息块)。迫于 IBM 的压力,Microsoft 发布了该协议,这样其他软件制造商能够与 Microsoft 域网络建立连接。使用 Samba 时,SMB 协议在 TCP/IP 协议之上工作,所以必须在所有客户机上安装 TCP/IP 协议。

NetBIOS 是为计算机之间进行通讯而设计的软件接口 (API)。这里提供了一种名称服务。它使连接到网络的计算机能够为自己保留名称,之后便可以根据名称对这些计算机进行寻址。没有任何中心进程来检查这些名称。网络上的任何计算机都可以无数目限制地保留任何未使用的名称。现在可以为不同的网络体系结构实施 NetBIOS 接口。NetBEUI 是与网络硬件结合相对密切的一种实施,但它常被称为 NetBIOS。使用 NetBIOS 实施的网络协议包括 Novell 的 IPX(通过 TCP/IP 的 NetBIOS)和 TCP/IP。

通过 TCP/IP 发送的 NetBIOS 名称与 /etc/hosts 中使用的名称或 DNS 定义的名称没有相同之处。NetBIOS 使用它自己的、完全独立的命名约定。但为了方便管理,仍建议您使用与 DNS 主机名对应的名称。Samba 默认采用这种方式。

所有常见操作系统(Mac OS X、Windows 和 OS/2 等)都支持 SMB 协议。必须在所有计算机上安装 TCP/IP 协议。Samba 为多种不同的 UNIX 系统提供客户机。对于 Linux,有一个用于 SMB 的内核模块,它允许在 Linux 系统级别上集成 SMB 资源。

SMB 服务器通过共享为其客户机提供硬件空间。共享包括服务器上的一个目录及其子目录。可以通过名称来导出并访问共享。可以将共享名称设置为任何名称 - 不一定是导出目录的名称。也可以为打印机指派一个名称。客户机可以根据打印机的名称来访问打印机。

48.1. 配置服务器

如果要将 Samba 用作服务器,请安装 samba。使用 rcnmb start && rcsmb startrcsmb stop && rcnmb stop 可启动和停止 Samba 所需的服务。

Samba 的主配置文件是 /etc/samba/smb.conf。可以将此文件分为两个逻辑部分。[global] 部分包含中央和全局设置。[share] 部分包含各个文件和打印机共享。通过这种方式,可以在 [global] 部分中有区别地或全局地设置有关共享的详细设置,这样可以提高配置文件的结构透明性。

48.1.1. global 部分

需要对 [global] 部分的以下参数进行调整以满足网络设置的要求,以便其他计算机能够在 Windows 环境中通过 SMB 访问 Samba 服务器。

workgroup = TUX-NET

此行将 Samba 服务器指派到工作组。将 TUX-NET 替换为您的网络环境的适当工作组。您的 Samba 服务器将出现在其 DNS 名称下,除非此名称已被指派给网络中的任何其他计算机。如果 DNS 名称不可用,请使用 netbiosname=MYNAME 设置服务器名称。有关此参数的详细信息,请参见 mansmb.conf

os level = 2

此参数确定您的 Samba 服务器是否会尝试成为其工作组的 LMB(本地主浏览器)。为了避免现有 Windows 网络受到配置错误的 Samba 服务器的任何影响,应选择非常低的值。有关这一重要主题的详细信息,请参见文件 BROWSING.txtBROWSING-Config.txt,它们位于包文档的 textdocs 子目录下。

如果网络中没有任何其他 SMB 服务器(如 Windows NT 或 2000 服务器),并且您希望 Samba 服务器保留一份本地环境中存在的所有系统的列表,请将 os level 设置为一个较高的值(例如 65)。然后便可以选择您的 Samba 服务器作为本地网络的 LMB。

在更改此设置时,应认真考虑这样做对现有 Windows 网络环境的影响。应该首先在一个孤立网络中或一天中的非重要时间测试这些更改。

wins support 和 wins server

为了将您的 Samba 服务器集成到具有活动 WINS 服务器的现有 Windows 网络中,应启用 wins server 选项并将其值设置为 WINS 服务器的 IP 地址。

如果将您的 Windows 计算机连接到单独的子网,同时又希望它们互相通讯,则需要设置一个 WINS 服务器。要将 Samba 服务器转变为这样的 WINS 服务器,请设置选项 wins support = Yes。确保网络中只有一个 Samba 服务器启用了此设置。切勿在您的 smb.conf 文件中同时启用选项 wins serverwins support

48.1.2. 共享

以下示例说明了如何使 CD-ROM 驱动器和用户目录 (homes) 对 SMB 客户机可用。

[cdrom]

为了避免意外地使 CD-ROM 驱动器变得可用,应使用注释标记(在本例中是分号)取消这些行。去除第一列中的分号,以便与 Samba 共享 CD-ROM 驱动器。

例 48.1. CD-ROM 共享

;[cdrom]
;       comment = Linux CD-ROM
;       path = /media/cdrom
;       locking = No
[cdrom]comment

[cdrom] 项是网络上的所有 SMB 客户机均可看到的共享的名称。可以添加一个附加 comment 来进一步说明此共享。

path = /media/cdrom

path 导出目录 /media/cdrom

通过严格限制的默认配置,可使这种共享仅对此系统上存在的用户可用。如果应使此共享对所有用户可用,请向配置中添加一行 guest ok = yes。此设置为网络上的所有用户提供读权限。建议您认真处理此参数。在 [global] 部分使用此参数时更应如此。

[homes]

[home] 共享在这里特别重要。如果用户具有 Linux 文件服务器的有效帐户和口令以及自己的主目录,则该用户可以连接到此共享。

例 48.2. 主共享

[homes]
	comment = Home Directories
	valid users = %S
	browseable = No
	read only = No
	create mask = 0640
	directory mask = 0750
[homes]

只要没有其他共享使用连接到 SMB 服务器的用户的共享名称,就会使用 [homes] 共享指令动态生成一个共享。所生成的共享的名称就是用户名。

valid users = %S

一旦成功建立连接,就会使用共享的具体名称替换 %S。对于 [homes] 共享,用户名始终是 %S。这样就可以将对用户的共享的访问权限严格限制在此用户。

browseable = No

此设置使共享在网络环境中不可见。

read only = No

默认情况下,Samba 通过 read only = Yes 参数来禁止对任何已导出共享的写访问。要使共享可写,请设置值 read only = No,它与 writeable = Yes 是等效的。

create mask = 0640

那些不是基于 MS Windows NT 的系统不能理解 UNIX 权限的概念,所以它们在创建文件时不能指派权限。参数 create mask 定义了为新创建文件指派的访问权限。这仅适用于可写共享。事实上,此设置意味着拥有者具有读写权限,且拥有者的主组的成员具有读权限。valid users = %S 禁止读访问,即使该组具有读权限。要使该组能够进行读或写访问,应取消 valid users = %S 一行。

48.1.3. 安全性级别

SMB 协议来自 DOS 和 Windows 世界,它直接考虑了安全性问题。可以使用口令来保护每个共享访问。SMB 提供了 3 种可能的方式来检查权限:

共享级安全性 (security = share):

严格地为一个共享指派一个口令。任何知道此口令的用户都可以访问此共享。

用户级安全性 (security = user):

这里将用户的概念引入了 SMB。每个用户都必须使用自己的口令在服务器上注册。注册后,服务器可以根据用户名来授予访问各个已导出共享的权限。

服务器级安全性 (security = server):

从客户机来看,Samba 好像是在用户级别方式下工作。但它实际将所有口令查询传递到另一个用户级别方式下的服务器来执行鉴定。此设置需要一个附加参数 (password server =)。

共享、用户和服务器级安全性之间的区分适用于整个服务器。无法既为服务器配置的某些共享提供共享级安全性,同时又为其他共享提供用户级安全性。但是,您可以为系统上每个已配置的 IP 地址运行单独的 Samba 服务器。

有关此主题的详细信息,请参见 Samba HOWTO 文档集。对于一个系统上的多个服务器,应注意选项 interfacesbind interfaces only

[Tip]提示

对于 Samba 服务器的简单管理任务,也可以使用 swat 程序。它提供了一个简单的万维网接口,可用来方便地配置 Samba 服务器。在万维网浏览器中,打开 http://localhost:901 并以 root 用户身份登录。但必须在文件 /etc/xinetd.d/samba/etc/services 中也激活 swat。要在 /etc/xinetd.d/samba 中执行此操作,请编辑 disable 行,使其显示为 disable = no。有关 swat 的详细信息,请参见手册页。