用法

此模組支援 SMB3 系列高階網路協議(以及較舊的方言,最初稱為“CIFS”或 SMB1)。

Linux 的 CIFS VFS 模組支援許多高階網路檔案系統功能,例如分層 DFS 名稱空間、硬連結、鎖定等。它旨在符合 SNIA CIFS 技術參考(該參考取代了 1992 年 X/Open SMB 標準),並與 Windows 2000、Windows XP、Samba 及同等伺服器實現最佳實踐的實際互操作性。此程式碼是與協議自由資訊基金會合作開發的。CIFS 和現在的 SMB3 已成為 Mac、Windows 和主要 NAS 裝置之間互操作的事實標準。

有關更多詳細資訊,請參閱 MS-SMB2(用於詳細的 SMB2/SMB3/SMB3.1.1 協議規範)或 https://samba.org/samba/PFIF/

如有問題或錯誤報告,請聯絡

請訪問專案頁面:https://wiki.samba.org/index.php/LinuxCIFS_utils

構建說明

對於 Linux

  1. 下載核心(例如從 https://kernel.linux.club.tw),並進入核心目錄樹的頂部(例如 /usr/src/linux-2.5.73)

  2. make menuconfig(或 make xconfig)

  3. 從網路檔案系統選項中選擇 cifs

  4. 儲存並退出

  5. make

安裝說明

如果您已成功將 CIFS VFS 構建為模組,只需鍵入 make modules_install(或者,如果您願意,手動將檔案複製到模組目錄,例如 /lib/modules/6.3.0-060300-generic/kernel/fs/smb/client/cifs.ko)。

如果您已將 CIFS VFS 構建到核心本身中,請按照您的發行版說明安裝新核心(通常只需鍵入 make install)。

如果您沒有實用程式 mount.cifs(在 Samba 4.x 原始碼樹和 CIFS VFS 網站上),請將其複製到 mount 助手所在的目錄(通常是 /sbin)。儘管不是必需的,但建議使用 mount.cifs 輔助軟體。大多數發行版都包含一個 cifs-utils 軟體包,其中包含此實用程式,因此建議安裝此軟體包。

請注意,在所有 Linux 客戶端上執行 Winbind pam/nss 模組(登入服務)有助於在整個域中將 Uid 和 Gid 一致地對映到適當的網路使用者。mount.cifs 掛載助手可在 git.samba.org 上的 cifs-utils.git 中找到。

如果 cifs 作為模組構建,則可以配置網路緩衝區的大小和數量以及對單個伺服器的最大併發請求數。不建議更改這些預設值。透過執行 modinfo

modinfo <path to cifs.ko>

在 kernel/fs/smb/client/cifs.ko 上可以看到模組初始化時(透過執行 insmod cifs.ko)可以進行的配置更改列表。

建議

為了提高安全性,SMB2.1 或更高版本(通常是 SMB3.1.1)現在是新的預設方言。要使用舊方言(例如掛載 Windows XP),請在掛載時使用“vers=1.0”(或對於 Windows Vista 使用 vers=2.0)。請注意,CIFS (vers=1.0) 比預設方言 SMB3 舊得多且安全性較低,SMB3 包含許多高階安全功能,例如降級攻擊檢測、加密共享以及更強的簽名和身份驗證演算法。還有其他掛載選項可能有助於 SMB3 獲得改進的 POSIX 行為(注意:可以使用 vers=3 強制使用 SMB3 或更高版本,絕不能使用 2.1)。

mfsymlinkscifsaclmodefromsid(通常與 idsfromsid 一起使用)

允許使用者掛載

使用 CIFS VFS 允許使用者在其擁有的目錄上進行掛載和解除安裝是可能的。啟用此類掛載的一種方法是將 mount.cifs 實用程式標記為 suid(例如 chmod +s /sbin/mount.cifs)。要使使用者能夠解除安裝他們掛載的共享,需要

  1. mount.cifs 1.4 或更高版本

  2. 在 /etc/fstab 中為共享新增一個條目,指示使用者可以解除安裝它,例如

    //server/usersharename  /mnt/username cifs user 0 0
    

請注意,當 mount.cifs 實用程式以 suid 方式執行(允許使用者掛載)時,為了降低風險,在掛載時會傳入 nosuid 掛載標誌,以禁止執行遠端目標上掛載的 suid 程式。當以 root 身份執行 mount 時,預設情況下不會傳入 nosuid,並且預設情況下將允許執行遠端目標上的 suid 程式。這可以像 nfs 和其他檔案系統一樣進行更改,只需在掛載選項中指定 nosuid 即可。但對於使用者掛載,要能夠將 suid 標誌傳遞給 mount,需要使用以下標誌重新構建 mount.cifs:CIFS_ALLOW_USR_SUID

Samba 3.0 及更高版本的原始碼樹中的 docs/manpages/mount.cifs.8 中有關於 cifs 掛載的相應手冊頁。

允許使用者解除安裝

為了允許使用者解除安裝他們使用者掛載的目錄(見上文),可以使用實用程式 umount.cifs。它可以直接呼叫,或者如果 umount.cifs 放在 /sbin 中,umount 可以呼叫 cifs 解除安裝助手(至少對於大多數版本的 umount 實用程式)來解除安裝 cifs 掛載,除非 umount 使用 -i 呼叫(這將避免呼叫解除安裝助手)。與 mount.cifs 類似,要啟用使用者解除安裝,umount.cifs 必須標記為 suid(例如 chmod +s /sbin/umount.cifs)或等效設定(某些發行版允許將條目新增到 /etc/permissions 檔案以實現等效的 suid 效果)。為了此實用程式成功,目標路徑必須是 cifs 掛載,並且當前使用者的 uid 必須與掛載資源的使用者的 uid 匹配。

另請注意,允許使用者掛載和解除安裝的通常方式是(而不是將 mount.cifs 和 unmount.cifs 用作 suid)為每個您希望掛載的 //server/share 在 /etc/fstab 檔案中新增一行,但是當潛在的掛載目標包含許多或不可預測的 UNC 名稱時,這可能會變得難以管理。

Samba 考量

大多數當前伺服器支援更安全的 SMB2.1 和 SMB3,但對於較舊、安全性較低的 CIFS 方言,存在有用的協議擴充套件。因此,如果使用舊方言(CIFS/SMB1)掛載以獲得最大收益,我們建議使用支援 SNIA CIFS Unix Extensions 標準的伺服器(例如,幾乎任何版本的 Samba,即 2.2.5 或更高版本),但 CIFS VFS 能夠與各種 CIFS 伺服器良好執行。請注意,如果您沒有支援 CIFS Unix 擴充套件的伺服器(例如 Samba 2.2.5 或更高版本),則 uid、gid 和檔案許可權將顯示預設值。要在 Samba 伺服器中啟用 Unix CIFS Extensions,請新增以下行

unix extensions = yes

到伺服器上的 smb.conf 檔案中。請注意,當大多數客戶端是 Unix 或 Linux 時,以下 smb.conf 設定(在 Samba 伺服器上)也很有用

case sensitive = yes
delete readonly = yes
ea support = yes

請注意,要從 Linux cifs 客戶端支援 xattrs,需要伺服器 EA 支援,並且 EA 支援存在於較新版本的 Samba 中(例如 3.0.6 及更高版本,EA 支援在所有版本的 Windows 中也有效,至少對於 NTFS 檔案系統上的共享)。擴充套件屬性 (xattr) 支援是大多數 Linux 檔案系統的一個可選功能,可能需要透過 make menuconfig 啟用。客戶端對擴充套件屬性 (user xattr) 的支援可以透過在掛載時指定 nouser_xattr 來按掛載停用。

CIFS 客戶端可以獲取和設定 POSIX ACL(getfacl、setfacl)到 Samba 3.10 及更高版本伺服器。設定 POSIX ACL 需要在構建 CIFS 模組時在 CIFS 配置選項中同時啟用 XATTR 和 POSIX 支援。POSIX ACL 支援可以透過在掛載時指定 noacl 來按掛載停用。

一些管理員可能希望更改 Samba 的 smb.conf 中的 map archivecreate mask 引數的預設值。除非更改建立掩碼,否則新建立的檔案可能會以不必要的嚴格預設模式結束,這可能不是您想要的,儘管如果在伺服器和客戶端上啟用了 CIFS Unix 擴充套件,後續的 setattr 呼叫(例如 chmod)可以修復模式。請注意,如果不是使用 Samba 3.0.6 或更高版本,則遠端建立特殊裝置 (mknod) 可能需要向 Samba 指定 mkdev 函式。有關這些的更多資訊,請參閱 Samba 伺服器系統上的手冊頁(man smb.conf)。請注意,與 smbfs vfs 不同,cifs vfs 不讀取客戶端系統上的 smb.conf 檔案(少數可選設定透過 -o 引數在掛載時傳入)。請注意,Samba 2.2.7 或更高版本包含一個修復,允許 CIFS VFS 刪除開啟的檔案(嚴格符合 POSIX 所需)。Windows 伺服器已經支援此功能。Samba 伺服器不允許引用共享外部檔案的符號連結,因此在 Samba 3.0.6 之前的版本中,大多數指向帶有絕對路徑(即以斜槓開頭)的檔案的符號連結,例如

ln -s /mnt/foo bar

將被禁止。Samba 3.0.6 或更高版本的伺服器包括安全建立此類符號連結的能力,方法是將不安全的符號連結(即指向共享外部伺服器檔案的符號連結)轉換為伺服器上的 Samba 特定格式,該格式被本地伺服器應用程式和非 CIFS 客戶端忽略,並且不會被 Samba 伺服器遍歷。這對於使用 CIFS VFS 的 Linux 客戶端應用程式是透明的。絕對符號連結將適用於 Samba 3.0.5 或更高版本,但僅限於使用 CIFS Unix 擴充套件的遠端客戶端,並且對 Windows 客戶端將不可見,通常不會影響在同一臺 Samba 伺服器上執行的本地應用程式。

使用說明

一旦 CIFS VFS 支援被構建到核心中或作為模組 (cifs.ko) 安裝,您可以使用以下掛載語法來訪問 Samba、Mac 或 Windows 伺服器

mount -t cifs //9.53.216.11/e$ /mnt -o username=myname,password=mypassword

在 -o 之前可以指定選項 -v,使 mount.cifs 掛載助手更詳細地顯示掛載步驟。在 -o 之後,支援以下常用的 cifs vfs 特定選項

username=<username>
password=<password>
domain=<domain name>

其他 cifs 掛載選項將在下面描述。如果安裝了掛載助手 (mount.cifs),則可以使用 TCP 名稱(除了 IP 地址)。如果您不信任要掛載的伺服器,或者如果未啟用 cifs 簽名(並且物理網路不安全),請考慮使用標準掛載選項 noexecnosuid,以降低在本地系統上執行修改過的二進位制檔案(從惡意伺服器下載或被惡意路由器修改)的風險。

儘管 mount.cifs 尚不支援使用與 CIFS URL 規範相對應的格式進行掛載,但可以使用伺服器和共享名的替代格式(與 NFS 風格的掛載語法有些相似),而不是更廣泛使用的 UNC 格式(即 \servershare)

mount -t cifs tcp_name_of_server:share_name /mnt -o user=myname,pass=mypasswd

當使用掛載助手 mount.cifs 時,可以透過替代機制指定密碼,而不是在命令列上使用正常的 pass= 語法在 -o 之後指定:1) 透過將其包含在憑據檔案中。將 credentials=filename 指定為掛載選項之一。憑據檔案包含兩行

