使用 Samba,就可以將 Unix 機器設定為 macOS、Windows 以及 OS/2 機器的檔案與列印伺服器。Samba 已經是一個開發至完全成熟且相當複雜的產品。使用 YaST 或手動編輯組態檔案來設定 Samba。
下列為 Samba 文件和 YaST 模組中常用的詞彙。
Samba 使用基於 NetBIOS 服務的 SMB (伺服器訊息區塊) 通訊協定。由於 Microsoft 發行了此通訊協定,因此其他的軟體製造商可以建立連接至 Microsoft 網域網路的連接。使用 Samba,SMB 通訊協定就可以在 TCP/IP 通訊協定上運作,因此 TCP/IP 通訊協定必須安裝在所有的用戶端上。
CIFS (一般網際網路檔案系統) 通訊協定是 Samba 所支援的另一種通訊協定。CIFS 定義用於網路上的標準遠端檔案系統存取通訊協定,讓使用者群組可以透過網路分工合作和共享文件。
NetBIOS 是用來在提供名稱服務的機器之間進行通訊的軟體介面 (API)。它允許連接至網路的機器保留自己的名稱。在保留後,就可以使用名稱來定址這些機器。在此沒有檢查名稱的中央程序。在網路上的任何機器都可以保留它所需的任何數量名稱,只要這些名稱尚未使用。可以針對不同的網路結構實作 NetBIOS 介面。NetBEUI 是與網路硬體結合相對密切的一種實作,不過通常稱為 NetBIOS。與 NetBIOS 一起執行的網路通訊協定是 Novell 的 IPX (經由 TCP/IP 的 NetBIOS) 與 TCP/IP。
經由 TCP/IP 所傳送的 NetBIOS 名稱,與 /etc/hosts 中所使用的名稱,或由 DNS 所定義的名稱完全不相同。NetBIOS 使用自己完全獨立的命名慣例。不過,為了方便管理,一般建議使用與 DNS 主機名稱相對應的名稱,或者在本地使用 DNS。Samba 預設是使用此對應名稱。
Samba 伺服器可為用戶端提供 SMB/CIFS 服務和 NetBIOS over IP 命名服務。對於 Linux 系統,Samba 伺服器有三種精靈可用:smbd (用於 SMB/CIFS 服務)、nmbd (用於命名服務) 及 winbind (用於驗証)。
Samba 用戶端是透過 SMB 通訊協定,使用 Samba 伺服器所提供之 Samba 服務的系統。所有一般的作業系統 (例如 macOS、Windows 以及 OS/2) 都支援 SMB 通訊協定。TCP/IP 通訊協定必須安裝在所有的電腦上。Samba 提供適用於不同 Unix 類別的用戶端。就 Linux 而言,有一個 SMB 的核心模組,允許在 Linux 系統層級上整合 SMB 資源。您不必為 Samba 用戶端執行任何精靈。
SMB 伺服器透過共享方式向用戶端提供資源。共享是指印表機和位在伺服器上的目錄及其子目錄。它是利用名稱來輸出,並且可藉由其名稱來存取。共用名稱可以設成任何名稱,它並不需要是輸出目錄的名稱。也會指定一個名稱給印表機。用戶端可以透過其名稱存取印表機。
若要安裝 Samba 伺服器,請啟動 YaST 並選取 › 。選擇 › ,然後選取。請確認安裝所需套件,完成此安裝程序。
用戶端只能透過 TCP/IP 存取 Samba 伺服器。NetBEUI 與透過 IPX 的 NetBIOS 無法與 Samba 一起使用。
設定 Samba 用戶端以存取 Samba 或 Windows 伺服器上的資源 (檔案或印表機)。在 › 對話方塊中輸入 NT 或 Active Directory 網域或工作群組。如果您啟用了,則使用者驗證將會在 Samba、NT 或 Kerberos 伺服器上執行。
按一下可以指定進階組態選項。例如,使用表格可設定在驗證時自動掛接伺服器主目錄。這樣,使用者便可以存取其位於 CIFS 上的主目錄。如需詳細資訊,請參閱 pam_mount 的 man 頁面。
完成所有設定之後,在對話方塊中進行確認以完成組態設定。
在以 Windows 用戶端為主的網路中,通常會建議使用者只註冊一個有效的帳戶與密碼。在以 Windows 為基礎的網路中,這個任務是由主要網域控制器 (PDC) 來處理。您可以使用已設定為 PDC 的 Windows NT 伺服器,但也可借助 Samba 伺服器完成此任務。在 smb.conf 的 [global] 區段中必須編輯的項目如 範例 25.1 「在 smb.conf 中的全域區段」 所示。
[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
本部分介紹用於管理 Samba 套裝軟體中用戶端部分與伺服器部分的進階方法。
Samba 允許用戶端針對 Btrfs 檔案系統中的共用遠端操作檔案與目錄壓縮旗標。Windows 檔案總管可讓使用者透過 › › 對話方塊來標識要進行透明壓縮的檔案/目錄:
帶有壓縮旗標的檔案將以透明方式進行壓縮,當使用者存取或修改這些檔案時,基礎檔案系統會將其解壓縮。這通常可以節省儲存容量,不過,在存取檔案時會造成額外的 CPU 負擔。除非新檔案和目錄是使用 FILE_NO_COMPRESSION 選項建立的,否則,它們會繼承父目錄的壓縮旗標。
Windows 檔案總管以不同的顯示區分壓縮檔案/目錄和未壓縮檔案/目錄:
啟用 Samba 共用壓縮的方法有兩種,一種是手動將以下內容
vfs objects = btrfs
新增至 /etc/samba/smb.conf 中的共用組態,另一種是使用 YaST: › › ,然後核取。
快照也稱為陰影副本,是指某個檔案系統子磁碟區在某個特定時間點的狀態副本。在 Linux 中,使用 Snapper 工具來管理這些快照。Btrfs 檔案系統或簡易佈建的 LVM 磁碟區支援快照。Samba 套裝軟體支援透過伺服器端和用戶端的 FSRVP 通訊協定管理遠端快照。
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 檔案。若要完成此操作,您可以選取 › › ,或者使用以下指令手動增強相關的共用區段
vfs objects = snapper
請注意,您需要重新啟動 Samba 服務後,對 smb.conf 所做的手動變更才能生效:
systemctl restart nmb smb
經過設定後,可以透過 Windows 檔案總管中某個檔案或目錄之索引標籤存取由 snapper 針對 Samba 共用路徑建立的快照。
依預設,只能在 Samba 伺服器本地透過 snapper 指令行公用程式或者使用 snapper 時間線功能來建立和刪除快照。
可將 Samba 設定為使用檔案伺服器遠端 VSS 通訊協定 (File Server Remote VSS Protocol,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 為指定的共用建立或刪除快照,並將該快照公開為新共用。
rpcclient 從 Linux 遠端管理快照 #
samba-client 套件中有一個 FSRVP 用戶端,它可以遠端要求 Windows/Samba 伺服器建立並公開指定共用的快照。然後,您可以使用 SUSE Linux Enterprise Server 中的現有工具掛接公開的共用並備份其檔案。向伺服器發出的要求將使用 rpcclient 二進位檔案傳送。
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)
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 共用的路徑。
透過 YaST 加入到 Active Directory 網域。
確定「使用中網域 DNS」項目正確無誤:
fsrvp-server:~ # net -U 'Administrator' ads dns register \ fsrvp-server.example.com <IP address> Successfully registered hostname with DNS
在 /srv/smb 位置建立 Btrfs 子磁碟區
fsrvp-server:~ # btrfs subvolume create /srv/smb
為路徑 /srv/smb 建立 snapper 組態檔案
fsrvp-server:~ # snapper -c <snapper_config> create-config /srv/smb
建立路徑為 /srv/smb 的新共用,並啟用 YaST 的核取方塊。確定將以下片段新增到 /etc/samba/smb.conf 中的 global 部分,如第 25.6.2.2 節 「遠端共用快照」中所述:
[global] rpc_daemon:fssd = fork registry shares = yes include = registry
使用 systemctl restart nmb smb 重新啟動 Samba
設定 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 要求。
授予 Windows 用戶端帳戶必要的權限:
fsrvp-server:~ # net -U 'Administrator' rpc rights grant \ "EXAMPLE\\win-client$" SeBackupPrivilege Successfully granted rights.
不需要對 "EXAMPLE\Administrator" 使用者執行上一條指令,因為已授予該使用者權限。
DiskShadow.exe #開機 Windows Server 2012 (範例主機名稱為 WIN-CLIENT)。
如同在 SUSE Linux Enterprise Server 上一樣,加入到同一個 Active Directory 網域 EXAMPLE。
重新開機。
開啟 Powershell。
啟動 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
指定每次程式離開、重設或重新開機時要保留的陰影副本:
DISKSHADOW> set context PERSISTENT
檢查指定的共用是否支援快照,然後建立一個快照:
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完成備份程序:
DISKSHADOW> end backup
建立快照後,嘗試將它刪除,並驗證刪除結果:
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.
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 HOWTO》(請參閱 https://wiki.samba.org) 包含了疑難排解一節。除此之外,文件的第五部份提供檢查組態的逐步指南。