适用于 SUSE Linux Enterprise Desktop 12 SP2

25 Samba

摘要

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

25.1 术语

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

SMB 协议

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

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

共享

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

DC

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

25.2 安装 Samba 服务器

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

25.3 配置 Samba 服务器

要配置 Samba 服务器,请参见相应的 SUSE Linux Enterprise Server 文档。

25.4 配置客户端

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

25.4.1 使用 YaST 配置 Samba 客户端

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

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

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

25.5 将 Samba 用作登录服务器

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

例 25.1 smb.conf 中的 global 部分
[global]
    workgroup = WORKGROUP
    domain logons = Yes
    domain master = Yes

需要准备适合 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

25.6 高级主题

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

25.6.1 Btrfs 上的透明文件压缩

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

Windows 资源管理器高级属性对话框
图 25.1 Windows 资源管理器高级属性对话框

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

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

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

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

vfs objects = btrfs

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

25.6.2 快照

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

25.6.2.1 先前版本

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

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

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

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

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

    有关 snapper 的更多信息,请参见第 6 章 “通过 Snapper 进行系统恢复和快照管理

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

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

vfs objects = snapper

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

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

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

Windows 资源管理器中的以前的版本选项卡
图 25.4 Windows 资源管理器中的以前的版本选项卡

25.6.2.2 远程共享快照

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

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

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

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

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

25.6.2.3 使用 rpcclient 从 Linux 远程管理快照

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

例 25.2 使用 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)

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

您也可以在充当客户端的 Windows 环境中,管理 Linux Samba 服务器上的 SMB 共享的快照。Windows Server 2012 提供了 DiskShadow.exe 实用程序,该程序可以像第 25.6.2.3 节 “使用 rpcclient 从 Linux 远程管理快照”中所述的 rpcclient 那样管理远程共享。请注意,首先您需要妥善设置 Samba 服务器。

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

过程 25.1 Samba 服务器配置详细说明
  1. 通过 YaST 加入到 Active Directory 域。

  2. 确保“活动域 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 部分,如第 25.6.2.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" 用户执行上一条命令,因为已授予该用户特权。

过程 25.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.

25.7 更多信息

Samba 文档包含在 samba-doc 包中,默认情况下不会安装该包。您可以使用 zypper install samba-doc 进行安装。在命令行中输入 apropos samba 可显示一些手册页;或浏览 /usr/share/doc/packages/samba 目录以获取更多的联机文档和示例。examples 子目录中提供了一个带注释的示例配置 (smb.conf.SUSE)。另一个可以查看 Samba 相关信息的文件是 /usr/share/doc/packages/samba/README.SUSE

Samba 小组提供的《Samba 操作指南》(请参见 https://wiki.samba.org)中有一节专门介绍查错。此外,文档的第 V 部分提供了检查配置的逐步指南。

打印此页