username=someuser
password=your_password
  1. 透過在 PASSWD 環境變數中指定密碼(類似地,使用者名稱可以從 USER 環境變數中獲取)。

  2. 透過 PASSWD_FILE 在檔案中按名稱指定密碼

  3. 透過 PASSWD_FD 在檔案中透過檔案描述符指定密碼

如果未提供密碼,mount.cifs 將提示輸入密碼

限制

伺服器必須支援“純 TCP”(埠 445 TCP/IP CIFS 連線)或 RFC 1001/1002 對“Netbios-Over-TCP/IP”的支援。這不太可能成為問題,因為大多數伺服器都支援此功能。

Windows 和 Linux 之間有效檔名存在差異。Windows 通常限制包含某些保留字元的檔名(例如字元 `:`,Windows 用它來分隔流名的開頭),而 Linux 允許檔名中使用更廣泛的有效字元集。當在伺服器登錄檔中指定顯式對映時,Windows 伺服器可以重新對映此類字元。從 3.10 版開始的 Samba 將允許此類檔名(即包含有效 Linux 字元,通常 Windows/CIFS 語義會禁止的那些),只要伺服器配置了 Unix 擴充套件(並且客戶端未停用 /proc/fs/cifs/LinuxExtensionsEnabled)。此外,在 CIFS (vers=1.0) 上可以使用掛載選項 mapposix 來強制將非法 Windows/NTFS/SMB 字元對映到重新對映範圍(此掛載引數是 SMB3 的預設值)。此重新對映 (mapposix) 範圍也與 Mac(以及某些舊版 Windows 上的“Mac 服務”)相容。當協商 SMB 3.1.1 的 POSIX 擴充套件時,重新對映將自動停用。

