zas*_*ard 16 mount server-message-block cifs pam smb-conf
服务器:RHEL 5.9 / smbd 3.0.33 - 客户端:各种,但都使用当前的 mount.cifs (5.2)
我已经解决了这个问题,但是追查这些错误代码真是一场噩梦,我觉得它需要通用文档。
症状:从一个特定的 cifs 客户端到 linux samba 服务器的不可预测的间歇性安装失败。我所有的 linux 客户端 pam_mount 用户都在登录时回家。随机地,偶尔地,家庭目录安装开始在一台机器上失败。登录和挂载继续在所有其他客户端上完美运行。最初我认为损坏的客户端上异常数量的活动导致 smbd 异常,但即使在使用停止后间歇性故障仍然存在。
尝试手动挂载失败并报告:
Errors from underlying mount program
mount error(12): Cannot allocate memory
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
Run Code Online (Sandbox Code Playgroud)
<debug enable="1"/>
在 /etc/security/pam_mount.conf.xml 中设置以从 pam_mount 获取更多信息:
command: 'mount' '-t' 'cifs' '//my_server/watdo' '/home/watdo' '-o' 'user=watdo,uid=666,gid=666'
pam_mount(misc.c:38): set_myuid<pre>: (ruid/rgid=0/0, e=0/0)
pam_mount(misc.c:38): set_myuid<post>: (ruid/rgid=0/0, e=0/0)
pam_mount(mount.c:64): Errors from underlying mount program:
pam_mount(mount.c:68): mount error(12): Cannot allocate memory
pam_mount(mount.c:68): Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)`
Run Code Online (Sandbox Code Playgroud)
/var/log/kern.log 也报告了这个事件:
kernel: [4316790.256149] CIFS VFS: cifs_mount failed w/return code = -12
Run Code Online (Sandbox Code Playgroud)
'回声1>的/ proc / FS / CIFS / cifsFYI'曲柄向上mount.cifs调试(写入到/ var /日志/调试)。这是好的部分(看起来很熟悉?):
CIFS Session Established successfully
For smb_command 117
Sending smb: total_len 88
cifs_sync_mid_result: cmd=117 mid=54307 state=4
Mapping smb error code 0xc0000205 to POSIX err -12
Run Code Online (Sandbox Code Playgroud)
此时,客户端实际上没有其他可用信息。cifs 挂载请求消失,客户端几乎立即死亡。mount.cifs 错误(12) 的信息非常少(手册页没有帮助,谢谢伙计们)。广泛的互联网搜索表明这是一个常见的错误代码,也证实它没有提供信息。
是时候检查服务器了!log level = 3
在 /etc/samba/smb.conf 中为 smbd设置(来自 Using Samba 一书:“级别高于 3 供开发人员使用并转储大量神秘信息。”哈哈!)。这是相关的行:
[2013/02/08 10:18:03, 3] smbd/error.c:error_packet_set(106)
error packet at smbd/reply.c(514) cmd=117 (SMBtconX) NT_STATUS_INSUFF_SERVER_RESOURCES
差不多了……从smb 邮件列表存档中,我发现有人报告了一种类似的问题,确定为单个 smb 连接的固定共享限制。列出服务器上的打开共享:
smbstatus -S | grep <serverIP> | wc -l
返回2048。很显眼。
实际检查的输出smbstatus -S
显示了 'IPC$' 的数千个条目。IPC$ 上的 Samba 文档显示它涉及匿名共享浏览和对“一些其他资源”的访问。我在 /etc/samba/smb.conf 中的服务器上设置主机拒绝:
[IPC$]
hosts deny = 0.0.0.0/0
Run Code Online (Sandbox Code Playgroud)
现在效果很好。好的,希望这里的一些东西在未来的某个时候能帮助一些可怜的灵魂。
我想本着网站的精神我会问一个问题:为什么 smbd 不清理 IPC$ 共享?为什么要为每个用户连接建立一个到共享的 IPC$ 而不是每个客户端连接一个?您可以从客户端禁用 IPC$ 共享创建吗?有没有办法增加每个共享的最大连接数(在这种情况下这不会有帮助)?我没有在文档中看到它。
这是一个老问题,但考虑到它没有得到解答,而且我正在研究 IPC$ 和 Samba,为了文档的目的,我会尝试一下。
\n\n\n\n\n为什么 smbd 不清理 IPC$ 份额?
\n
正如上面对您的问题的评论中所述,该服务用于服务器之间的远程管理和通信,特别是在 Samba 中,它用于某些浏览和 tcp/ip 目的。除非您出于某种原因需要它或某些东西不起作用,否则禁用它是安全的。[1]
\n\n\n\n\n为什么为每个用户连接建立一个 IPC$ 到共享而不是为每个客户端连接建立一个 IPC$?
\n
因为一个用户可以有多个客户端连接。
\n\n\n\n\n您可以从客户端禁用 IPC$ 共享创建吗?
\n
是和不是。它并没有真正禁用 IPC$ 共享的创建,但您可以禁用从 Windows 客户端对其的访问。[2]
\n\n对于 Windows Vista、Windows 7、Windows 8 和 Windows 10,您可以执行以下注册表编辑:
\n\n\n\n\n有没有办法增加每个共享的最大连接数(在这种情况下这不会有帮助)?我在文档中没有看到它。
\n
是的[3]。在分享下方只需输入:
\n\n[share]\n max connections = ##\n
Run Code Online (Sandbox Code Playgroud)\n\n其中 XX 是连接数。
\n\n资料来源:
\n\n 归档时间: |
|
查看次数: |
6648 次 |
最近记录: |