跳转到内容跳转到页面导航:上一页 [访问键 p]/下一页 [访问键 n]
参考 › 服务 › Samba
适用于 openSUSE Leap 15.6
摘要

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

Important
重要提示:SMB1 不受支持

从 Samba 4.17 版本开始,SMB1 协议已在 openSUSE Leap 中禁用。

21.1 术语 编辑源文件

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

SMB 协议

Samba 使用 SMB(服务器消息块)协议,该协议基于 NetBIOS 服务。Microsoft 发布该协议是为了使其他制造商的软件能够与运行 Microsoft 操作系统的服务器建立连接。Samba 在 TCP/IP 协议之上实现 SMB 协议,这意味着 TCP/IP 必须安装并启用在所有客户端上。

CIFS 协议

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

SMB1 已被 SMB2 取代,该协议首次作为 Microsoft Windows Vista™ 的一部分发布。随后又被 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 客户端是一个使用 Samba 服务通过 SMB 协议从 Samba 服务器获取服务的系统。常见的操作系统,如 Windows 和 macOS,都支持 SMB 协议。所有计算机上都必须安装 TCP/IP 协议。Samba 为不同的 Unix 变体提供客户端。对于 Linux,有一个用于 SMB 的内核模块,允许在 Linux 系统级别集成 SMB 资源。您不需要为 Samba 客户端运行任何守护进程。

共享

SMB 服务器通过 共享 向客户端提供资源。共享是服务器上的目录(包括其子目录)和打印机。共享通过 共享名称 导出,可以通过该名称访问。共享名称可以设置为任何名称,不必是导出目录的名称。共享打印机也分配有名称。客户端可以通过其名称访问共享目录和打印机。

按约定,以美元符号 ($) 结尾的共享名称是隐藏的。在使用 Windows 计算机浏览可用共享时,它们将不会显示。

DC

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

21.2 安装 Samba 服务器 编辑源文件

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

21.3 启动和停止 Samba 编辑源文件

您可以自动(在启动期间)或手动启动或停止 Samba 服务器。启动和停止策略是 YaST Samba 服务器配置的一部分,如 第 21.4.1 节,“使用 YaST 配置 Samba 服务器” 中所述。

从命令行,使用 systemctl stop smb nmb 停止 Samba 所需的服务,并使用 systemctl start nmb smb 启动它们。如果需要,smb 服务会负责 winbind

Tip
提示:winbind

winbind 是一种独立的服務,也作为单独的 samba-winbind 包提供。

21.4 配置 Samba 服务器 编辑源文件

openSUSE® Leap 中,Samba 服务器可以通过两种不同的方式进行配置:使用 YaST 或手动。手动配置提供更高的详细程度,但缺乏 YaST GUI 的便利性。

21.4.1 使用 YaST 配置 Samba 服务器 编辑源文件

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

21.4.1.1 初始 Samba 配置 编辑源文件

首次启动模块时,将启动 Samba 安装 对话框,提示您就服务器管理做出一些基本决策。配置结束时,它会提示输入 Samba 管理员密码 (Samba Root 密码)。对于后续启动,将显示 Samba 配置 对话框。

Samba 安装 对话框由两个步骤和可选的详细设置组成

工作组或域名

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

Samba 服务器类型

在下一步中,指定您的服务器是充当主域控制器 (PDC)、备份域控制器 (BDC) 还是不充当域控制器。使用 下一步 继续。

如果您不想进行详细的服务器配置,请使用 确定 确认。然后在最终的弹出框中,设置 Samba root 密码

您可以在 启动共享身份信任域LDAP 设置 选项卡中,稍后更改所有设置。

21.4.1.2 在服务器上启用当前版本的 SMB 协议 编辑源文件

在运行当前版本 openSUSE Leap 或其他最新 Linux 版本的客户端上,默认情况下禁用不安全的 SMB1/CIFS 协议。但是,现有的 Samba 实例可能配置为仅使用 SMB1/CIFS 版本的协议提供共享。为了与此类客户端交互,您需要配置 Samba 以使用至少 SMB 2.1 协议提供共享。

存在只能使用 SMB1 的设置,例如,因为它们依赖于 SMB1/CIFS 的 Unix 扩展。这些扩展尚未移植到较新的协议版本。如果您遇到这种情况,请考虑更改您的设置,或参阅 第 21.5.2 节,“在客户端上挂载 SMB1/CIFS 共享”

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

21.4.1.3 高级 Samba 配置 编辑源文件

在 Samba 服务器模块首次启动期间,Samba 配置 对话框将直接出现在 第 21.4.1.1 节,“初始 Samba 配置” 中描述的两个初始步骤之后。使用它来调整您的 Samba 服务器配置。

编辑完配置后,单击 确定 以保存您的设置。