CIFS VFS 掛載選項

下面列出了支援的掛載選項的部分列表

username (使用者名稱)

嘗試建立 CIFS 會話時使用的使用者名稱。

password (密碼)

使用者密碼。如果安裝了掛載助手,如果未提供密碼,則會提示使用者輸入密碼。

ip (IP 地址)

目標伺服器的 IP 地址

unc (UNC 路徑)

要掛載的目標伺服器通用網路名稱(匯出)。

domain (域)

在 CIFS 會話建立期間,設定新增到使用者名稱前的 SMB/CIFS 工作組名稱

forceuid (強制使用者ID)

將 inode 的預設 uid 設定為掛載時傳入的 uid。對於支援 CIFS Unix 擴充套件的伺服器(例如正確配置的 Samba 伺服器)的掛載,伺服器提供 uid、gid 和模式,因此除非伺服器和客戶端的 uid 和 gid 編號不同,否則不應指定此引數。如果伺服器和客戶端在同一域中(例如執行 winbind 或 nss_ldap)並且伺服器支援 Unix 擴充套件,則可以從伺服器檢索 uid 和 gid(並且無需在掛載時指定 uid 和 gid)。對於不支援 CIFS Unix 擴充套件的伺服器,查詢現有檔案時返回的預設 uid(和 gid)將是執行掛載的人的 uid(gid)(root,除非 mount.cifs 配置為使用者掛載的 setuid),除非指定了 uid= (gid) 掛載選項。另請注意,對檔案的訪問許可權檢查(授權檢查)發生在伺服器端,但在某些情況下,管理員也可能希望在客戶端進行限制。對於不報告 uid/gid 所有者(例如 Windows)的伺服器,也可以在客戶端檢查許可權,並且可以透過在客戶端指定 file_mode 和 dir_mode 來啟用一種粗略的客戶端許可權檢查形式。(預設)

