Samba

义项:跨平台文件共享服务软件
Samba

Samba 是为类 Unix 系统提供 SMB/CIFS 协议支持的免费软件套件,可使 Linux、Unix 等系统与 Windows 客户端之间共享文件、打印机,并参与 Windows 域的身份认证。该套件自 1992 年起发布,采用 GNU 通用公共许可证,是除微软自身实现外功能最完整的 SMB 服务端实现之一;2012 年发布的 4.0 版本首次提供与 Active Directory 兼容的域控制器。

目录
  1. 定义
  2. 原理
  3. 发展历程
  4. 应用
  5. 局限
  6. 参见

定义

Samba 是一套实现了服务器消息块协议(SMB,早期亦被称为 CIFS)的软件集合,运行于类 Unix 操作系统之上,为使用该协议的客户端提供文件与打印服务[1][2]。在功能上它并非单一程序,而是由多个守护进程和命令行工具组成的套件,发行版通常将其打包为独立的软件包[2]。由于 Windows 网络的原生共享协议正是 SMB,Samba 成为非 Windows 系统接入 Windows 文件服务的常用途径[3]。

原理

Samba 以多个协作的守护进程实现协议栈。smbd 负责向 SMB 客户端提供文件与打印服务,nmbd 承担 NetBIOS 名称解析与网络浏览功能,winbindd 则用于把 Windows 域中的认证信息和用户数据库接入 Unix 系统[1]。配置主要集中在一个文本文件中,由 testparm 检查语法,pdbedit 维护本地用户库,smbstatus 查看当前连接[1]。Samba 通过 NetBIOS over TCP/IP 提供名称服务,并不依赖微软私有的 NetBEUI 帧协议[4]。

在进程结构上,smbd 采用典型的 Unix 守护进程模型:一个进程监听套接字,每条客户端连接交给一个独立进程处理,且每个进程为单线程[5]。这一设计使单个 smbd 异常时只影响对应客户端,也便于在多机之间划分争用点,但单个连接内部的并发请求需要靠异步 I/O 等机制消化[5]。Samba 自 3.2 版起在读写路径上引入异步 I/O,先后用过 POSIX AIO、基于子进程的 aio_fork 和基于线程池的 aio_pthread 等实现[5]。

文件系统语义的适配由虚拟文件系统接口(VFS)完成,该接口提供一套对应 Windows 文件 API 的内部调用,磁盘读写路径可以按需插入模块,用于实现预读、回收站、防病毒扫描等附加功能[6]。4.0 版把该接口做成模块化形式,使定制无需改动核心代码[7]。Samba 的代码建立在 tdb、talloc、tevent 等自研基础库之上[8]。

发展历程

项目源于澳大利亚国立大学博士生安德鲁·特里奇尔(Andrew Tridgell)的个人尝试。1991 年 12 月,他为让自己的个人电脑经 Pathworks 挂载 Unix 主机的磁盘,用抓包方式分析该共享协议,随后写出了可用的服务端程序[9]。1992 年 1 月,他发布 0.1、0.5 和 1.0 三个早期版本,当时尚无正式名称[10]。

1993 年 12 月,项目以「NetBIOS for Unix」名义重启,版本 1.5 首次同时包含客户端软件,并改用 GNU 通用公共许可证;此后确立 smb.conf 配置文件,smbd、nmbd 等组件逐步成形[11][9]。1994 年 4 月,因另一家厂商声称持有 smbserver 商标,项目更名为 Samba,这个名字取自按 S、M、B 顺序检索系统词典得到的结果[11]。1996 年 5 月项目启用 CVS 版本控制,多名可直接提交代码的开发者由此形成 Samba 团队[10]。

2.0 版于 1999 年 1 月发布,2.2 版于 2001 年 4 月发布,后者已能充当 Windows 域控制器[10][12]。3.0 版于 2003 年 9 月发布,可加入 Active Directory 域但尚不能担任其域控制器[10]。3.5 版开始试验性支持 SMB 2.0,3.6 版于 2011 年 8 月将其转为正式支持[13]。3.2.0 版自 2008 年 7 月 1 日起改用 GPLv3 及 LGPLv3 许可[14]。

2012 年 12 月 11 日,Samba 4.0 发布,被项目称为首个与 Active Directory 兼容的自由软件服务器实现,内含 LDAP 目录服务、Heimdal Kerberos 认证服务、动态 DNS 以及 Active Directory 所需的各项远程过程调用[15]。该版本同时支持 Windows 管理工具、组策略、漫游配置文件,并可与 Exchange 集成[16]。此后项目保持约每 6 个月一个主版本的节奏[17]。2021 年 9 月发布的 4.11 版将 SMB1 协议默认关闭[14]。

