跳至內容跳至頁面導覽:上一頁 [access key p]/下一頁 [access key n]
documentation.suse.com / SUSE Linux Enterprise Server 文件 / 儲存管理指南 / 網路儲存 / Samba
適用範圍 SUSE Linux Enterprise Server 15 SP4

20 Samba

使用 Samba,就可以將 Unix 機器設定為 macOS、Windows 以及 OS/2 機器的檔案與列印伺服器。Samba 已經是一個開發至完全成熟且相當複雜的產品。使用 YaST 或手動編輯組態檔案來設定 Samba。

重要
重要:將停用 SMB1

從 Samba 版本 4.17 開始,SMB1 通訊協定已在 SLE 中停用,且不再受支援。

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 上使用的標準遠端檔案系統存取通訊協定,讓使用者群組能夠透過網際網路協同工作並共用檔案。

SMB2 取代了 SMB1,前者最初是做為 Microsoft Windows Vista™ 的一部分發行的。Microsoft Windows 8™ 和 Microsoft Windows Server 2012 中的 SMB3 又取代了 SMB2。在最近的 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 共用。標籤中有一些預先定義的共同,如 home 和 printer。使用切換狀態以切換作用中非作用中。按一下新增可新增新的共用,按一下刪除可刪除選取的共用。

允許使用者共用自己的目錄許可的群組中的群組成員能與其他使用者共用自己的目錄。例如:users 針對本地範圍,DOMAIN\Users 針對網域範圍。使用者還必須確定檔案系統的權限允許存取。請使用最多共用數限制可建立的共用總數。若要允許在沒有驗證的情況下存取使用者共用,請啟用允許訪客存取

20.4.1.3.3 身分

身分索引標籤中,您可以決定主機關聯的網域 (基本設定),以及是否要在網路中使用替代的主機名稱 (NetBIOS 主機名稱)。也可以使用 Microsoft Windows 網際網路名稱服務 (WINS) 進行名稱解析。在這種情況下,請啟用使用 WINS 解析主機名稱,並決定是否透過 DHCP 取回 WINS 伺服器。若要設定進階全域設定或使用者驗證來源 (例如 LDAP 而非 TDB 資料庫),請按一下進階設定

20.4.1.3.4 可信網域

若要讓其他網域的使用者存取您的網域,請在信任的網域索引標籤中進行適當的設定。若要新增網域,請按一下新增。若要移除所選網域,請按一下移除

20.4.1.3.5 LDAP 設定

在索引標籤LDAP 設定中,您可決定 LDAP 伺服器是否使用驗證。若要測試 LDAP 伺服器的連接,請按一下測試連接。若要查看進階 LDAP 設定或使用者預設值,請按一下 進階設定

如需 LDAP 組態的詳細資訊,請參閱Chapter 5, LDAP with 389 Directory Server

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 man 頁面。

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 supportwins server

若要將 Samba 伺服器整合至含有主動 WINS 伺服器的現有 Windows 網路中,請啟用 wins server 選項,並將其值設為該 WINS 伺服器的 IP 位址。

如果您的數台 Windows 機器連接至不同的子網路,但仍然需要看到彼此,則您需要設定 WINS 伺服器。若要將 Samba 伺服器變成像這樣的 WINS 伺服器,請設定 wins support = Yes 選項。請確定網路中只有一個 Samba 伺服器啟用了這個設定值。wins serverwins support 選項絕不能在 smb.conf 檔案中同時啟用。

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 HOWTO》中可以找到關於此主題的詳細資訊。至於在一個系統上的多個伺服器,請注意 interfacesbind 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 的 man 頁面。

完成所有設定之後,在對話方塊中進行確認以完成組態設定。

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 伺服器完成此任務。在 smb.conf[global] 區段中必須編輯的項目如 範例 20.3 「Smb.conf 中的 global 區段」 所示。

範例 20.3︰ Smb.conf 中的 global 區段
[global]
    workgroup = WORKGROUP
    domain logons = Yes
    domain master = Yes

需要準備符合 Winodws 加密格式的使用者帳戶與密碼。請使用 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 狀態指定給此 Linux 群組內的所有使用者:

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 網域成員資格螢幕上的網域或工作群組欄位中輸入要加入的網域。

    確定 Windows 網域成員資格
    圖 20.1︰ 確定 Windows 網域成員資格
  4. 核取同時使用 SMB 資訊進行 Linux 驗證,以在伺服器上使用 SMB 來源進行 Linux 驗證。

  5. 按一下確定,並在出現提示時確認要加入網域。

  6. 為 Windows 管理員提供 AD 伺服器上的密碼,並按一下確定

    您的伺服器現在已可使用 Active Directory 網域控制器上的所有驗證資料。

提示
提示:身分對應

如果環境中含有多個 Samba 伺服器,則建立的 UID 和 GID 不一致。分配給使用者的 UID 與使用者首次登入的順序有關,這會導致 UID 在不同伺服器之間出現衝突。若要解決此問題,您需要使用身分對應。請參閱 https://www.samba.org/samba/docs/man/Samba-HOWTO-Collection/idmapper.html,以取得詳細資料。

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 檔案總管可讓使用者透過檔案 › 內容 › 進階對話方塊來標識要進行透明壓縮的檔案/目錄:

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 共用路徑建立的快照。

Windows 檔案總管中的以前的版本索引標籤
圖 20.5︰ Windows 檔案總管中的以前的版本索引標籤

20.8.3.2 遠端共用快照

依預設,只能在 Samba 伺服器本地透過 Snapper 指令行公用程式,或者使用 Snapper 的時間軸功能來建立和刪除快照。

可將 Samba 設定為使用檔案伺服器遠端 VSS 通訊協定 (File Server Remote VSS Protocol,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 更多資訊

  • man 頁面: 若要查看隨 samba 套件一同安裝的所有 man 頁面清單,請執行 apropos samba。使用 man man 頁面名稱開啟任一 man 頁面。

  • SUSE 特定的讀我檔案:: 套件 samba-client 包含檔案 /usr/share/doc/packages/samba/README.SUSE

  • 其他套件文件:: 使用 zypper install samba-doc 安裝 samba-doc 套件。

    此文件將安裝到 /usr/share/doc/packages/samba 中。其中包含 HTML 版本的 man 頁面以及範例組態文件庫 (例如 smb.conf.SUSE)。

  • 線上文件: https://wiki.samba.org/index.php/User_Documentation 上的 Samba Wiki 包含詳細的使用者文件