forcegid (強制組ID)

(與上述類似,但針對 groupid 而不是 uid)(預設)

noforceuid (不強制使用者ID)

如果可能,透過從伺服器請求來填充檔案所有者資訊 (uid)。使用此選項,僅當伺服器不支援在 inode 上返回 uid 時,才會使用 uid= 選項中(在掛載時)給定的值。

noforcegid (不強制組ID)

(與上述類似,但針對組所有者 gid 而不是 uid)

uid (使用者ID)

設定 inode 的預設 uid,並向 cifs 核心驅動程式指示哪個本地使用者進行了掛載。如果伺服器支援 unix 擴充套件,則預設 uid 不用於填充 inode(檔案)的所有者欄位,除非指定了 forceuid 引數。

gid (組ID)

設定 inode 的預設 gid(與上述類似)。

file_mode (檔案模式)

如果伺服器不支援 CIFS Unix 擴充套件,此選項將覆蓋檔案 inode 的預設模式。

fsc (FS-快取)

使用 FS-Cache 啟用本地磁碟快取(預設關閉)。此選項有助於提高慢速連結、重負載伺服器和/或網路上的效能,因為從磁碟讀取比透過網路從伺服器讀取更快。這也可以透過減少對伺服器的呼叫次數來積極影響可伸縮性。然而,本地快取不適用於所有工作負載,例如一次性讀取型別的工作負載。因此,在使用此選項之前,您需要仔細考慮您的工作負載/場景。目前,本地磁碟快取對於以只讀方式開啟的 CIFS 檔案是有效的。

dir_mode (目錄模式)

如果伺服器不支援 CIFS Unix 擴充套件,此選項將覆蓋目錄 inode 的預設模式。

port (埠)

嘗試在此 TCP 埠上聯絡伺服器,然後嘗試常用埠(埠 445,然後是 139)。

iocharset (I/O 字元集)

用於在本地路徑名和 Unicode 之間進行轉換的碼頁。如果伺服器支援,則預設使用 Unicode 進行網路路徑名。如果未指定 iocharset,則將使用本地客戶端核心構建期間指定的 nls_default。如果伺服器不支援 Unicode,則此引數將不使用。

rsize (讀取大小)

預設讀取大小(通常為 16K)。客戶端目前不能使用大於 CIFSMaxBufSize 的 rsize。CIFSMaxBufSize 預設為 16K,可以在 cifs.ko 模組安裝時更改(從 8K 到核心允許的最大 kmalloc 大小)。將 CIFSMaxBufSize 設定為非常大的值將導致 cifs 使用更多記憶體,在某些情況下可能會降低效能。要使用大於 127K(原始 cifs 協議最大值)的 rsize,還需要伺服器支援一個新的 Unix Capability 標誌(用於非常大的讀取),一些較新的伺服器(例如 Samba 3.0.26 或更高版本)支援此功能。rsize 可以設定為最小 2048 到最大 130048(127K 或 CIFSMaxBufSize,取較小者)

wsize (寫入大小)

預設寫入大小(預設 57344),CIFS 目前允許的最大 wsize 是 57344(十四個 4096 位元組頁)

actimeo=n (屬性快取超時)

屬性快取超時(以秒為單位,預設 1 秒)。超時後,cifs 客戶端會向伺服器請求新的屬性資訊。此選項允許根據工作負載需求調整屬性快取超時。更短的超時意味著更好的快取一致性,但會增加對伺服器的呼叫次數。更長的超時意味著減少對伺服器的呼叫次數,但代價是快取一致性檢查不夠嚴格(即短時間內屬性快取不正確)。

rw (讀寫)

以讀寫方式掛載網路共享(請注意,伺服器可能仍將共享視為只讀)

ro (只讀)

以只讀方式掛載網路共享

version (版本)

用於區分不同版本的掛載助手實用程式(通常不需要)

sep (分隔符)

如果作為第一個掛載選項(在 -o 之後),則覆蓋逗號作為掛載引數之間的分隔符。例如

-o user=myname,password=mypassword,domain=mydom

可以透過句點作為分隔符傳入

-o sep=.user=myname.password=mypassword.domain=mydom

當用戶名、密碼或域中包含逗號時,這可能很有用。當使用 cifs 掛載助手 cifs.mount(版本 1.1 或更高版本)時,此選項的重要性較低。

nosuid (停用 suid)

不允許執行具有 suid 位程式的遠端可執行檔案。這僅適用於掛載到支援 CIFS Unix 擴充套件的伺服器(如 Samba)。如果您不信任網路中的伺服器(您的掛載目標),建議您指定此選項以提高安全性。

exec (允許執行)

允許在掛載點上執行二進位制檔案。

noexec (禁止執行)

不允許在掛載點上執行二進位制檔案。

dev (允許裝置)

識別遠端掛載點上的塊裝置。

nodev (禁止裝置)

