第 28 章Samba

目录

28.1. 术语
28.2. 启动和停止 Samba
28.3. 配置 Samba 服务器
28.4. 配置客户端
28.5. 将 Samba 用作登录服务器
28.6. 带有 Active Directory 的网络中的 Samba 服务器
28.7. 更多信息

摘要

使用 Samba,可以将 Unix 计算机配置为 Mac OS X、Windows 和 OS/2 计算机的文件和打印服务器。Samba 已经发展成为一个功能完备且相当复杂的产品。使用 YaST、SWAT(一种 Web 界面)或通过手动编辑配置文件的方式来配置 Samba。

28.1. 术语

以下是 Samba 文档和 YaST 模块中使用的一些术语。

SMB 协议

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

[Tip]IBM System z:NetBIOS 支持

IBM System z 仅支持通过 TCP/IP 的 SMB。这些系统上不提供 NetBIOS 支持。

CIFS 协议

(常用因特网文件系统)协议是 Samba 支持的另一种协议。CIFS 定义网络中使用的标准远程文件系统访问协议,使用户组能够一起工作并在网络中共享文档。

NetBIOS

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

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

Samba 服务器

Samba 服务器向客户端提供 SMB/CIFS 服务和 NetBIOS over IP 命名服务。对于 Linux,Samba 服务器有三个守护程序:smbd 用于 SMB/CIFS 服务,nmbd 用于命名服务,winbind 用于身份验证。

Samba 客户端

Samba 客户端是一种能够通过 SMB 协议从 Samba 服务器使用 Samba 服务的系统。所有常见操作系统(Mac OS X、Windows 和 OS/2 等)都支持 SMB 协议。必须在所有计算机上安装 TCP/IP 协议。Samba 为多种不同的 UNIX 系统提供客户端。对于 Linux,有一个用于 SMB 的内核模块,它允许在 Linux 系统级别上集成 SMB 资源。不需要对 Samba 客户端运行任何守护程序。

共享

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

DC

域控制器 (DC) 是处理域中的帐户的服务器。为了复制数据,一个域中可有更多域控制器可用。

28.2. 启动和停止 Samba

(引导时)可以自动启动或停止 Samba 服务器,或者手动执行这两个操作。启动和停止策略是第 28.3.1 节 “使用 YaST 配置 Samba 服务器”中所述的 YaST Samba 服务器配置的一部分。

要使用 YaST 停止或开始运行 Samba 服务,请使用系统+系统服务(运行级别),并检查 winbind、smb 和 nmb。从命令行,使用 rcsmb stop && rcnmb stop 停止 Samba 所需的服务,然后使用 rcnmb start && rcsmb start 启动它们;rcsmb 依赖于 winbind(如果需要)。

28.3. 配置 Samba 服务器

SUSE® Linux Enterprise Server 中的 Samba 服务器可通过两种不同方式进行配置:用 YaST 或手动方式。手工配置可提供更详细的信息,但没有 YaST GUI 方便。

28.3.1. 使用 YaST 配置 Samba 服务器

要配置 Samba 服务器,请启动 YaST 并选择网络服务+Samba 服务器

28.3.1.1. 初始 Samba 配置

第一次启动此模块时,Samba 安装对话框启动,提示您做出一些有关服务器管理的基本决定。配置结束时,系统会提示您输入 Samba 管理员口令(Samba root 口令)。以后启动时,会显示 Samba 配置对话框。

Samba 安装对话框包括两个步骤和详细设置(可选):

工作组名或域名

工作组名或域名中选择一个现有名称或输入一个新的名称,然后单击下一步

Samba 服务器类型

在下一步中,指定服务器是应该充当主域控制器 (PDC)、备份域服务器 (BDC) 还是根本不充当域控制器。服务器默认不会配置为域控制器。按下一步继续。

如果不想再继续详细的服务器配置,请单击确定确认。然后在最后的弹出框中,设置 Samba root 口令

稍后可以在 Samba 配置对话框的启动共享身份可信域LDAP 设置选项卡中更改所有设置。

28.3.1.2. 高级 Samba 配置

在 Samba 服务器模块第一次启动时,Samba 配置对话框会在两个初始步骤后立即显示,如第 28.3.1.1 节 “初始 Samba 配置”所述。使用它调整您的 Samba 服务器配置。

编辑配置之后,单击确定保存设置。

28.3.1.2.1. 启动服务器

启动选项卡中,配置 Samba 服务器的启动。若想在每次系统引导时启动服务,请选择引导时。要激活手动启动,请选择手动。有关启动 Samba 服务器的更多信息,请参见第 28.2 节 “启动和停止 Samba”

在此选项卡中,还可以打开防火墙中的端口。为此应选择打开防火墙中的端口。如果有多个网络接口,则请通过单击防火墙细节、选择接口并单击确定来为 Samba 服务选择网络接口。

