|Index|SUSE Linux Enterprise Server 文档|存储管理指南|网络储存|Samba
适用范围 SUSE Linux Enterprise Server 15 SP7

20 Samba

使用 Samba 可以将 Unix 计算机配置为 macOS、Windows 和 OS/2 计算机的文件和打印服务器。Samba 已经发展成功能完备且相当复杂的产品。使用 YaST 或手动编辑配置文件来配置 Samba。

重要
重要:不支持 SMB1

从 Samba 版本 4.17 开始,SUSE Linux Enterprise Server 中便已禁用 SMB1 协议,不再支持该协议。

20.1 术语

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

SMB 协议

Samba 使用基于 NetBIOS 服务的 SMB(服务器消息块)协议。Microsoft 发布该协议的目的是让来自其他制造商的软件可以与运行 Microsoft 操作系统的服务器建立连接。Samba 是在 TCP/IP 协议的基础上实施 SMB 协议的,也就是说,所有客户端上都必须安装并启用 TCP/IP。

提示
提示:IBM Z:NetBIOS 支持

IBM Z 仅支持基于 TCP/IP 的 SMB。这些系统上不提供 NetBIOS 支持。

CIFS 协议

CIFS(Common Internet File System,通用互联网文件系统)协议是 SMB 协议的早期版本,也称为 SMB1。CIFS 定义 TCP/IP 上使用的标准远程文件系统访问协议,使用户组能够通过互联网协同工作并共享文档。

SMB1 已被 SMB2 取代,后者最初是作为 Microsoft Windows Vista™ 的一部分发布的。SMB2 又被 Microsoft Windows 8™ 和 Microsoft Windows Server 2012 中的 SMB3 取代。在最近的 Samba 版本中,出于安全原因默认已禁用 SMB1。

NetBIOS

NetBIOS 是专用于名称解析和网络上计算机间通讯的软件接口 (API)。它使连接到网络的计算机能够为自己预留名称。之后便可以根据名称对这些计算机进行寻址。没有任何中心进程来检查这些名称。网络上的任何计算机均可以预留所需数量的名称,前提是这些名称尚未使用。可以在不同网络协议的基础上实现 NetBIOS。一种相对简单、不可路由的实现称为 NetBEUI(常常与 NetBIOS API 混淆)。NetBIOS 也可以在 Novell IPX/SPX 协议上运行。从版本 3.2 开始,Samba 支持在 IPv4 和 IPv6 上运行 NetBIOS。

通过 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 服务的系统。常用操作系统(例如 Windows 和 macOS)都支持 SMB 协议。必须在所有计算机上安装 TCP/IP 协议。Samba 提供适用于多种不同类型 UNIX 的客户端。对于 Linux,有一个用于 SMB 的内核模块,它允许在 Linux 系统级别上集成 SMB 资源。不需要对 Samba 客户端运行任何守护程序。

共享

SMB 服务器通过共享为客户端提供资源。共享是指服务器上的目录(包括其子目录)和打印机。通过共享名称可导出和访问共享。可以将共享名称设置为任何名称 — 不一定是导出目录的名称。共享打印机也有相应的名称。客户端可以根据共享目录和打印机的名称来访问它们。

按照惯例,以美元符号 ($) 结尾的共享名称会被隐藏。使用 Windows 计算机浏览可用共享时,这些共享不会显示。

DC

域控制器 (DC) 是处理域中帐户的服务器。为了进行数据复制,在单个域中可以使用多个域控制器。

20.2 安装 Samba 服务器

要安装 Samba 服务器,请启动 YaST 并选择软件 › 软件管理。选择视图 › 模式,然后选择文件服务器。确认已安装完成安装进程所需的软件包。

20.3 启动和停止 Samba

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

在命令行中使用 systemctl stop smb nmb 可停止 Samba 所需的服务,使用 systemctl start nmb smb 可启动这些服务。smb 服务会根据需要处理 winbind。

提示
提示:winbind

winbind 是一项独立服务,也是以单独的 samba-winbind 软件包提供。

20.4 配置 Samba 服务器

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

20.4.1 使用 YaST 配置 Samba 服务器

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

20.4.1.1 初始 Samba 配置

第一次启动此模块时,Samba 安装对话框会启动,提示您进行一些与服务器管理相关的基本设置。配置结束时,系统会提示您输入 Samba 管理员口令(Samba Root 口令)。以后启动时,会显示 Samba 配置对话框。

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