不識別遠端掛載點上的裝置。

suid (啟用 suid)

允許在此掛載點上執行已啟用 suid 的遠端檔案(以 root 身份執行掛載時為預設值,使用者掛載時 nosuid 為預設值)。

credentials (憑據)

儘管 cifs 核心元件會忽略它,但掛載助手 mount.cifs 會使用它。安裝 mount.cifs 後,它會開啟並讀取指定的憑據檔案,以獲取傳遞給 cifs vfs 的使用者 ID 和密碼引數。

guest (訪客)

儘管核心元件會忽略它,但如果在掛載選項中指定了 guest,mount.cifs 掛載助手將不會提示使用者輸入密碼。如果未指定密碼,將使用空密碼。

perm (許可權檢查)

客戶端執行許可權檢查(vfs_permission 檢查檔案的 uid 和 gid 是否與模式和所需操作匹配)。請注意,這是在伺服器軟體在目標機器上執行的正常 ACL 檢查之外的額外檢查。客戶端許可權檢查預設啟用。

noperm (不進行許可權檢查)

客戶端不執行許可權檢查。這可能導致此掛載上的檔案被本地客戶端系統上的其他使用者訪問。通常,僅當伺服器支援 CIFS Unix 擴充套件,但客戶端和伺服器系統上的 UID/GID 不夠匹配以允許掛載使用者訪問時才需要它。但在非 CIFS Unix 擴充套件掛載的情況下,如果掛載時指定了預設模式但不在客戶端強制執行(例如,可能在啟用 MultiUserMount 時),這可能很有用。請注意,這不影響伺服器軟體在目標機器上執行的正常 ACL 檢查(伺服器 ACL 與掛載時提供的使用者名稱之間的檢查)。

serverino (使用伺服器 inode 號)

使用伺服器的 inode 號,而不是在客戶端自動生成遞增的 inode 號。儘管這將使識別硬連結檔案更容易(因為它們將具有相同的 inode 號),並且 inode 號可能是持久的,但請注意,如果多個伺服器端掛載在單個共享下匯出,伺服器不保證 inode 號是唯一的(因為如果多個檔案系統掛載在同一個共享高階目錄中,伺服器上的 inode 號可能不是唯一的)。請注意,一些較舊的伺服器(例如 Windows 2000 之前)不支援返回 UniqueIDs 或 CIFS Unix Extensions 的等效功能,對於這些伺服器,此掛載選項將無效。在 nfsd 下匯出 cifs 掛載需要此 cifs 掛載選項。如果伺服器支援所需的網路操作,這現在是預設設定。

noserverino (不使用伺服器 inode 號)

客戶端生成 inode 號(而不是使用伺服器的實際 inode 號)。這些 inode 號在解除安裝或重啟後會發生變化,這可能會混淆某些應用程式,但並非所有伺服器檔案系統都支援唯一的 inode 號。

setuids (設定使用者/組ID)

如果與伺服器協商了 CIFS Unix 擴充套件,客戶端將嘗試在新建立的檔案、目錄和裝置(create、mkdir、mknod)上設定本地程序的有效 uid 和 gid。如果 CIFS Unix 擴充套件未協商,則對於新建立的檔案和目錄,將本地快取新檔案的 uid 和 gid,而不是使用掛載時指定的預設 uid 和 gid,這意味著當 inode 重新載入(或使用者重新掛載共享)時,檔案的 uid 可能會更改。

nosetuids (不設定使用者/組ID)

客戶端不會嘗試在新建立的檔案、目錄和裝置(create、mkdir、mknod)上設定 uid 和 gid,這將導致伺服器將 uid 和 gid 設定為預設值(通常是掛載共享的使用者在伺服器上的 uid)。預設情況下,允許伺服器(而不是客戶端)設定 uid 和 gid。如果未協商 CIFS Unix 擴充套件,則新檔案的 uid 和 gid 將顯示為掛載者的 uid (gid) 或掛載時指定的 uid (gid) 引數。

netbiosname (NetBIOS 名稱)

透過埠 139 掛載到伺服器時,指定用於在執行 RFC1001 NetBIOS 會話初始化時表示客戶端 NetBIOS 機器名的 RFC1001 源名稱。

direct (直接模式)

不要對此掛載點上開啟的檔案進行 inode 資料快取。這排除了在此掛載點上進行檔案記憶體對映。在某些情況下,當網路速度快且客戶端快取收益很少或沒有時(例如,當應用程式進行大於頁面大小的連續大讀取而沒有重複讀取相同資料時),這可以提供比預設行為更好的效能,預設行為是在授予和持有 oplock(快取令牌)時透過本地 Linux 客戶端頁快取快取讀取(預讀)和寫入(回寫)。請注意,直接模式允許將大於頁面大小的寫入操作傳送到伺服器。

strictcache (嚴格快取模式)

用於開啟嚴格快取模式。在此模式下,客戶端在擁有 Oplock Level II 時始終從快取中讀取,否則從伺服器讀取。所有寫入的資料都儲存在快取中,但如果客戶端沒有獨佔 Oplock,則會將資料寫入伺服器。

