目录
- Samba 简介
- 准备工作
- 安装 Samba
- 核心配置文件:
smb.conf - 基础共享配置示例
- 用户认证与权限管理
- 高级配置(可选)
- 防火墙与 SELinux
- 启动、测试与管理
- 常见问题与排查
Samba 简介
Samba 是一个开源的软件套件,它实现了 SMB/CIFS 协议,它能让你的 Linux 服务器(如 CentOS, Ubuntu, Rocky Linux 等)像 Windows 文件共享服务器一样工作,让 Windows、macOS 甚至其他 Linux 设备可以像访问网络上的 Windows 电脑一样访问其共享文件夹。

准备工作
你需要一个已经安装好的 Linux 系统(这里以 CentOS 7/8/9 或 Rocky Linux / AlmaLinux 为例,Ubuntu/Debian 的命令略有不同,但核心配置文件 smb.conf 是一样的)。
- 更新系统
sudo yum update -y
- 设置主机名 (可选,但推荐)
sudo hostnamectl set-hostname samba-server
- 确认网络连接,确保服务器和客户端可以互相 ping 通。
安装 Samba
使用包管理器安装 Samba。
# 对于 CentOS/Rocky/AlmaLinux sudo yum install samba samba-client samba-common -y # 对于 Ubuntu/Debian sudo apt update sudo apt install samba samba-common -y
安装完成后,Samba 服务并不会自动启动。
核心配置文件:smb.conf
Samba 的所有配置都位于 /etc/samba/smb.conf 文件中,在修改之前,强烈建议先备份原文件。

sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
使用你喜欢的文本编辑器(如 vi 或 nano)打开该文件:
sudo vi /etc/samba/smb.conf
文件结构分为两部分:
[global]部分:全局设置,影响所有共享。[共享名]部分:定义具体的共享文件夹及其设置。
[global] 部分关键参数解析
在 [global] 部分,至少需要关注以下几个参数:
[global]
# 工作组的名称,必须与你的 Windows 客户端所在的工作组一致,否则无法在“网络”中看到。
# 默认通常是 WORKGROUP,如果你的 Windows 是 `HOME`,就改成 HOME。
workgroup = WORKGROUP
# 服务器的描述,会在“网络”中显示。
server string = Samba Server %v
# 安全级别,这是最重要的设置之一。
# - `security = share`: 最不安全,任何人都可以访问,无需密码。**不推荐**。
# - `security = user`: **最常用**,需要有效的用户名和密码才能访问。
# - `security = ads`: 加入 Windows 域,使用 AD 进行认证。
security = user
# 是否允许 guest 用户访问,配合 `map to guest = bad user` 使用。
# map to guest = bad user
# 日志文件路径和级别
log file = /var/log/samba/log.%m
max log size = 50
# 允许的客户端最大协议版本,建议保持默认或设置较新的版本。
# server min protocol = SMB2
基础共享配置示例
在 smb.conf 文件的末尾,添加一个或多个共享定义,这里我们创建两个共享:一个公共只读共享,一个私有读写共享。

# ================================================================
# 共享定义开始
# ================================================================
[Public]
# 共享的描述名称,在 Windows 中会显示为这个名称。
comment = Public Share for Everyone
# 要共享的本地 Linux 路径。
path = /samba/public
# 是否允许 guest 用户访问 (guest ok = yes 是 guest only = yes 的别名)
guest ok = yes
# guest 用户映射为哪个 Linux 系统用户。
# path 目录的所有者是 nobody,guest user 也应该是 nobody。
guest account = nobody
# 权限设置。
# - read only = yes: 只读。
# - read only = no: 可写。
read only = yes
# 允许哪些用户或用户组可以写入,即使 read only = no,也需要这个。
# 如果设置为 "no",则任何人都可以写入(guest ok = no,则需要认证)。
write list =
[Private]
comment = Private Share for Authenticated Users
path = /samba/private
# 不允许 guest 用户访问,必须提供有效用户名和密码。
guest ok = no
# 允许写入。
read only = no
# 允许写入的用户列表,可以是用户名或 @组名。
write list = @smbusers, admin
# 新建文件和目录的默认权限。
# - create mask: 新文件的权限 (664 = rw-rw-r--)
# - directory mask: 新目录的权限 (775 = rwxrwxr-x)
create mask = 0664
directory mask = 0775
# 新建文件和目录的所有者。
# force user: 强制所有者为指定用户。
# force group: 强制所属组为指定组。
# force user = nobody
# force group = nogroup
# ================================================================
# 共享定义结束
# ================================================================
创建共享目录并设置权限
上面的配置引用了 /samba/public 和 /samba/private 目录,我们需要创建它们并设置正确的权限。
# 创建共享目录 sudo mkdir -p /samba/public sudo mkdir -p /samba/private # 设置所有者,确保 Samba 有权限访问 sudo chown -R root:nobody /samba/public sudo chown -R root:nobody /samba/private # 设置目录权限 sudo chmod -R 775 /samba/public sudo chmod -R 775 /samba/private
用户认证与权限管理
由于我们设置了 security = user,所以必须创建可以访问 Samba 的用户。注意:这些用户必须是 Linux 系统中已经存在的用户。
-
创建 Linux 系统用户
# 创建一个名为 'testuser' 的用户 sudo useradd testuser # 为该用户设置密码 sudo passwd testuser
-
为 Samba 创建/设置密码 使用
smbpasswd命令为 Samba 单独设置一个密码,这个密码可以和 Linux 用户密码不同。# 第一次使用,需要 -a (add) 选项 sudo smbpasswd -a testuser # 修改已有用户的 Samba 密码 sudo smbpasswd testuser # 禁用用户的 Samba 访问 sudo smbpasswd -x testuser
-
创建 Samba 专用组 (可选) 如果我们想让一组用户共享一个文件夹,创建组是最佳实践。
# 创建一个名为 'smbusers' 的组 sudo groupadd smbusers # 将用户添加到组中 sudo usermod -aG smbusers testuser sudo usermod -aG smbusers admin
然后在
smb.conf的[Private]共享中使用write list = @smbusers。
高级配置(可选)
1. 使用 smb.conf 中的 include 选项管理共享
当共享很多时,smb.conf 会变得臃肿,你可以将每个共享的配置放在单独的文件中,然后在主配置文件中 include 进来。
-
在
/etc/samba/目录下创建shares目录。sudo mkdir /etc/samba/shares
-
将
[Public]和[Private]的配置块分别存入/etc/samba/shares/public.conf和/etc/samba/shares/private.conf。 -
在主
/etc/samba/smb.conf文件末尾添加:# Include all share definitions from the shares directory include = /etc/samba/shares/*.conf
2. 设置用户主目录共享
Samba 可以自动为每个认证的用户共享其主