21.4.1.3.1 启动服务器 编辑源文件

启动 选项卡中,配置 Samba 服务器的启动方式。要在系统每次启动时启动该服务,请选择 启动时。要激活手动启动,请选择 手动。有关启动 Samba 服务器的更多信息,请参阅 第 21.3 节,“启动和停止 Samba”

在此选项卡中,您还可以打开防火墙中的端口。要执行此操作,请选择 在防火墙中打开端口。如果您有多个网络接口,请通过单击 防火墙详细信息、选择接口并单击 确定 来选择 Samba 服务的网络接口。

21.4.1.3.2 共享 编辑源文件

共享 选项卡中,确定要激活的 Samba 共享。有一些预定义的共享,例如 homes 和 printers。使用 切换状态活动非活动 之间切换。单击 添加 以添加新共享,并单击 删除 以删除所选共享。

允许用户共享他们的目录 允许属于 允许的组 中的成员共享他们拥有的目录给其他用户。例如,本地作用域的 users 或域作用域的 DOMAIN\Users。用户还必须确保文件系统权限允许访问。使用 最大共享数,限制可以创建的总共享数。要允许在没有身份验证的情况下访问用户共享,请启用 允许访客访问

21.4.1.3.3 身份 编辑源文件

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

21.4.1.3.4 信任域 编辑源文件

要允许来自其他域的用户访问您的域,请在 信任域 选项卡中进行适当的设置。单击 添加 添加新域。单击 删除 删除所选域。

21.4.1.3.5 LDAP 设置 编辑源文件

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

有关 LDAP 配置的更多信息,请参阅 “安全和加固指南”书籍,第 5 章“389 目录服务器的 LDAP”

21.4.2 手动配置服务器 编辑源文件

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

  • [homes]

  • [profiles]

  • [users]

  • [groups]

  • [printers]

  • [print$]

使用这种方法,可以以不同的方式或在 [global] 部分全局设置共享的选项,从而使配置文件更易于理解。

21.4.2.1 全局部分 编辑源文件

应修改 [global] 部分的以下参数,以匹配您的网络设置要求,以便其他机器可以通过 SMB 在 Windows 环境中访问您的 Samba 服务器。

workgroup = WORKGROUP

此行将 Samba 服务器分配到一个工作组。将 WORKGROUP 替换为您的网络环境中的适当工作组。除非该名称已分配给网络中的其他机器,否则您的 Samba 服务器将显示在其 DNS 名称下。如果 DNS 名称不可用,请使用 netbiosname=MYNAME 设置服务器名称。有关此参数的更多详细信息,请参阅 smb.conf man 页面。

os level = 20

此参数触发您的 Samba 服务器是否尝试成为其工作组的 LMB(本地主浏览器)。选择一个非常低的值,例如 2,以避免配置不当的 Samba 服务器对现有的 Windows 网络造成任何干扰。有关此主题的更多信息,请参阅 Samba 3 HOWTO 的网络浏览章节。有关 Samba 3 HOWTO 的更多信息,请参阅 第 21.9 节,“更多信息”

如果您的网络中没有其他 SMB 服务器(例如 Windows 2000 服务器),并且您希望 Samba 服务器保留本地环境中所有系统列表,请将 os level 设置为更高的值(例如,65)。然后您的 Samba 服务器将被选为本地网络的 LMB。

更改此设置时,请仔细考虑这可能会如何影响现有的 Windows 网络环境。首先,在隔离的网络或非关键时间测试更改。

wins supportwins server

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

如果您的 Windows 机器连接到单独的子网,并且仍然需要了解彼此,则需要设置 WINS 服务器。要将 Samba 服务器变成这样的 WINS 服务器,请设置选项 wins support = Yes。确保网络中的只有一个 Samba 服务器启用此设置。在您的 smb.conf 文件中,不得同时启用 wins serverwins support 选项。

21.4.2.2 共享 编辑源文件

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

[cdrom]

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

示例 21.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 文件服务器具有有效的帐户和密码以及他们自己的主目录,则可以连接到它。

示例 21.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

Warning
警告:不要共享 NFS 挂载与 Samba

与 Samba 共享 NFS 挂载可能会导致数据丢失,并且不受支持。将 Samba 直接安装在文件服务器上,或考虑使用替代方案,例如 iSCSI

21.4.2.3 安全级别 编辑源文件

为了提高安全性,可以使用密码保护每个共享访问。SMB 提供以下检查权限的方式

用户级别安全 (security = user)

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

ADS 级别安全 (security = ADS)

在此模式下,Samba 将作为 Active Directory 环境中的域成员运行。要在此模式下运行,运行 Samba 的机器需要安装并配置 Kerberos。您必须使用 YaST Windows 域成员身份 模块将使用 Samba 的机器加入 ADS 领域。

