Samba 服务器配置完整指南
Samba 是一个开源的软件套件,它实现了 SMB/CIFS 协议,让 Linux 系统能够与 Windows 系统进行文件和打印共享,你可以把它想象成一个“在 Linux 上运行,让 Windows 能访问的共享文件夹服务”。

本教程将带你完成以下步骤:
- 安装 Samba
- 创建共享目录和用户
- 编辑主配置文件
- 配置共享
- 设置 Samba 用户密码
- 启动并启用 Samba 服务
- 配置防火墙
- 从 Windows 访问共享
- 常见问题与高级配置
第一步:安装 Samba
更新你的软件包列表,然后安装 Samba。
# 更新软件包列表 sudo apt update # 安装 samba 软件包 sudo apt install samba
安装完成后,Samba 的主要配置文件 /etc/samba/smb.conf 已经存在,我们可以开始进行配置。
第二步:创建共享目录和用户
为了安全起见,我们不应该使用系统用户(如 root)来共享文件,最佳实践是创建一个专门用于共享的用户和目录。

-
创建一个系统用户 (名为
sambauser),这个用户不需要有登录 shell,只是一个用来管理文件所有权的身份。# 创建用户,并设置其主目录为 /home/sambauser sudo useradd -m sambauser # (可选) 为这个系统用户设置一个登录密码,方便以后通过 SSH 登录管理 sudo passwd sambauser
-
创建共享目录,我们将在
/srv/samba/share这个路径下创建共享文件夹,这是一个常见的存放共享文件的位置。sudo mkdir -p /srv/samba/share
-
设置目录所有者,将这个目录的所有权赋予我们刚刚创建的
sambauser。sudo chown -R sambauser:sambauser /srv/samba/share
-
设置目录权限,确保用户可以在其中读写。
(图片来源网络,侵删)sudo chmod -R 0770 /srv/samba/share
0770的含义:0: 特殊权限位。7(所有者): 读、写、执行。7(组): 读、写、执行。0(其他人): 无权限。
第三步:编辑主配置文件
Samba 的核心配置是 /etc/samba/smb.conf 文件,在修改之前,强烈建议先备份一份。
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
用你喜欢的文本编辑器打开它(nano):
sudo nano /etc/samba/smb.conf
文件分为两部分:[global] 部分和 [共享名] 部分。
配置 [global] 部分
这是全局设置,影响所有共享,找到 [global] 部分,并确保以下配置存在或被修改:
[global] # 设置工作组,必须与你的 Windows 工作组或域相同,默认是 WORKGROUP。 workgroup = WORKGROUP # 设置服务器描述,在 Windows 网络邻居中可见。 server string = %h Samba Server # 设置日志文件路径和级别,级别 0 为无,1 为最基本,2 为详细。 log file = /var/log/samba/log.%m max log size = 1000 # 安全级别,这是最重要的设置之一。 # - `security = share`: 已过时,不推荐使用。 # - `security = user`: **推荐**,要求用户名和密码,每个共享都需要验证。 # - `security = domain`: 加入 Windows 域。 # - `security = ads`: 使用 Kerberos 加入 Windows Active Directory 域。 security = user # 是否允许 guest 访客,我们这里设为 no,要求所有用户认证。 map to guest = bad user # 设置密码加密方式,现代系统必须使用 yes。 encrypt passwords = yes # 设置共享文件的字符集,防止中文文件名乱码。 # en_US.UTF-8 是通用设置,如果仍有问题,可以尝试 GB2312。 unix charset = UTF-8 dos charset = UTF-8
配置共享部分
在文件的末尾,添加你自己的共享配置,我们将创建一个名为 PublicShare 的共享。
# ======================================================= # 自定义共享部分 # ======================================================= [PublicShare] # 共享的注释,描述信息 comment = Public Share Folder # 共享的路径,指向我们之前创建的目录 path = /srv/samba/share # 是否允许 guest 访问,我们这里设为 no,因为上面设置了 security = user guest ok = no # 是否允许用户写入 writable = yes # 新创建的文件和目录的权限掩码 create mask = 0770 directory mask = 0770 # 设置共享的有效用户,可以指定用户名或 @组名。 # 只允许 sambauser 和 anotheruser 访问 valid users = sambauser @samba_group
保存并退出 (nano 中是 Ctrl+X, 然后按 Y, 再按 Enter)。
第四步:测试配置文件
在重启服务之前,务必测试 smb.conf 文件的语法是否正确。
testparm
如果输出显示 Loaded services file OK.,则说明配置文件语法正确,如果有错误,它会提示你哪一行有问题,请返回上一步修改。
第五步:设置 Samba 用户密码
即使系统用户 sambauser 存在,Samba 也有自己独立的密码数据库,你需要为允许访问共享的系统用户设置一个 Samba 密码。
# 为 sambauser 这个用户设置 Samba 密码 sudo smbpasswd -a sambauser
系统会提示你输入并确认一个新密码,这个密码是当你在 Windows 访问共享时需要输入的。
第六步:启动并启用 Samba 服务
启动 Samba 的核心服务(smbd 用于文件共享,nmbd 用于 NetBIOS 名称解析)并设置它们开机自启。
# 启动服务 sudo systemctl start smbd nmbd # 设置开机自启 sudo systemctl enable smbd nmbd
你可以检查服务状态:
sudo systemctl status smbd
第七步:配置防火墙
如果你的服务器启用了 ufw (Uncomplicated Firewall),需要开放 Samba 使用的端口。
Samba 使用以下端口:
- TCP/UDP 137: NetBIOS 名称服务
- TCP/UDP 138: NetBIOS 数据报服务
- TCP/UDP 139: SMB 协议 over NetBIOS
- TCP 445: SMB over IP (现代标准)
你可以使用 ufw 的应用配置来简化这个过程:
# 允许 Samba 服务的所有端口 sudo ufw allow Samba
第八步:从 Windows 访问共享
配置已经完成,你可以从同一局域网内的 Windows 电脑访问了。
- 打开 Windows 的“文件资源管理器”。
- 在地址栏中,输入 Samba 服务器的 IP 地址或主机名,格式为
\\服务器IP或\\服务器主机名。\\192.168.1.100或\\ubuntu-server
- 按下回车,系统会弹出一个身份验证窗口。
- 输入凭证:
- 用户名:
sambauser(你的 Samba 用户名) - 密码:你在第五步设置的 Samba 密码
- 如果用户名提示是
SERVERNAME\sambauser的格式,请确保选择“其他用户”并输入sambauser和密码。
- 用户名:
- 登录成功后,你就可以看到
PublicShare共享文件夹了,就像访问本地磁盘一样。
第九步:常见问题与高级配置
问题 1:Windows 提示“找不到网络路径”或无法访问
- 原因:通常是网络问题或防火墙阻止。
- 解决:
- 确认 Windows 和 Linux 服务器在同一个局域网(同一个网段)。
- 在 Windows 的“控制面板” -> “网络和 Internet” -> “网络和共享中心” -> “更改高级共享设置”中,确保启用网络发现和文件和打印机共享。
- 检查 Windows 防火墙是否阻止了“文件和打印机共享”。
问题 2:中文文件名或文件夹显示为乱码
- 原因:字符集不匹配。
- 解决:回到
/etc/samba/smb.conf的[global]部分,确保unix charset和dos charset设置正确,对于中文环境,可以尝试:unix charset = GB2312 dos charset = GB18030
如果问题依旧,可以尝试
UTF-8,这取决于你的 Windows 系统语言设置。
问题 3:用户无法写入,提示“权限被拒绝”
- 原因:Linux 文件系统权限或 Samba 权限问题。
- 解决:
- 检查共享目录的 Linux 权限:
ls -ld /srv/samba/share,确保sambauser用户有rwx权限。 - 检查
smb.conf中的writable = yes和valid users设置是否正确。 - 在 Windows 上,确保你登录的用户对文件有写入权限。
- 检查共享目录的 Linux 权限:
高级配置:创建只读共享
如果你想创建一个只读的共享,可以这样做:
[ReadOnlyShare] comment = Read-Only Share Folder path = /srv/samba/readonly guest ok = no writable = no # 禁止写入 valid users = sambauser
高级配置:创建用户级共享
让每个用户访问自己的家目录,这在家庭或小团队环境中非常实用。
[Homes] comment = Home Directories browseable = no # 不在列表中显示,但可以直接访问 \\server\username writable = yes valid users = %S # %S 代表访问共享的用户名 inherit permissions = yes
这样,用户 sambauser 就可以通过 \\server\sambauser 访问自己的 /home/sambauser 目录了。