工作组名或域名

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

Samba 服务器类型

在下一步中,指定服务器是应该充当主域控制器 (PDC)、备用域服务器 (BDC) 还是不充当域控制器。单击下一步继续。

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

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

20.4.1.2 在服务器上启用最新版本的 SMB 协议

在运行最新版 SUSE Linux Enterprise Server 或其他最新 Linux 版本的客户端上,默认已禁用不安全的 SMB1/CIFS 协议。但是,现有的 Samba 实例可能配置为仅使用 SMB1/CIFS 版协议处理共享。要与此类客户端交互,需将 Samba 配置为至少使用 SMB 2.1 协议来为共享提供服务。

在某些设置中只能使用 SMB1,例如,当这些设置依赖于 SMB1/CIFS 的 Unix 扩展时。这些扩展尚未移植到更高的协议版本。如果您遇到这种情况,请考虑更改设置,或参见第 20.5.2 节 “在客户端上挂载 SMB1/CIFS 共享”。

要更改设置,请在配置文件 /etc/samba/smb.conf 中设置全局参数 server max protocol = SMB2_10。有关所有可能值的列表,请参见 man smb.conf。

20.4.1.3 高级 Samba 配置

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

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

20.4.1.3.1 启动服务器

在启动选项卡中,配置 Samba 服务器的启动设置。如果想要在每次系统引导时都启动该服务,请选择引导期间。要激活手动启动模式,请选择手动。有关启动 Samba 服务器的更多信息,请参见第 20.3 节 “启动和停止 Samba”。

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

20.4.1.3.2 共享

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

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

20.4.1.3.3 身份

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

20.4.1.3.4 可信域

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

20.4.1.3.5 LDAP 设置

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

有关 LDAP 配置的更多信息,请参见第 5 章 “使用 389 Directory Server 的 LDAP”。

20.4.2 手动配置服务器

如果要将 Samba 用作服务器,请安装 samba。Samba 的主配置文件是 /etc/samba/smb.conf。可以将此文件分为两个逻辑部分。[global] 部分包含中央和全局设置。以下默认部分包含各个文件和打印机共享:

  • [homes]

  • [profiles]

  • [users]

  • [groups]

  • [printers]

  • [print$]

通过此方法,您可以设置不同的共享选项,或在 [global] 部分设置全局共享选项,这使得配置文件更容易理解。

20.4.2.1 global 部分

应该修改 [global] 部分的以下参数来满足网络设置的要求,以使其他计算机能在 Windows 环境中通过 SMB 访问 Samba 服务器。

workgroup = WORKGROUP

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

os level = 20

此参数确定您的 Samba 服务器是否会尝试成为其工作组的 LMB(本地主浏览器)。为了避免现有 Windows 网络因 Samba 服务器配置不当而中断,应选择非常低的值,如 2。有关此主题的详细信息,请参见 Samba 3 Howto 的“Network Browsing”(网络浏览)一章。有关 Samba 3 Howto 的详细信息,请参见第 20.9 节 “更多信息”。

如果网络中没有其他 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 server 和 wins support。

20.4.2.2 共享

以下示例说明如何将 CD-ROM 驱动器和用户目录 (homes) 开放给 SMB 客户端使用。

[cdrom]

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

例 20.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]

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

例 20.2︰ [homes] 共享
[homes]
        comment = Home Directories
        valid users = %S
        browseable = No
        read only = No
        inherit acls = Yes
[homes]

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

valid users = %S

成功建立连接后,会使用具体的共享名称替换 %S。对于 [homes] 共享,此名称一律为用户名。这样就可以将用户的共享访问权仅限制于此用户。

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 一行。

警告
警告:不要与 Samba 共享 NFS 载具

与 Samba 共享 NFS 挂载可能导致数据丢失,因此不支持这样做。请直接在文件服务器上安装 Samba,或者考虑使用替代方法,例如 iSCSI。

20.4.2.3 安全性级别

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

用户级安全性 (security = user)

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

ADS 级安全性 (security = ADS)

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

域级安全性 (security = domain)

仅当计算机已加入 Windows NT 域时,此模式才能正常工作。Samba 会尝试将用户名和口令传递给 Windows 主要或备用域控制器来验证该信息,这与 Windows Server 采用的方式相同。它期望将加密口令参数设置为 yes。

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

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

