如何永久设置 /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 密码哈希和数据包签名

[NB:此 [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

为了获得更持久的解决方案,建议创建一个udev规则用于设置 SecurityFlags 的值。每次加载 cifs 模块时都会设置该值。您可以在 /etc/udev/rules.d 中定义规则。

50-cifs-安全标志.规则:

# 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

相关内容