CIFSD - 开源 In-kernel CIFS/SMB3 服务器


GPL
Linux
C/C++

软件简介

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 ----------------|

================================================================================
================================================================================