域级别安全 (security = domain)

只有当机器已加入 Windows NT 域时,此模式才能正常工作。Samba 将尝试通过将其传递到 Windows 主域或备份域控制器来验证用户名和密码,就像 Windows 服务器一样。它期望将加密密码参数设置为 yes

共享、用户、服务器或域级别安全的选择适用于整个服务器。不可能为服务器配置提供共享级别安全,而其他配置则提供用户级别安全。但是,您可以在系统上的每个配置的 IP 地址上运行单独的 Samba 服务器。

有关此主题的更多信息,请参阅 Samba 3 HOWTO。对于一个系统上的多个服务器,请注意 interfacesbind interfaces only 选项。

21.5 配置客户端 编辑源文件

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

21.5.1 使用 YaST 配置 Samba 客户端 编辑源文件

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

单击 专家设置 以获取高级配置选项。例如,使用 挂载服务器目录 表启用自动挂载服务器主目录进行身份验证。这样,当托管在 CIFS 上时,用户可以访问他们的主目录。有关详细信息,请参阅 pam_mount man 页面。

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

21.5.2 在客户端上挂载 SMB1/CIFS 共享 编辑源文件

SMB 网络协议的第一版本 SMB1 或 CIFS 是一种旧的不安全协议,其原始创建者 Microsoft 已弃用该协议。出于安全原因,openSUSE Leap 上的 mount 命令默认情况下仅使用较新的协议版本挂载 SMB 共享,即 SMB 2.1、SMB 3.0 或 SMB 3.02。

但是,此更改仅影响 mount 和通过 /etc/fstab 挂载。SMB1 仍然可以通过显式要求它来使用。使用以下方法:

  • smbclient 工具。

  • openSUSE 附带的 Samba 服务器软件。

在某些设置中,此默认设置会导致连接失败,因为只能使用 SMB1。

  • 使用不支持较新 SMB 协议版本的 SMB 服务器的设置。Windows 从 Windows 7 和 Windows Server 2008 开始提供 SMB 2.1 支持。

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

Important
重要:系统安全性降低

按照以下说明操作可能会导致利用安全问题。有关这些问题的更多信息,请参阅 https://blogs.technet.microsoft.com/filecab/2016/09/16/stop-using-smb1/

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

有关在 openSUSE Leap 上启用合适的协议版本的信息,请参阅 第 21.4.1.2 节,“在服务器上启用当前版本的 SMB 协议”

如果您需要在当前的 openSUSE Leap 内核上启用 SMB1 共享,请将选项 vers=1.0 添加到您使用的 mount 命令中。

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

或者,您可以在您的 openSUSE Leap 安装中全局启用 SMB1 共享。为此,请将以下内容添加到 /etc/samba/smb.conf[global] 部分下。

        client min protocol = CORE

21.6 Samba 作为登录服务器 编辑源代码

在业务环境中,通常希望仅允许访问在中央实例上注册的用户。在基于 Windows 的网络中,此任务由主域控制器 (PDC) 处理。您可以使用配置为 PDC 的 Windows Server,但此任务也可以使用 Samba 服务器完成。必须在 [global] 部分的 smb.conf 中进行的条目如 示例 21.3,“smb.conf 中的全局部分” 所示。

