CIFSD 是由 Namjae Jeon 创建的用于 Linux 内核的开源 In-kernel CIFS/SMB3 服务器,它是 SMB/CIFS 协议在内核空间中的实现,用于通过网络来共享文件和 IPC 服务。最初的目标的是提供改进的文件 I/O 性能,但更大的目标是希望拥有一些新的特性,使得这些特性在内核内部更容易开发和维护,并且完全暴露这些层。
方向可以认为是将 SAMBA 移动到内核中的几个模块的部分,以具有像程直接数据存取(Remote direct memory access)那样的功能以实际性能增益工作。
CIFSD 功能
已实现 a. 用于实现基本文件共享功能的 SMB1(CIFS), SMB2/3 协议 b. 动态授权 c. 混合请求 d. 持久的处理 e. oplock/lease f. Large MTU g. NTLM/NTLMv2 h. 自动协商 i. HMAC-SHA256 签名 j. 安全协商 k. 升级签名 l. Preautentication integrity(SMB 3.1.1)
已计划 a. SMB direct(RDMA) b. Multi-channel c. Durable handle v2 d. Kerberos e. persistent handles f. 目录租约 g. SMB 加密
CIFSD 架构
================================================================================ * CIFSD Architecture ================================================================================ |--- ... --------|--- kcifsd/3 - Cleint 3 |-------|--- kcifsd/2 - Client 2 | | _____________________________________________________ | | |- Client 1 | <--- Socket ---|--- kcifsd/1 <<= Authentication : NTLM/NTLM2, Kerberos(TODO)| | | | | <<= SMB : SMB1, SMB2, SMB2.1, SMB3, SMB3.0.2, | | | | | SMB3.1.1 | | | | |_____________________________________________________| | | | | | |--- VFS --- Local Filesystem | | KERNEL |--- kcifsd/0(forker kthread) ---------------||--------------------------------------------------------------- USER || || communication using NETLINK and sysfs || ______________________________________________ || | | cifsd <<= DCE/RPC, WINREG | ^ | <<= configure shares setting, user accounts | | |______________________________________________| | |------ smb.conf(config file) | |------ cifspwd.db(user account/password file) ^ cifsadmin ----------------| ================================================================================ ================================================================================