28.3.1.2.2. 共享

共享选项卡中,确定要激活的 Samba 共享。存在一些预定义的共享,例如主页和打印机。使用切换状态可在活动不活动之间进行切换。单击添加可添加新共享,单击删除可删除选中共享。

允许用户共享目录使允许的组中的组成员可以与其他用户共享他们拥有的目录。例如,users 用于本地范围,DOMAIN\Users 用于域范围。该用户必须还确保文件系统权限允许访问。最大共享数可限制可以创建的共享的总数。要允许访问用户共享而无需身份验证,请启用允许来宾访问

28.3.1.2.3. 身份

身份选项卡中,确定与主机关联的域(基本设置)以及是否在网络中使用备用主机名(NetBIOS 主机名)。可以使用 Microsoft Windows Internet Name Service (WINS) 进行名称解析。在这种情况下,激活使用 WINS 进行主机名解析,并确定是否通过 DHCP 检索 WINS 服务器。要设置专家全局设置或设置用户身份验证源,例如 LDAP 而不是 TDB 数据库,请单击高级设置

28.3.1.2.4. 可信域(T)

要使其他域的用户能够访问您的域,在可信域选项卡中进行适当的设置。要添加新域,请单击添加。要除去所选的域,请单击删除

28.3.1.2.5. LDAP 设置

在选项卡 LDAP 设置中,您可以确定要用于身份验证的 LDAP 服务器。要测试到 LDAP 服务器的连接,请单击测试连接。要设置专家 LDAP 设置或使用默认值,请单击高级设置

有关 LDAP 配置的更多信息,请参见Chapter 4, LDAP—A Directory Service (↑Security Guide)。

28.3.2. 使用 SWAT 管理 Web

Samba 服务器管理的备用工具是 SWAT(Samba Web 管理工具)。它提供了一个简单的 Web 接口,可用来配置 Samba 服务器。要使用 SWAT,请在 Web 浏览器中打开 http://localhost:901 并以 root 用户身份登录。如果没有特殊的 Samba root 帐户,则请使用系统 root 帐户。

[Note]激活 SWAT

Samba 服务器安装完成后,SWAT 将不激活。要激活它,请在 YaST 中打开网络服务+网络服务 (xinetd)、启用网络服务配置、从表中选择 swat,然后单击切换状态(“开”或“关”)

28.3.3. 手动配置服务器

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

28.3.3.1. global 部分

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

workgroup = TUX-NET

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

os level = 20

此参数确定您的 Samba 服务器是否会尝试成为其工作组的 LMB(本地主浏览器)。有了 Samba 3 版本系列,就几乎不必再覆盖默认设置 (20) 了。为了避免现有 Windows 网络受到配置错误的 Samba 服务器的任何影响,应选择非常低的值,如 2。有关此重要主题的更多信息,可以在《Samba 3 操作指南》的“网络浏览”一章中找到;有关《Smaba 3 操作指南》的更多信息,请参见第 28.7 节 “更多信息”