rwpidforward (讀寫PID轉發)

將開啟檔案的程序的 PID 轉發到該檔案的任何讀寫操作。如果我們使用強制 brlock 樣式,這可以防止像 WINE 這樣的應用程式在讀寫時失敗。

acl (訪問控制列表)

如果伺服器支援 POSIX ACL,則允許 setfacl 和 getfacl 管理它們。(預設)

noacl (停用ACL)

不允許在此掛載上進行 setfacl 和 getfacl 呼叫

user_xattr (使用者擴充套件屬性)

允許將使用者 xattrs(名稱以 user.os2. 開頭的屬性)作為 OS/2 EA(擴充套件屬性)獲取和設定到伺服器。這允許支援 setfattr 和 getfattr 實用程式。(預設)

nouser_xattr (停用使用者擴充套件屬性)

不允許 getfattr/setfattr 獲取/設定/列出 xattrs

mapchars (字元對映)

將七個保留字元中的六個(不包括反斜槓)

*?<>|:

轉換為重新對映範圍(高於 0xF000),這也允許 CIFS 客戶端識別 Windows 的 POSIX 模擬建立的包含此類字元的檔案。當掛載到大多數版本的 Samba 時(Samba 也禁止建立和開啟名稱包含這七個字元中任何一個的檔案),這可能也很有用。如果伺服器不支援網路上的 Unicode,則此操作無效。

nomapchars (不對映字元)

不翻譯這七個字元中的任何一個(預設)。

nocase (不區分大小寫)

請求路徑名匹配不區分大小寫(如果伺服器支援,則預設區分大小寫)。(掛載選項 ignorecasenocase 相同)

posixpaths (POSIX 路徑)

如果支援 CIFS Unix 擴充套件,則嘗試協商 POSIX 路徑名支援,該支援允許在典型 CIFS 檔名中禁止的某些字元,而無需重新對映。(預設)

noposixpaths (不使用POSIX路徑)

如果支援 CIFS Unix 擴充套件,則不請求 POSIX 路徑名支援(這可能會導致伺服器拒絕建立包含某些保留字元的檔案)。

nounix (停用 Unix 擴充套件)

為此掛載(樹連線)停用 CIFS Unix 擴充套件。這很少需要,但一次性關閉多個設定(即 POSIX ACL、POSIX 鎖、POSIX 路徑、符號連結支援以及從伺服器檢索 uid/gid/模式)或解決實現 Unix 擴充套件的伺服器中的錯誤時可能很有用。

nobrl (停用位元組範圍鎖)

不向伺服器傳送位元組範圍鎖請求。這對於某些由於 cifs 樣式強制位元組範圍鎖而中斷的應用程式是必需的(並且大多數 cifs 伺服器尚不支援請求諮詢位元組範圍鎖)。

forcemandatorylock (強制強制鎖)

即使伺服器支援 POSIX(諮詢)位元組範圍鎖定,也只發送強制鎖定請求。對於某些(可能是罕見的)最初為 DOS/Windows 編寫的、需要 Windows 樣式強制位元組範圍鎖定的應用程式,它們可能可以利用此選項,強制 CIFS 客戶端僅傳送強制鎖定,即使 CIFS 伺服器支援 POSIX 諮詢鎖定。forcemand 是此掛載選項的縮寫形式。

nostrictsync (非嚴格同步)

如果設定了此掛載選項,當應用程式執行 fsync 呼叫時,CIFS 客戶端不會向伺服器傳送 SMB Flush(以強制伺服器立即將此檔案的所有髒資料寫入磁碟),儘管 CIFS 仍會將所有髒(快取的)檔案資料傳送到伺服器並等待伺服器響應寫入。由於 SMB Flush 可能非常慢,並且某些伺服器可能足夠可靠(承擔稍有延遲將資料重新整理到伺服器磁碟的風險),因此啟用此選項可能有助於提高頻繁 fsync 的應用程式的效能,但伺服器崩潰的風險很小。如果未設定此掛載選項,預設情況下 CIFS 將在每次 fsync 呼叫時傳送 SMB flush 請求(並等待響應)。

nodfs (停用DFS)

即使伺服器聲稱支援 DFS(全域性名稱空間支援),也停用它。這有助於解決 Samba 伺服器 3.0.24 和 3.0.25 版本解析 DFS 路徑的問題。

remount (重新掛載)

重新掛載共享(通常用於將只讀掛載更改為讀寫掛載,反之亦然)

cifsacl (CIFS ACL)

根據檔案的 Windows ACL 報告模式位(例如在 stat 上)。(實驗性)

servern (伺服器名稱)

指定嘗試與伺服器建立會話時使用的伺服器 NetBIOS 名稱(RFC1001 名稱)。這對於掛載到某些舊伺服器(例如 OS/2 或 Windows 98 和 Windows ME)是必需的,因為它們不支援預設伺服器名稱。伺服器名稱最長可達 15 個字元,通常為大寫。

sfu (Unix 服務)

