For the complete documentation index, see llms.txt. This page is also available as Markdown.

35.2 Samba 文件共享

Samba 概述

Samba 是服务器消息块(Server Message Block,SMB)与通用互联网文件系统(Common Internet File System,CIFS)协议的自由软件重新实现,其核心目标在于实现 UNIX 系统与 Windows 网络环境之间的互操作性。

就体系结构而言,smbd(文件与打印服务守护进程)与 nmbd(NetBIOS 名称服务守护进程)协同工作:smbd 处理文件共享与打印服务请求,nmbd 提供 NetBIOS 名称解析与网络浏览服务。

Windows 客户端
   
   ├── 文件/打印请求 ──► smbd(文件与打印服务守护进程)
                         TCP 445 / TCP 139
   
   └── NetBIOS 名称解析 ──► nmbd(NetBIOS 名称服务守护进程)
                           UDP 137 / UDP 138

Samba 需要在防火墙中放行以下端口:

协议
端口
服务
必需条件

TCP

139

NetBIOS 会话服务

仅 SMBv1(NT1)协议时方为必需

UDP

137

NetBIOS 名称服务

仅 SMBv1(NT1)协议时方为必需

UDP

138

NetBIOS 数据报服务

仅 SMBv1(NT1)协议时方为必需

TCP

445

SMB over TCP

始终必需

若配置 min protocol = SMB2 及以上,可仅开放 TCP 445。

Samba 作者 Andrew Tridgell 在开发早期因项目原名“smbserver”已被 Syntax 公司(其商业产品 TotalNet Advanced Server 拥有该名称商标)主张商标权而须更名,新名称通过 Unix 命令 grep -i '^s.*m.*b' /usr/share/dict/words 从系统词典中搜索按顺序包含 s、m、b 三个字母的单词而得,“Samba”即由此而来。需要指出的是,“samba”在葡萄牙语及英语中亦有“桑巴舞”之义,此为词形上的巧合。

安装 Samba

Samba 有两种主要安装方式:

  • 使用 pkg 安装:

  • 或使用 Ports 安装:

  • 查看安装信息:

相关项目结构

基础配置

编辑 Samba 配置文件

创建 Samba 配置文件 /usr/local/etc/smb4.conf,写入以下内容并保存:

注释说明:

配置项
说明

[global]

全局配置段,适用于所有共享项

min protocol = SMB2

将最小支持协议限制为 SMB2,以便较新版本 Windows 访问

[test_share]

定义共享名称

comment = root's stuff

该共享的描述信息,Windows 资源管理器浏览共享时将显示此文本

path = /root

共享的实际路径为 /root不建议 在生产环境中共享该目录

valid users = ykla

仅允许用户 ykla 访问 Samba 服务器

public = no

不允许匿名访问(等价于 guest ok = no

browseable = yes

可在网络邻居中浏览该共享

writable = yes

允许客户端写入该目录

printable = no

本共享非打印机共享

create mask = 0644

新建文件的默认权限为 0644,避免文件被意外赋予可执行属性

目录权限调整

准备目录,调整目录权限:

此时,目录 /home/ykla/test 的权限应如下所示:

将若干文件置入目录 /home/ykla/test 便于测试。

用户管理

出于安全考虑,避免创建 Samba root 用户。

Samba 仅识别已纳入其内部数据库的账号,因此需将 FreeBSD 用户账户映射至 Samba 账号数据库后,Windows 客户端方可访问共享。pdbedit(8) 支持基于 smbpasswd、ldap、nis+ 与 tdb 等多种后端的用户数据库。可使用 pdbedit(8) 将已有的 FreeBSD 用户账户 ykla 映射至 Samba:

此处设置的密码可以与 FreeBSD 用户账户不同,只是用于验证 Samba 服务器的密码。

启动 Samba 服务

  • 将 Samba 服务设置为开机启动:

  • 启动 Samba 服务

  • 查看 Samba 服务的运行状态:

Samba 包含 nmbd、smbd 及 winbindd 三个守护进程,其中 nmbd 与 smbd 由 samba_server_enable 统一管理,winbindd 须通过 winbindd_enable 单独启用(本例中无须启用)。

使用 Samba 共享服务

  • 在 Windows 系统中访问共享文件夹:同时按下 Windows 徽标键 + R 组合键以打开“运行”对话框,输入以下 UNC 路径(请将示例 IP 地址替换为实际值):

Windows 访问网络共享资源

在凭据提示框中输入 Samba 用户名 ykla 及其密码:

键入 Samba 用户名

连接成功,可以看到共享的项目名称“test_share”。

连接 Samba

进一步点击共享项目“test_share”,浏览文件:

连接 Samba

读写操作均正常。

域成员配置

系统参数优化

Kerberos 认证

配置名称服务

配置 NSS,使系统依次通过本地文件与 Winbind 解析用户记录:

配置 NSS,使系统依次通过本地文件与 Winbind 解析组记录:

Samba 主配置文件

上述 testshare 共享段中 create modeforce create mode 两项用于实际运行时调整新建文件的权限,属可选配置:

域管理

服务自启动配置

设置 Winbind 服务开机自动启动:

将主机加入 Active Directory 域,不更新 DNS:

Kerberos 认证验证

Winbind 服务验证

wbinfo 命令返回错误,可重启 Samba 服务后再次验证:

共享目录配置

如仅允许属主可读写、属组仅可读取,可执行:

如仅允许属主可读写、属组及其他用户均不可访问,可执行:

故障排除

Samba 日志文件默认位于 /var/log/samba4 目录下,文件名以 log. 为前缀并附带客户端主机名,可据此排查连接与认证故障。

参考文献

最后更新于