示例 21.3: smb.conf 中的全局部分
[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 组。Domain Admin 状态

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

21.7 Samba 服务器在与 Active Directory 的网络中 编辑源代码

如果您同时运行 Linux 服务器和 Windows 服务器,您可以构建两个独立的身份验证系统和网络,或者将服务器连接到具有一个中央身份验证系统的网络。由于 Samba 可以与 Active Directory 域配合使用,您可以将您的 openSUSE Leap 服务器与 Active Directory (AD) 域连接。

要加入 AD 域,请按以下步骤操作

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

  2. 启动 网络服务 › Windows 域成员身份

  3. 域或工作组 字段中的 Windows 域成员身份 屏幕中输入要加入的域。

    Joining workgroup or domain.
    图 21.1: 确定 Windows 域成员身份
  4. 选中 也使用 SMB 信息进行 Linux 身份验证 以在服务器上使用 SMB 源进行 Linux 身份验证。

  5. 单击 确定 并确认域加入(如果系统提示)。

  6. 提供 AD 服务器上 Windows 管理员的密码,然后单击 确定

    现在,您的服务器已设置为从 Active Directory 域控制器提取所有身份验证数据。

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

Tip
提示:身份映射

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

21.7.1 使用 realmd 管理 Active Directory 编辑源代码

realmd 是一个 DBus 服务,允许您配置网络身份验证和域成员身份。

21.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

21.8 高级主题 编辑源代码

本节介绍管理 Samba 套件客户端和服务器部分的更高级技术。

21.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

21.8.2 Btrfs 上的透明文件压缩 编辑源代码

Samba 允许客户端远程操作放置在 Btrfs 文件系统上的共享的文件和目录压缩标志。Windows 资源管理器提供了通过 文件 › 属性 › 高级 对话框标记文件/目录进行透明压缩的功能。

File properties
图 21.2: Windows 资源管理器 高级属性 对话框

标记为压缩的文件和目录由基础文件系统在访问或修改时透明地压缩和解压缩。通常,这会以额外的 CPU 开销为代价节省存储容量。新文件和目录从父目录继承压缩标志,除非使用 FILE_NO_COMPRESSION 选项创建。

Windows 资源管理器以不同的方式呈现压缩文件和目录与未压缩的文件和目录。

Windows Explorer directory listing
图 21.3: Windows 资源管理器目录列表,其中包含压缩文件

您可以手动通过添加来启用 Samba 共享压缩

vfs objects = btrfs

/etc/samba/smb.conf 中的共享配置,或使用 YaST:网络服务 › Samba 服务器 › 添加,并选中 利用 Btrfs 功能

21.8.3 快照 编辑源代码

快照,也称为 Shadow Copies,是文件系统子卷在某个时间点的状态的副本。Snapper 是 Linux 中管理这些快照的工具。快照受支持在 Btrfs 文件系统或稀疏配置的 LVM 卷上。Samba 套件支持通过 FSRVP 协议在服务器和客户端上管理远程快照。

21.8.3.1 以前的版本 编辑源代码

Samba 服务器上的快照可以作为文件或目录的以前版本暴露给远程 Windows 客户端。

要在 Samba 服务器上启用快照,必须满足以下条件

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

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

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

    有关 Snapper 的更多信息,请参阅 第 3 章,使用 Snapper 进行系统恢复和快照管理

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

要支持远程快照,您需要修改 /etc/samba/smb.conf 文件。您可以通过 YaST › 网络服务 › Samba 服务器 或手动通过增强相关的共享部分来执行此操作

vfs objects = snapper

请注意,对于对 smb.conf 的手动更改生效,需要重新启动 Samba 服务

> sudo systemctl restart nmb smb
Adding a new Samba share
图 21.4: 添加启用快照的 Samba 共享

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

Previous versions tab
图 21.5: Windows 资源管理器中的 以前的版本 选项卡

21.8.3.2 远程共享快照 编辑源代码

默认情况下,只能通过 Snapper 命令行实用程序或使用 Snapper 的时间线功能在 Samba 服务器上本地创建和删除快照。

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

除了在 第 21.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 为给定的共享创建或删除快照,并将快照作为新的共享公开。

21.8.3.3 使用 rpcclient 从 Linux 远程管理快照 编辑源代码

The samba-client 包包含一个 FSRVP 客户端,可以远程请求 Windows/Samba 服务器创建并公开给定共享的快照。然后,您可以使用 openSUSE Leap 中的现有工具挂载公开的共享并备份其文件。请求会使用 rpcclient 二进制文件发送到服务器。

示例 21.4: 使用 rpcclient 请求 Windows Server 2012 共享快照

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

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

检查 rpcclient 是否可见 SMB 共享

# 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)

21.8.3.4 使用 DiskShadow.exe 从 Windows 远程管理快照 编辑源文件

您也可以从 Windows 客户端管理 Linux Samba 服务器上的 SMB 共享快照。Windows Server 2012 包含 DiskShadow.exe 实用程序,它可以像 第 21.8.3.3 节,“使用 rpcclient 从 Linux 远程管理快照” 中描述的 rpcclient 命令一样管理远程共享。请注意,您需要首先仔细设置 Samba 服务器。

以下是设置 Samba 服务器的示例过程,以便 Windows 客户端可以管理其共享的快照。请注意,EXAMPLE 是测试环境中的 Active Directory 域,fsrvp-server.example.com 是 Samba 服务器的主机名,/srv/smb 是 SMB 共享的路径。

过程 21.1: 详细的 Samba 服务器配置
  1. 通过 YaST 加入 Active Directory 域。 有关更多信息,请参阅 第 21.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 的全局部分,如 第 21.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
    Important
    重要提示:路径转义

    小心 '\' 转义!两次转义以确保存储在 /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”用户,不需要之前的命令。

过程 21.2: Windows 客户端设置和 DiskShadow.exe 操作
  1. 启动 Windows Server 2012(示例主机名 WIN-CLIENT)。

  2. 加入与 openSUSE Leap 相同的 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.

21.9 更多信息 编辑源文件

  • 手册页:  要查看与 samba 包一起安装的所有 man 手册页的列表,请运行 apropos samba。使用 man 手册页名称 打开任何手册页。

  • 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 在 https://wiki.samba.org/index.php/User_Documentation 处包含广泛的用户文档

打印此页面