20.5 配置客户端

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

20.5.1 使用 YaST 配置 Samba 客户端

配置 Samba 客户端来访问 Samba 或 Windows 服务器上的资源(文件或打印机)。在网络服务 › Windows 域成员资格对话框中输入 Windows 或 Active Directory 域或工作组。如果选中了同时使用 SMB 信息进行 Linux 身份验证,则用户身份验证将通过 Samba、Windows 或 Kerberos 服务器上进行。

单击专家设置可访问高级配置选项。例如,使用装入服务器目录表可设置在通过身份验证时自动挂载服务器用户主目录。这样用户就能访问他们在 CIFS 上的主目录。有关详细信息,请参见 pam_mount 手册页。

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

20.5.2 在客户端上挂载 SMB1/CIFS 共享

第一个 SMB 网络协议版本 SMB1 或 CIFS 是不安全的旧协议,其开发者 Microsoft 已將其弃用。出于安全考虑,SUSE Linux Enterprise Server 上的 mount 命令默认只会使用较新的协议版本(即 SMB 2.1、SMB 3.0 或 SMB 3.02)挂载 SMB 共享。

但是,此项更改只会影响通过 /etc/fstab 执行的 mount 命令和挂载操作。您仍然可以通过明确要求的方式来使用 SMB1。请使用以下参数:

  • smbclient 工具。

  • SUSE Linux Enterprise Server 随附的 Samba 服务器软件。

在以下设置中,由于只能使用 SMB1,此项默认设置会导致连接失败:

  • 使用不支持较新 SMB 协议版本的 SMB 服务器的设置。自 Windows 7 和 Windows Server 2008 开始,Windows 已推出 SMB 2.1 支持。

  • 依赖于 SMB1/CIFS 的 Unix 扩展的设置。这些扩展尚未移植到更高的协议版本。

重要
重要:系统安全性降低

遵循以下说明可以解决安全问题。有关这些问题的详细信息,请参见 https://blogs.technet.microsoft.com/filecab/2016/09/16/stop-using-smb1/。

尽快升级服务器以使用更安全的 SMB 版本。

有关在 SUSE Linux Enterprise Server 上启用适当协议版本的信息,请参见第 20.4.1.2 节 “在服务器上启用最新版本的 SMB 协议”。

如果您需要在当前的 SUSE Linux Enterprise Server 内核中启用 SMB1 共享,请将选项 vers=1.0 添加到所用的 mount 命令行中:

# mount -t cifs //HOST/SHARE /MOUNT_POINT –o username=USER_ID,vers=1.0

或者,您也可以在安装的 SUSE Linux Enterprise Server 中全局启用 SMB1 共享。要实现此目的,请在 /etc/samba/smb.conf 中的 [global] 部分下添加以下代码:

        client min protocol = CORE

20.6 将 Samba 用作登录服务器

在商务设置中,组织通常希望只允许已在中心实例上注册的用户进行访问。在基于 Windows 的网络中,此任务由主域控制器 (PDC) 来处理。您可以使用配置为 PDC 的 Windows 服务器,但也可借助 Samba 服务器完成此任务。例 20.3 “Smb.conf 中的 global 部分”中显示了必须在 smb.conf 的 [global] 部分设置的项。

例 20.3︰ Smb.conf 中的 global 部分
[global]
    workgroup = WORKGROUP
    domain logons = Yes
    domain master = Yes

需要准备所用加密方式与 Windows 兼容的用户帐户和口令。可使用命令 smbpasswd -a name 来完成此任务。使用以下命令为计算机创建 Windows 域概念要求的域帐户:

useradd hostname
smbpasswd -a -m hostname