如果网络中没有任何其他 SMB 服务器(如 Windows 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

28.3.3.2. 共享

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

[cdrom]

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

例 28.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 文件服务器的有效帐户和口令以及自己的主目录,则该用户可以连接到此共享。

例 28.2. [homes] 共享

[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,它与 writable = Yes 是等效的。

create mask = 0640

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

28.3.3.3. 安全性级别

要提高安全性,可以使用口令来保护每个共享访问。SMB 提供以下检查许可权限的方式:

共享级安全性 (security = share)

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

用户级安全性 (security = user)

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

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

从客户端来看,Samba 好像是在用户级别方式下工作。但它实际将所有口令查询传递到另一个用户级别方式下的服务器来执行身份验证。此设置还需要 password server 参数。

ADS 级安全性 (security = ADS)

在该模式中,Samba 将在 Active Directory 环境中充当域成员。要在该模式中工作,运行 Samba 的计算机需要安装并配置 Kerberos。必须使用 Samba 将该计算机加入到 ADS 领域。此步骤可通过使用 YaST Windows 域成员资格模块完成。

域级安全性 (security = domain)

仅当计算机已加入到 Windows NT 域中时,该模式才能正常工作。Samba 将尝试验证用户名和口令,方法是将其传递到 Windows NT 主或备份域控制器。与 Windows NT 服务器所采用的方式相同。它期望将加密口令参数设置为 yes

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

有关此主题的更多信息,可以在《Samba 3 操作指南》中找到。对于一个系统上的多个服务器,应注意选项 interfacesbind interfaces only

28.4. 配置客户端

客户端只能通过 TCP/IP 访问 Samba 服务器。NetBEUI 和通过 IPX 的 NetBIOS 不能与 Samba 共用。

28.4.1. 使用 YaST 配置 Samba 客户端

配置 Samba 客户端来访问 Samba 或 Windows 服务器上的资源(文件或打印机)。在网络服务+Windows 域成员资格对话框中输入 NT 或 Active Directory 域或工作组。如果激活将 SMB 信息也用于 Linux 身份验证,则用户身份验证将在 Samba、NT 或 Kerberos 服务器上运行。

单击专家设置获取高级配置选项。例如,使用装入服务器目录表启用自动装入服务器用户主目录和身份验证。这样用户就能访问位于 CIFS 上的用户主目录。有关细节,请参见 pam_mount 手册页。

完成所有设置后,请确认对话框以完成配置。

28.5. 将 Samba 用作登录服务器

在主要由 Windows 客户端组成的网络中,使用户只能使用有效帐户和口令进行注册通常是最好的选择。在基于 Windows 的网络中,此任务由主域控制器 (PDC) 来处理。您可以使用配置为 PDC 的 Windows NT 服务器,但是此任务也可以借助 Samba 服务器来完成。中显示了必须在 smb.conf[global] 部分设置的项。例 28.3 “smb.conf 中的 global 部分”

例 28.3. smb.conf 中的 global 部分

[global]
    workgroup = TUX-NET
    domain logons = Yes
    domain master = Yes

如果使用加密口令进行校验,则 Samba 服务器必须能够处理加密口令。[global] 部分中的 encrypt passwords = yes 项启用了此功能(对于 Samba 版本 3,这是默认设置)。此外,还需要以适合 Windows 的加密格式来准备用户帐户和口令。使用命令 smbpasswd -a name 可完成此任务。使用以下命令为计算机创建 Windows 域概念要求的域帐户:

useradd hostname\$
smbpasswd -a -m hostname

使用 useradd 命令可添加一个美元符号。命令 smbpasswd 在使用参数 -m 时自动插入此符号。带注释的配置示例 (/usr/share/doc/packages/samba/examples/smb.conf.SUSE) 包含自动执行此任务的设置。

add machine script = /usr/sbin/useradd -g nogroup -c "NT Machine Account" \
-s /bin/false %m\$
     

要确保 Samba 能够正确执行此脚本,请选择具有必需的管理员权限的 Samba 用户,并将其添加到 ntadmin 组中。然后可以使用以下命令为属于此 Linux 组的所有用户指派 Domain Admin 状态:

net groupmap add ntgroup="Domain Admins" unixgroup=ntadmin

有关此主题的更多信息,请参见《Samba 3 操作指南》第 12 章,此指南可以在 /usr/share/doc/packages/samba/Samba3-HOWTO.pdf 中找到。

28.6. 带有 Active Directory 的网络中的 Samba 服务器

如果您同时运行 Linux 服务器和 Windows 服务器,则可以构建两个独立的身份验证系统和网络,或者将服务器连接到使用一个中央身份验证系统的网络。由于 Samba 可以与 Active Directory 域协作,因此您可以将 SUSE Linux Enterprise Server 加入 Active Directory(AD)。

安装期间连接现有的 AD 域或稍后在已安装的系统中使用 YaST 激活 SMB 用户认证。第 6.16.1.7 节 “用户身份验证方法” (第 6 章 使用 YaST 进行安装, ↑部署指南)中介绍了安装期间的域连接。

要在运行系统中连接 AD 域,请按如下所示继续:

  1. 作为 root 登录并启动 YaST。

  2. 启动网络服务+Windows 域成员资格

  3. Windows 域成员资格屏幕上的域或工作组中输入要加入的域。

    图 28.1. 确定 Windows 域成员资格

    确定 Windows 域成员资格

  4. 选中同时使用用于 Linux 认证的 SMB 信息,以在 SUSE Linux Enterprise Server 上使用 SMB 源进行 Linux 身份验证。

  5. 单击确定并在提示时确认域连接。

  6. 在 AD 服务器上提供 Windows Administrator 的口令,并单击确定

    现在您的服务器已经设置了从 Active Directory 域控制器获取认证数据。

[Tip]

在有多个 Samba 服务器的环境中,将不会采用一致的方式创建 UID 和 GID。指派给用户的 UID 将取决于用户首次登录的顺序,而这会导致在服务器间产生 UID 冲突。要解决此问题,您需要使用身份映射。有关详细信息,请参见https://www.samba.org/samba/docs/man/Samba-HOWTO-Collection/idmapper.html

28.7. 更多信息

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

Samba 小组提供的《Samba 3 操作指南》中有一节专门介绍查错。此外,文档的第 V 部分提供了检查配置的逐步指南。安装包 samba-doc 后,可以在 /usr/share/doc/packages/samba/Samba 3-HOWTO.pdf 中找到《Samba 3 操作指南》。


SUSE Linux Enterprise Server 管理指南 11 SP4