如何永久設定/proc/fs/cifs/SecurityFlags?

如何永久設定/proc/fs/cifs/SecurityFlags?

我已進行編輯/proc/fs/cifs/SecurityFlags以允許我的 cifs 安裝正確安裝。 (我必須使用值 0x81。)

要編輯,SecurityFlags我輸入modprobe cifs,然後讓我看到/proc/fs/cifs目錄(在輸入此命令之前我看不到它)。

重新啟動後,其中的值SecurityFlags已重設為預設值,即 0x7。

如何永久設定它以便在重新啟動後保留 0x81 值?

答案1

編譯內核時將其設定為選項

/proc 是一個虛擬檔案系統,參見http://www.tldp.org/LDP/Linux-Filesystem-Hierarchy/html/proc.html

/proc 非常特別,因為它也是一個虛擬檔案系統。它有時被稱為進程資訊偽檔案系統。它不包含“真實”文件,而是包含運行時系統資訊(例如係統記憶體、安裝的設備、硬體配置等)。因此,它可以被視為內核的控制和資訊中心。事實上,相當多的系統實用程式只是呼叫該目錄中的檔案。例如,「lsmod」與「cat /proc/modules」相同,而「lspci」是「cat /proc/pci」的同義詞。透過更改此目錄中的文件,您甚至可以在系統運行時讀取/更改核心參數 (sysctl)。

https://www.kernel.org/doc/readme/Documentation-filesystems-cifs-README

SecurityFlags 控制安全協商和資料包簽署的標誌。認證(可以/必須)標誌(例如,對於NTLM和/或NTLMv2)可以與簽名標誌組合。另一方面,指定兩種不同的密碼雜湊機制(「必須使用」)沒有太大意義。預設標誌為 0x07007(允許 NTLM、NTLMv2 和封包簽署)。如果您希望允許使用較弱的密碼雜湊掛載到伺服器,則允許的最大標誌為 0x37037(lanman、純文字、ntlm、ntlmv2、允許簽章)。某些 SecurityFlags 需要啟用對應的 menuconfig 選項(例如,lanman 和純文字需要 CONFIG_CIFS_WEAK_PW_HASH)。目前啟用明文驗證還需要在安全標誌中啟用 lanman 驗證,因為 cifs 模組僅支援使用會話設定 SMB 的舊 lanman 方言形式傳送明文密碼。 (例如,對於使用純文字密碼進行身份驗證,請將 SecurityFlags 設定為 0x30030):

        may use packet signing              0x00001
        must use packet signing             0x01001
        may use NTLM (most common password hash)    0x00002
        must use NTLM                   0x02002
        may use NTLMv2                  0x00004
        must use NTLMv2                 0x04004
        may use Kerberos security           0x00008
        must use Kerberos               0x08008
        may use lanman (weak) password hash         0x00010
        must use lanman password hash           0x10010
        may use plaintext passwords             0x00020
        must use plaintext passwords            0x20020
        (reserved for future packet encryption)     0x00040

您可以使用安裝選項來覆蓋它

https://www.samba.org/samba/docs/man/manpages-3/mount.cifs.8.html

sec= 安全模式。允許的值為:

沒有嘗試以空用戶身份連線(無名稱)

krb5 使用 Kerberos 版本 5 驗證

krb5i 使用 Kerberos 驗證和封包簽名

ntlm 使用 NTLM 密碼雜湊(預設)

ntlmi 使用帶有簽署的 NTLM 密碼雜湊(如果 /proc/fs/cifs/PacketSigningEnabled 開啟或伺服器需要簽章也可以是預設值)

ntlmv2 使用 NTLMv2 密碼哈希

ntlmv2i 使用 NTLMv2 密碼雜湊和資料包簽名

[注意此[sec參數]正在開發中,預計將在cifs核心模組1.40及更高版本中提供]

如果您需要協助,請發布您的掛載選項或 fstab 中的條目以及嘗試掛載時收到的錯誤訊息。

答案2

原海報,保羅·羅薩斯,能夠透過新增命令來解決問題rc.local,並在中報告了解決方案這則評論隨後的評論

解決方案出現如下:

  1. /etc/rc.d/rc.local在文字編輯器中開啟。

    [請注意,該文件並不總是預設存在或使用在較新版本的 Ubuntu 上。

  2. 將這兩行新增至檔案中,以便每次 Ubuntu 啟動時,cifs都會載入模組(如果尚未載入)並將文字0x81寫入「SecurityFlags」:

    modprobe cifs
    echo 0x81 > /proc/fs/cifs/SecurityFlags
    
  3. 儲存檔案並退出文字編輯器。

我這樣說是因為有關空格的資訊(包括我認為是兩個單獨命令之間的換行符)不可見在評論中,並且因為我相信完整路徑/proc/fs/cifs/SecurityFlags而不僅僅是SecurityFlags使用(或cd在它之前添加了命令),否則解決方案將無法工作。

答案3

為了獲得更永久的解決方案,建議創建一個烏德夫規則來設定 SecurityFlags 的值。這將在每次載入 cifs 模組時設定該值。您可以在 /etc/udev/rules.d 中定義規則。

50-cifs-securityflags.規則:

# Set SecurityFlags to 0x81.
ACTION=="add", SUBSYSTEM=="module", KERNEL=="cifs", RUN+="/bin/sh -c 'echo 0x81 > /proc/fs/cifs/SecurityFlags'"

然後重新加載 udevudevadm control --reload-rules && udevadm trigger

相關內容