當未協商 CIFS Unix 擴充套件時,嘗試以與 Services for Unix (SFU) 相容的格式建立裝置檔案和 FIFO。此外,透過 SETFILEBITS 擴充套件屬性(如 SFU 所做)檢索模式的第 10-12 位。將來,模式的最低 9 位也將使用安全描述符 (ACL) 的查詢進行模擬。

mfsymlinks (M+F 符號連結)

啟用對 Minshall+French 符號連結的支援(請參閱 http://wiki.samba.org/index.php/UNIX_Extensions#Minshall.2BFrench_symlinks)。當與“sfu”選項一起指定時,此選項將被忽略。即使伺服器支援 CIFS Unix 擴充套件,也會使用 Minshall+French 符號連結。

sign (簽名)

必須使用資料包簽名(有助於避免路由中間系統進行不必要的資料修改)。請注意,簽名不適用於 lanman 或明文身份驗證。

seal (密封/加密)

在網路上傳輸之前,必須對此掛載共享上的所有資料進行密封(加密)。需要支援 Unix 擴充套件。請注意,這與簽名掛載選項不同,它會導致透過此掛載共享傳送的資料加密,但掛載到同一伺服器的其他共享不受影響。

locallease (本地租約)

此選項很少需要。Fcntl F_SETLEASE 被某些應用程式(如 Samba 和 NFSv4 伺服器)用於檢查檔案是否可快取。CIFS 無法明確請求租約,但可以檢查檔案是否可快取(已鎖定)。不幸的是,即使檔案未鎖定,它仍然可能是可快取的(即,如果沒有其他本地程序正在使用該檔案,CIFS 客戶端可以授予 fcntl 租約),例如當伺服器不支援 oplocks 並且使用者確定對檔案的唯一更新將來自此客戶端時。指定此掛載選項將允許 CIFS 客戶端對未鎖定的檔案(僅)進行本地租約檢查,而不是在這種情況下拒絕租約。(實驗性)

sec (安全模式)

安全模式。允許的值為

none (無)

嘗試以空使用者(無名稱)連線

krb5 (Kerberos 5)

使用 Kerberos 版本 5 身份驗證

krb5i (Kerberos 5i)

使用 Kerberos 身份驗證和資料包簽名

ntlm (NTLM)

使用 NTLM 密碼雜湊(預設)

ntlmi (NTLM i)

使用帶簽名的 NTLM 密碼雜湊(如果 /proc/fs/cifs/PacketSigningEnabled 啟用或伺服器要求籤名,也可以是預設值)

ntlmv2 (NTLMv2)

使用 NTLMv2 密碼雜湊

ntlmv2i (NTLMv2 i)

使用帶資料包簽名的 NTLMv2 密碼雜湊

lanman (Lanman)

(如果在核心配置中配置)使用較舊的 lanman 雜湊

hard (硬掛載)

如果伺服器無響應,則重試檔案操作

soft (軟掛載)

限制對無響應伺服器的重試次數(通常只重試一次),然後返回錯誤。(預設)

mount.cifs 掛載助手在 -o 之前也接受一些掛載選項,包括

-S

從 stdin 獲取密碼(等同於設定環境變數 PASSWD_FD=0

-V

列印 mount.cifs 版本

-?

顯示簡單的用法資訊

對於大多數 2.6 核心版本的 modutils,cifs 核心模組的版本可以透過 modinfo 顯示。

雜項 /proc/fs/cifs 標誌和除錯資訊

資訊性偽檔案

DebugData

顯示有關活動 CIFS 會話和共享、已啟用的功能以及 cifs.ko 版本的資訊。

Stats

列出摘要資源使用資訊以及每個共享的統計資訊。

open_files

列出所有活動 SMB 會話上的所有開啟檔案控制代碼。

mount_params

模組可用的所有掛載引數列表

配置偽檔案

SecurityFlags

控制安全協商和資料包簽名的標誌。身份驗證(可能/必須)標誌(例如 NTLMv2)可以與簽名標誌結合使用。另一方面,指定兩種不同的密碼雜湊機制(作為“必須使用”)並沒有多大意義。預設標誌是

0x00C5

(允許 NTLMv2 和資料包簽名)。某些 SecurityFlags 可能需要啟用相應的 menuconfig 選項。

可以使用資料包簽名 0x00001 必須使用資料包簽名 0x01001 可以使用 NTLMv2 0x00004 必須使用 NTLMv2 0x04004 可以使用 Kerberos 安全(krb5) 0x00008 必須使用 Kerberos 0x08008 可以使用 NTLMSSP 0x00080 必須使用 NTLMSSP 0x80080 密封(資料包加密) 0x00040 必須密封 0x40040

cifsFYI

如果設定為非零值,額外的除錯資訊將記錄到系統錯誤日誌中。此欄位包含三個標誌,控制不同類別的除錯條目。可設定的最大值為 7,這將啟用所有除錯點(預設 0)。除非在核心配置中啟用了 CONFIG_CIFS_DEBUG2,否則某些除錯語句不會編譯到 cifs 核心中。cifsFYI 可以設定為以下一個或多個標誌(7 表示全部設定)

+-----------------------------------------------+------+
| log cifs informational messages               | 0x01 |
+-----------------------------------------------+------+
| log return codes from cifs entry points       | 0x02 |
+-----------------------------------------------+------+
| log slow responses                            | 0x04 |
| (ie which take longer than 1 second)          |      |
|                                               |      |
| CONFIG_CIFS_STATS2 must be enabled in .config |      |
+-----------------------------------------------+------+

traceSMB

如果設定為 1,則除錯資訊將隨著 SMB 請求和響應的開始記錄到系統錯誤日誌中(預設 0)

LookupCacheEnable

如果設定為 1,inode 資訊將快取一秒鐘,從而提高查詢效能(預設 1)

LinuxExtensionsEnabled

如果設定為 1,則客戶端將嘗試使用 CIFS“UNIX”擴充套件,這些擴充套件是可選的協議增強,允許 CIFS 伺服器返回準確的 UID/GID 資訊並支援符號連結。如果您使用的伺服器(例如 Samba)支援 CIFS Unix 擴充套件,但不想使用符號連結支援,並且希望將 uid 和 gid 欄位對映到掛載時提供的值(而不是實際值),則將其設定為零。(預設 1)

dfscache

列出 DFS 快取的內容。如果設定為 0,客戶端將清除快取。

這些實驗性功能和跟蹤可以透過更改 /proc/fs/cifs 中的標誌來啟用(在 cifs 模組安裝或構建到核心中之後,例如 insmod cifs)。要啟用某項功能,請將其設定為 1,例如要啟用核心訊息日誌跟蹤,鍵入

echo 7 > /proc/fs/cifs/cifsFYI

cifsFYI 作為位掩碼執行。將其設定為 1 可啟用各種資訊性訊息的額外核心日誌記錄。2 啟用非零 SMB 返回程式碼的日誌記錄,而 4 啟用完成時間超過一秒的請求(位元組範圍鎖定請求除外)的日誌記錄。將其設定為 4 需要在核心配置 (.config) 中設定 CONFIG_CIFS_STATS2。將其設定為七可啟用所有三個功能。最後,可以透過以下方式啟用 SMB 請求和響應開始的跟蹤:

echo 1 > /proc/fs/cifs/traceSMB

每個共享(每個客戶端掛載)的統計資訊可在 /proc/fs/cifs/Stats 中找到。如果在核心配置 (.config) 中啟用了 CONFIG_CIFS_STATS2,則可獲得更多資訊。返回的統計資訊包括計數器,這些計數器表示按請求型別(讀取、寫入、關閉等)分組的嘗試和失敗(即伺服器返回非零程式碼)的 SMB3(或 cifs)請求數量。還記錄了該共享的總讀取位元組數和寫入伺服器的位元組數。請注意,由於客戶端快取效應,這可能少於客戶端上執行的應用程式讀取和寫入的位元組數。統計資訊可以透過 echo 0 > /proc/fs/cifs/Stats 重置為零,這在比較兩種不同場景的效能時可能很有用。

另請注意,cat /proc/fs/cifs/DebugData 將顯示有關活動會話和已掛載共享的資訊。

啟用 Kerberos(擴充套件安全)是可行的,但需要存在 1.2 或更高版本的輔助程式 cifs.upcall,並將其配置在 /etc/request-key.conf 檔案中。cifs.upcall 輔助程式來自 Samba 專案 (https://www.samba.org)。NTLM、NTLMv2 和 LANMAN 支援不需要此輔助程式。請注意,NTLMv2 安全(不需要 cifs.upcall 輔助程式)在某些用例中足以替代 Kerberos。

DFS 支援允許透明重定向到 MS-DFS 名稱空間中的共享。此外,對於指定為以主機名(而不是 IP 地址)開頭的 UNC 名稱的目標共享,DFS 支援需要存在一個使用者空間助手(例如 cifs.upcall)來將主機名轉換為 IP 地址,並且使用者空間助手也必須在 /etc/request-key.conf 檔案中進行配置。Samba、Windows 伺服器和許多 NAS 裝置都支援 DFS 作為構建全域性名稱空間的方式,以簡化網路配置並提高可靠性。

要使用 cifs Kerberos 和 DFS 支援,應安裝 Linux keyutils 軟體包,並向 /etc/request-key.conf 檔案新增類似以下幾行內容

create cifs.spnego * * /usr/local/sbin/cifs.upcall %k
create dns_resolver * * /usr/local/sbin/cifs.upcall %k

CIFS 核心模組引數

這些模組引數可以在模組載入時或執行時使用以下介面指定或修改

/sys/module/cifs/parameters/<param>

echo "value" > /sys/module/cifs/parameters/<param>

可以透過以下方式檢視可用模組引數及其值的更詳細描述

modinfo cifs(或 modinfo smb3)

  1. enable_oplocks (啟用 oplock)

啟用或停用 oplock。Oplock 預設啟用。[Y/y/1]。要停用,請使用 [N/n/0] 中的任意一個。