我已进行编辑/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
,并在中报告了解决方案此评论和随后的评论。
解决方案出现如下:
/etc/rc.d/rc.local
在文本编辑器中打开。[请注意,此文件并不总是默认存在或使用在较新版本的 Ubuntu 上。
将这两行添加到文件中,以便每次 Ubuntu 启动时,
cifs
都会加载该模块(如果尚未加载)并将文本0x81
写入“SecurityFlags:modprobe cifs echo 0x81 > /proc/fs/cifs/SecurityFlags
保存文件并退出文本编辑器。
我之所以这样说,是因为有关空格的信息(包括我认为是两个独立命令之间的换行符)是不可见的在评论中,因为我相信使用了完整路径/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