使用 useradd 命令可添加一个美元符号。与参数 -m 结合使用时,命令 smbpasswd 会自动插入此符号。带注释的配置示例 (/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

20.7 配置了 Active Directory 的网络中的 Samba 服务器

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

要加入到 AD 域,请执行以下操作:

  1. 以 root 身份登录并启动 YaST。

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

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

    加入工作组或域。
    图 20.1︰ 确定 Windows 域成员资格
  4. 选中同时使用 SMB 信息进行 Linux 身份验证,以在服务器上使用 SMB 源进行 Linux 身份验证。

  5. 单击确定,并在系统提示时确认加入域。

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

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

或者,您可以使用 realmd 工具连接到 Active Directory。有关细节,请参见 第 20.7.1 节 “使用 realmd 管理 Active Directory”。

提示
提示:身份映射

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

20.7.1 使用 realmd 管理 Active Directory

realmd 属于 DBus 服务,可用于配置网络身份验证和域成员资格。

20.7.1.1 发现 Active Directory 域

realmd 通过检查 DNS SRV 记录来发现可以使用或配置哪些域或领域。请确保要发现的 Active Directory 域有相应的 DNS SRV 记录,例如下例中的 domain.example.com:

_ldap._tcp.dc._msdcs.domain.example.com.

DNS 记录应由 Active Directory 附带的 DNS 服务器自动创建。

要发现特定域名,请运行以下命令:

> sudo realm discover --verbose domain.example.com

* Resolving: _ldap._tcp.dc._msdcs.domain.example.com
 * Sending MS-CLDAP ping to: 192.168.20.10
 * Sending MS-CLDAP ping to: 192.168.12.12
 * Successfully discovered: domain.example.com
...

要加入特定的 Active Directory 域,请运行以下命令:

> sudo realm join --verbose domain.example.com

加入 Active Directory 域后,可以将计算机配置为允许使用域帐户登录。要实现此目的,请运行以下命令:

> sudo realm permit --realm domain.example.com --all

要通过在命令中指定特定帐户来仅允许这些帐户,请使用以下命令:

> sudo realm permit --realm domain.example.com DOMAIN\\USERNAME DOMAIN\\USERNAME

要拒绝任何域帐户登录,请使用以下命令:

> sudo realm deny --realm domain.example.com --all

20.8 高级主题

本节介绍用于管理 Samba 套件的客户端组件与服务器组件的高级方法。

20.8.1 使用 systemd 自动挂载 CIFS 文件系统

在启动时可以使用 systemd 来挂载 CIFS 共享。为此,请执行如下操作:

  1. 创建挂载点:

    > mkdir -p PATH_SERVER_SHARED_FOLDER

    其中 PATH_SERVER_SHARED_FOLDER 是后续步骤中提到的 /cifs/shared。

  2. 创建 systemd 单元文件,并基于上一步中指定的路径生成文件名(其中的“/”需替换为“-”),例如:

    > sudo touch /etc/systemd/system/cifs-shared.mount

    该文件包含以下内容:

    [Unit]
    Description=CIFS share from The-Server
    
    [Mount]
    What=//The-Server/Shared-Folder
    Where=/cifs/shared
    Type=cifs
    Options=rw,username=vagrant,password=admin
    
    [Install]
    WantedBy=multi-user.target
  3. 启用服务:

    > sudo systemctl enable cifs-shared.mount
  4. 启动服务:

    > sudo systemctl start cifs-shared.mount

    要校验该服务是否正在运行,请运行以下命令:

    > sudo systemctl status cifs-shared.mount
  5. 要确认 CIFS 共享路径是否可用,请尝试运行以下命令:

    >  cd /cifs/shared
    > ls -l
    
    total 0
    -rwxrwxrwx. 1 root    root    0 Oct 24 22:31 hello-world-cifs.txt
    drwxrwxrwx. 2 root    root    0 Oct 24 22:31 subfolder
    -rw-r--r--. 1 vagrant vagrant 0 Oct 28 21:51 testfile.txt

20.8.2 Btrfs 上的透明文件压缩

Samba 允许客户端针对 Btrfs 文件系统中的共享远程操作文件与目录压缩标志。Windows 资源管理器可让用户通过文件 › 属性 › 高级对话框来标记要进行透明压缩的文件/目录:

文件属性
图 20.2︰ Windows 资源管理器高级属性对话框

带有压缩标志的文件将以透明方式进行压缩,当用户访问或修改这些文件时,底层文件系统会将其解压缩。这通常可以节省存储容量,不过,在访问文件时会造成额外的 CPU 开销。除非新文件和目录是使用 FILE_NO_COMPRESSION 选项创建的,否则,它们将继承父目录的压缩标志。

Windows 资源管理器以不同的显示方式区分压缩文件和未压缩文件:

Windows 资源管理器目录列表
图 20.3︰ 列有压缩文件的 Windows 资源管理器目录

要启用 Samba 共享压缩,您可以将以下内容

vfs objects = btrfs

手动添加到 /etc/samba/smb.conf 中的共享配置,或使用 YaST 来配置:依次单击网络服务 › Samba 服务器 › 添加,然后选中使用 Btrfs 功能。

有关 Btrfs 上的压缩功能的一般概述,请参见第 1.2.2.1 节 “挂载压缩的 Btrfs 文件系统”。

20.8.3 快照

快照也称为阴影副本,是指某个文件系统子卷在特定时间点的状态副本。在 Linux 中,可以使用 Snapper 工具来管理这些快照。Btrfs 文件系统或精简配置的 LVM 卷支持快照。Samba 套件支持通过服务器端和客户端的 FSRVP 协议管理远程快照。

20.8.3.1 以前的版本

Samba 服务器上的快照可以作为先前版本的文件或目录向远程 Windows 客户端公开。

要在 Samba 服务器上启用快照,必须符合以下条件:

  • SMB 网络共享位于 Btrfs 子卷上。

  • SMB 网络共享路径中包含相关的 Snapper 配置文件。可以使用以下命令创建 snapper 文件

    > sudo snapper -c <cfg_name> create-config /path/to/share

    有关 Snapper 的详细信息,请参见第 10 章 “使用 Snapper 进行系统恢复和快照管理”。

  • 必须允许相关用户访问快照目录树。有关更多信息,请参见 vfs_snapper 手册页 (man 8 vfs_snapper) 的 PERMISSIONS(权限)部分。

要支持远程快照,需要修改 /etc/samba/smb.conf 文件。要完成此操作,您可以选择 YaST › 网络服务 › Samba 服务器,或者使用以下命令手动增强相关的共享部分:

vfs objects = snapper

请注意,只有在重启动 Samba 服务后,手动对 smb.conf 进行的更改才能生效:

> sudo systemctl restart nmb smb
添加新的 Samba 共享
图 20.4︰ 在启用快照的情况下添加新的 Samba 共享

经过配置后,可以通过 Windows 资源管理器中某个文件或目录的先前版本选项卡访问 Snapper 为 Samba 共享路径创建的快照。

“先前版本”选项卡
图 20.5︰ Windows 资源管理器中的先前版本选项卡

20.8.3.2 远程共享快照

默认情况下,只能在 Samba 服务器本地创建和删除快照,使用的工具可以是 Snapper 命令行实用程序或其时间轴功能。

可将 Samba 配置为使用文件服务器远程 VSS 协议 (FSRVP) 处理远程主机发出的共享快照创建和删除请求。

除了 第 20.8.3.1 节 “以前的版本” 中所述的配置和先决条件以外,还需要在 /etc/samba/smb.conf 中指定以下全局配置:

[global]
rpc_daemon:fssd = fork
registry shares = yes
include = registry

然后,FSRVP 客户端(包括 Samba 的 rpcclient 以及 Windows Server 2012 DiskShadow.exe)便可以指示 Samba 为指定的共享创建或删除快照,并将该快照公开为新共享。

20.8.3.3 使用 rpcclient 从 Linux 中远程管理快照

软件包 samba-client 中包含 FSRVP 客户端,可以远程请求 Windows/Samba 服务器创建并公开指定共享的快照。然后,您可以使用 SUSE Linux Enterprise Server 中的现有工具挂载公开的共享并备份其文件。向服务器发出的请求将使用 rpcclient 二进制文件发送。

例 20.4︰ 使用 rpcclient 请求 Windows Server 2012 共享快照

以 EXAMPLE 域中管理员的身份连接到 win-server.example.com 服务器:

# rpcclient -U 'EXAMPLE\Administrator' ncacn_np:win-server.example.com[ndr64,sign]
Enter EXAMPLE/Administrator's password:

检查 SMB 共享是否对于 rpcclient 可见:

# rpcclient $> netshareenum
netname: windows_server_2012_share
remark:
path:   C:\Shares\windows_server_2012_share
password:       (null)

检查 SMB 共享是否支持创建快照:

# rpcclient $> fss_is_path_sup windows_server_2012_share \
UNC \\WIN-SERVER\windows_server_2012_share\ supports shadow copy requests

请求创建共享快照:

# rpcclient $> fss_create_expose backup ro windows_server_2012_share
13fe880e-e232-493d-87e9-402f21019fb6: shadow-copy set created
13fe880e-e232-493d-87e9-402f21019fb6(1c26544e-8251-445f-be89-d1e0a3938777): \
\\WIN-SERVER\windows_server_2012_share\ shadow-copy added to set
13fe880e-e232-493d-87e9-402f21019fb6: prepare completed in 0 secs
13fe880e-e232-493d-87e9-402f21019fb6: commit completed in 1 secs
13fe880e-e232-493d-87e9-402f21019fb6(1c26544e-8251-445f-be89-d1e0a3938777): \
share windows_server_2012_share@{1C26544E-8251-445F-BE89-D1E0A3938777} \
exposed as a snapshot of \\WIN-SERVER\windows_server_2012_share\

确认服务器是否已公开快照共享:

# rpcclient $> netshareenum
netname: windows_server_2012_share
remark:
path:   C:\Shares\windows_server_2012_share
password:       (null)

netname: windows_server_2012_share@{1C26544E-8251-445F-BE89-D1E0A3938777}
remark: (null)
path:   \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy{F6E6507E-F537-11E3-9404-B8AC6F927453}\Shares\windows_server_2012_share\
password:       (null)

尝试删除快照共享:

# rpcclient $> fss_delete windows_server_2012_share \
13fe880e-e232-493d-87e9-402f21019fb6 1c26544e-8251-445f-be89-d1e0a3938777
13fe880e-e232-493d-87e9-402f21019fb6(1c26544e-8251-445f-be89-d1e0a3938777): \
\\WIN-SERVER\windows_server_2012_share\ shadow-copy deleted

确认服务器是否已去除快照共享:

# rpcclient $> netshareenum
netname: windows_server_2012_share
remark:
path:   C:\Shares\windows_server_2012_share
password:       (null)

20.8.3.4 使用 DiskShadow.exe 从 Windows 中远程管理快照

您也可以从 Windows 客户端中管理 Linux Samba 服务器上 SMB 共享的快照。Windows Server 2012 提供了 DiskShadow.exe 实用程序,该实用程序可以使用与第 20.8.3.3 节 “使用 rpcclient 从 Linux 中远程管理快照”中所述的 rpcclient 命令类似的方式管理远程共享。请注意,首先您需要妥善设置 Samba 服务器。

以下示例步骤描述了如何设置 Samba 服务器,以使 Windows 客户端能够管理其共享的快照。请注意,EXAMPLE 是测试环境中使用的 Active Directory 域,fsrvp-server.example.com 是 Samba 服务器的主机名,/srv/smb 是 SMB 共享的路径。

过程 20.1︰ Samba 服务器配置详细说明
  1. 通过 YaST 加入 Active Directory 域。有关详细信息,请参见第 20.7 节 “配置了 Active Directory 的网络中的 Samba 服务器”。

  2. 确保 Active Directory 域的 DNS 项正确无误:

    fsrvp-server:~ # net -U 'Administrator' ads dns register \
    fsrvp-server.example.com <IP address>
    Successfully registered hostname with DNS
  3. 在 /srv/smb 处创建 Btrfs 子卷:

    fsrvp-server:~ # btrfs subvolume create /srv/smb
  4. 为路径 /srv/smb 创建 Snapper 配置文件:

    fsrvp-server:~ # snapper -c <snapper_config> create-config /srv/smb
  5. 创建路径为 /srv/smb 的新共享,并选中 YaST 的公开快照复选框。确保将以下代码段添加到 /etc/samba/smb.conf 的 global 部分,如 第 20.8.3.2 节 “远程共享快照” 中所述:

    [global]
     rpc_daemon:fssd = fork
     registry shares = yes
     include = registry
  6. 使用 systemctl restart nmb smb 重启动 Samba。

  7. 配置 Snapper 权限:

    fsrvp-server:~ # snapper -c <snapper_config> set-config \
    ALLOW_USERS="EXAMPLE\\\\Administrator EXAMPLE\\\\win-client$"

    确保还允许所有 ALLOW_USERS 实例访问 .snapshots 子目录。

    fsrvp-server:~ # snapper -c <snapper_config> set-config SYNC_ACL=yes
    重要
    重要:路径转义

    请小心使用“\”转义!请转义两次,以确保 /etc/snapper/configs/<snapper_config> 中存储的值转义一次。

    "EXAMPLE\win-client$" 对应于 Windows 客户端计算机帐户。对此帐户进行验证后,Windows 将发出初始 FSRVP 请求。

  8. 授予 Windows 客户端帐户必要的特权:

    fsrvp-server:~ # net -U 'Administrator' rpc rights grant \
    "EXAMPLE\\win-client$" SeBackupPrivilege
    Successfully granted rights.

    不需要对 "EXAMPLE\Administrator" 用户执行上一条命令,因为已授予该用户特权。

过程 20.2︰ Windows 客户端设置和 DiskShadow.exe 的实际运用
  1. 引导 Windows Server 2012(示例主机名为 WIN-CLIENT)。

  2. 就像在 SUSE Linux Enterprise Server 上那样,加入到同一个 Active Directory 域“EXAMPLE”。

  3. 重引导。

  4. 打开 PowerShell。

  5. 启动 DiskShadow.exe,然后开始执行备份过程:

    PS C:\Users\Administrator.EXAMPLE> diskshadow.exe
    Microsoft DiskShadow version 1.0
    Copyright (C) 2012 Microsoft Corporation
    On computer:  WIN-CLIENT,  6/17/2014 3:53:54 PM
    
    DISKSHADOW> begin backup
  6. 指定阴影副本在程序退出、重置和重引导期间持续存在。

    DISKSHADOW> set context PERSISTENT
  7. 检查指定的共享是否支持快照,然后创建一个快照:

    DISKSHADOW> add volume \\fsrvp-server\sles_snapper
    
    DISKSHADOW> create
    Alias VSS_SHADOW_1 for shadow ID {de4ddca4-4978-4805-8776-cdf82d190a4a} set as \
     environment variable.
    Alias VSS_SHADOW_SET for shadow set ID {c58e1452-c554-400e-a266-d11d5c837cb1} \
     set as environment variable.
    
    Querying all shadow copies with the shadow copy set ID \
     {c58e1452-c554-400e-a266-d11d5c837cb1}
    
     * Shadow copy ID = {de4ddca4-4978-4805-8776-cdf82d190a4a}     %VSS_SHADOW_1%
        - Shadow copy set: {c58e1452-c554-400e-a266-d11d5c837cb1}  %VSS_SHADOW_SET%
        - Original count of shadow copies = 1
        - Original volume name: \\FSRVP-SERVER\SLES_SNAPPER\ \
          [volume not on this machine]
        - Creation time: 6/17/2014 3:54:43 PM
        - Shadow copy device name:
          \\FSRVP-SERVER\SLES_SNAPPER@{31afd84a-44a7-41be-b9b0-751898756faa}
        - Originating machine: FSRVP-SERVER
        - Service machine: win-client.example.com
        - Not exposed
        - Provider ID: {89300202-3cec-4981-9171-19f59559e0f2}
        - Attributes:  No_Auto_Release Persistent FileShare
    
    Number of shadow copies listed: 1
  8. 完成备份过程:

    DISKSHADOW> end backup
  9. 创建快照后,尝试将它删除,并确认删除结果:

    DISKSHADOW> delete shadows volume \\FSRVP-SERVER\SLES_SNAPPER\
    Deleting shadow copy {de4ddca4-4978-4805-8776-cdf82d190a4a} on volume \
     \\FSRVP-SERVER\SLES_SNAPPER\ from provider \
    {89300202-3cec-4981-9171-19f59559e0f2} [Attributes: 0x04000009]...
    
    Number of shadow copies deleted: 1
    
    DISKSHADOW> list shadows all
    
    Querying all shadow copies on the computer ...
    No shadow copies found in system.

20.9 更多信息

  • 手册页: 要查看随 samba 软件包一起安装的所有 man 页的列表,请运行 apropos samba。使用 man NAME_OF_MAN_PAGE 打开任一手册页。

  • SUSE 特定的 README 文件: 软件包 samba-client 中包含文件 /usr/share/doc/packages/samba/README.SUSE。

  • 其他软件包文档: 使用 zypper install samba-doc 安装 samba-doc 软件包。

    此文档将安装到 /usr/share/doc/packages/samba。其中包含 HTML 版本手册页以及示例配置库(例如 smb.conf.SUSE)。

  • 联机文档: Samba Wiki 包含详尽的 User Documentation,网址为:https://wiki.samba.org/index.php/User_Documentation。