为了更好的学习Server Message Block (SMB)协议,助于对NAS主要功能的理解。
翻译miscosoft的文章Server Message Block (SMB) Protocol,共分为四个小章节,希望和smb专家和新手交流。
原文地址:https://msdn.microsoft.com/en-us/library/cc246470.aspx
第一篇.扩展安全认证
多阶段的(s1->s2->s3...)扩展安全协议消息序列的交换(s1)、先前版本的枚举(s2)、以及在共享'根'文件夹上的访问(s3)。
图 1 用户认证和会话建立序列
客户端使用SMB_COM_NEGOTIATE请求发起第一条消息,如[MS-CIFS]中所述。 客户端在标题Flags2字段中指定扩展安全协商。 它还包括语义字符串列表中的NT LM 0.12。 服务器构造由WordCount字段表示的扩展SMB_COM_NEGOTIATE回应数据包。 服务器返回语义索引、所拥有能力、GUID(组标识符)值以及获得的巨大初始安全二进制对象(BLOB),如[RFC2743]中所述,并在上图中定义。
FRAME 1. Client negotiate request
FRAME 2. Server negotiate response
客户端使用服务器返回的初始安全BLOB以及任何用户凭证信息来获取其安全BLOB,如[RFC2743]中所述并在3.2.4.2.4中定义。 生成的安全BLOB作为SMB_COM_SESSION_SETUP_ANDX扩展请求的一部分发送到服务器。 客户端还发送其能力和零UID来标记新会话设置交换的开始。 服务器验证客户端通过检查请求中的Flags2和Capabilities字段来请求扩展的安全性,接受客户端安全BLOB作为输入并按照[RFC2743]的规定处理它。 在这种情况下,安全包需要更多处理并返回第二个安全BLOB以返回给客户端。 此外,服务器分配一个新的UID并将其与此会话设置交换关联。
上述纯属机翻,描述了
Client -> Server: Command = SMB_COM_NEGOTIATE
Server -> Client: Command = SMB_COM_NEGOTIATE
CS之间对SMB协议的第一步交换协商的过程。
其中比较重要的就是描述了Capabilities和GUID。
FRAME 3. Client request for extended session setup
FRAME 4. Server response with session setup continuation
客户端接受服务器安全BLOB作为输入并按照[RFC2743]中的规定处理它,并将其输出与UID一起返回给服务器。 服务器使用UID值将此请求与挂起的会话建立相关联。 服务器按照[RFC4178]中的规定处理该请求,并收到成功结果。SMB_SESSION_SETUP_ANDX交换已完成,因为状态码不等于STATUS_MORE_PROCESSING_REQUIRED。 成功指示返回最终的安全BLOB。
FRAME 5. Client session setup request continuation
FRAME 6. Server response with session setup completion
此时,客户端已成功通过身份验证。