应用

最常见的用法是在 Linux 或 Unix 主机上划出目录作为网络共享,Windows 用户在资源管理器地址栏输入对应主机的共享名即可访问,Linux 与 macOS 客户端则可通过挂载或 smbclient 一类的工具连接[18][19]。同一套服务也可承担打印服务器角色,把 Unix 主机上或网络中的打印机共享给 SMB 客户端[1]。部署时通常需要放行 137、138、139、445 等端口[18]。

在身份认证方面,Samba 可作为独立域控制器或普通域成员运行,把 Linux 与 Unix 服务器和桌面纳入 Active Directory 环境[3]。4.0 之后的域控制器可被现有的 Active Directory 域接纳,反之微软的域控制器也能加入由 Samba 构建的域,实现双向互操作[20]。此外,小型网络存储设备长期以嵌入式方式采用 Samba,用于对外提供文件服务[7][17]。

由于 Samba 几乎随所有 Linux 发行版一同提供,部分用户将其误认为只适用于 Linux 的产品,而它最早其实是在专有 Unix 系统上开发的[21]。它还可运行在 Solaris、AIX 以及各类 BSD 系统上,并被苹果的 Mac OS X 服务器版采用[10]。

局限

与微软原生实现相比,Samba 在若干细节上仍有差距。3.0 系列虽能加入 Active Directory 域,但不能担任域控制器,这一能力直到 4.0 才具备[10]。4.0 时期公布的规划中,多通道、SMB Direct、持久文件句柄和集群特性等 SMB3 高级功能仍处于待完成状态[22]。

进程模型也带来伸缩性约束。由于每条连接由单线程的独立进程处理,大量并发流集中来自同一客户端时,难以充分利用多核;把负载分散到多个客户端反而更易并行[5]。此外,Samba 在 NTFS 访问控制列表与 POSIX 权限之间只能做有损映射,两种权限模型无法完全一一对应[23]。4.0 的 Active Directory 域控制器内置 LDAP 与 Kerberos,不支持改用外部 LDAP 服务,因此已有的目录服务难以直接沿用。

参见

  • SMB —— Samba 所实现的服务器消息块协议,Windows 网络文件共享的基础。

  • CIFS —— SMB 协议在 1990 年代后期使用的名称,常与 Samba 一并提及。

  • Active Directory —— 微软的目录与身份认证服务,Samba 4.0 起可提供兼容实现。

  • 网络文件系统 —— 另一类跨平台文件共享协议,主要用于 Unix 系统之间。

  • 网络附加存储 —— 大量嵌入式设备借助 Samba 对外提供文件共享。

参考资料

  1. samba(7) - FreeBSD 11.1-RELEASE and Ports Manual Pages [引用日期2026-10-29]
  2. 软件包:samba(2:4.25.0+dfsg-1) [引用日期2026-10-29]
  3. What is Samba? [引用日期2026-10-29]
  4. Linux @ CERN [引用日期2026-10-29]
  5. Tuning Samba for SMB3 load [引用日期2026-10-29]
  6. The initial I/O path [引用日期2026-10-29]
  7. » Linux Magazine [引用日期2026-10-29]
  8. Thankyou for 20 years of Samba! [引用日期2026-10-29]
  9. Contributor: Andrew Tridgell and the Samba Team [引用日期2026-10-29]
  10. Samba (software) [引用日期2026-10-29]
  11. 10years [引用日期2026-10-29]
  12. A Quarter Century of SambaXP [引用日期2026-10-29]
  13. So Samba 4.0 is out [引用日期2026-10-29]
  14. Samba (software) [引用日期2026-10-29]
  15. Samba - opening windows to a wider world [引用日期2026-10-29]
  16. zdnet.com 上的网页 [引用日期2026-10-29]
  17. Case Study: Samba [引用日期2026-10-29]
  18. ubuntu文件管理怎样跨平台共享文件 [引用日期2026-10-29]
  19. ubuntu文件管理如何跨平台共享文件 [引用日期2026-10-29]
  20. samba.org 上的网页 [引用日期2026-10-29]
词条评价
词条统计

浏览次数:0 次

阅读量:0 次 · 阅读完成量:0 次

最近更新:2026-10-28T18:45:03Z

历史版本

本条目引用的词条
NetBIOS over TCP/IP SMB CIFS Active Directory 网络文件系统 网络附加存储