概述
Samba 是一个开源的软件套件,它实现了 SMB/CIFS 协议,允许 Windows 客户端访问 Linux 服务器上的文件和打印机,就像访问网络上的另一台 Windows 机器一样。

本指南将完成以下目标:
- 安装 Samba 服务器。
- 创建一个共享目录。
- 配置 Samba,定义共享和用户。
- 设置防火墙规则。
- 从 Windows 和 Linux 客户端访问共享。
- 介绍一些高级和安全配置。
第一步:更新系统
在安装任何新软件之前,最好先更新系统的软件包列表和已安装的软件。
对于 Ubuntu/Debian:
sudo apt update sudo apt upgrade -y
对于 CentOS/RHEL:
# 对于 CentOS 7/RHEL 7 sudo yum update -y # 对于 CentOS 8/RHEL 8 或更新版本 sudo dnf update -y
第二步:安装 Samba
使用系统的包管理器安装 Samba 软件包。
对于 Ubuntu/Debian:
sudo apt install samba -y
对于 CentOS/RHEL:
# 对于 CentOS 7/RHEL 7 sudo yum install samba samba-client -y # 对于 CentOS 8/RHEL 8 或更新版本 sudo dnf install samba samba-client -y
安装完成后,Samba 服务会自动启动,我们可以检查其状态:

sudo systemctl status smbd # Samba 服务 (SMB Daemon) sudo systemctl status nmbd # NetBIOS 名称服务
第三步:创建共享目录和 Samba 用户
为了安全,我们不应该直接共享用户的主目录,这里我们创建一个专门的共享目录。
-
创建共享目录
sudo mkdir -p /srv/samba/public
/srv是存放服务数据的标准目录。-p选项会确保父目录(如果不存在)也会被创建。
-
设置目录权限 为了让 Samba 用户可以读写,我们需要设置正确的权限。
# 设置所有者为 root,组为 samba sudo chown -R root:samba /srv/samba/public # 设置目录权限为 770 (所有者完全控制,组可读写执行,其他用户无权限) sudo chmod -R 770 /srv/samba/public
- 重要:Samba 使用自己的用户认证系统,而不是直接使用 Linux 系统的用户,但共享目录的 Linux 文件系统权限仍然需要正确设置,以允许 Samba 进程访问。
-
创建 Samba 用户 Samba 用户必须是 Linux 系统中已存在的用户,这里我们以创建一个名为
sambauser的用户为例。
(图片来源网络,侵删)-
创建 Linux 用户(如果不存在):
sudo useradd -m -s /bin/bash sambauser # 为该用户设置一个 Linux 登录密码(可选,但推荐) sudo passwd sambauser
-
将该用户添加到 Samba 数据库: 使用
smbpasswd命令为sambauser设置一个 Samba 专用的密码,这个密码是你在 Windows 访问共享时需要输入的。sudo smbpasswd -a sambauser
系统会提示你输入并确认一个新密码。
-
第四步:配置 Samba
Samba 的主配置文件是 /etc/samba/smb.conf,我们需要编辑这个文件来定义我们的共享。
-
备份原配置文件
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
-
编辑配置文件 使用你喜欢的文本编辑器,
nano或vim:sudo nano /etc/samba/smb.conf
-
添加共享配置 在文件末尾添加以下内容来定义我们的
public共享:[public] comment = Public Share path = /srv/samba/public browsable = yes writable = yes guest ok = no valid users = @samba # 只允许 samba 组的用户访问 force create mode = 0660 force directory mode = 0770配置项解释:
[public]:这是在 Windows 网络邻居中显示的共享名称。comment:对共享的简短描述。path:共享的绝对路径。browsable = yes:允许在“网络”中看到此共享。writable = yes:允许用户向此共享写入文件。guest ok = no:禁止匿名(访客)访问,必须提供用户名和密码。valid users = @samba:这是安全关键配置,它只属于samba组的用户可以访问,你需要先创建这个组,并将用户加入其中:sudo groupadd samba sudo usermod -aG samba sambauser
force create mode / force directory mode:强制在此共享中创建的文件和目录具有特定的权限,确保它们属于samba组。
-
测试配置文件 保存并关闭文件后,运行以下命令检查配置文件是否有语法错误:
testparm
如果输出
Load smb config files from /etc/samba/smb.conf和OK等信息,则表示配置正确。 -
重启 Samba 服务 使新的配置生效:
sudo systemctl restart smbd nmbd
第五步:配置防火墙
为了能从外部访问 Samba 共享,必须在防火墙中开放相应的端口。
对于 Ubuntu/Debian (使用 UFW):
sudo ufw allow samba
对于 CentOS/RHEL (使用 firewalld):
sudo firewall-cmd --permanent --add-service=samba sudo firewall-cmd --reload
第六步:从客户端访问共享
Samba 服务器已经配置完成,你可以从 Windows 或 Linux 客户机访问它。
从 Windows 访问:
- 打开“文件资源管理器”。
- 在地址栏中输入服务器的 IP 地址或主机名,格式为
\\<服务器IP或主机名>。\\192.168.1.100
- 系统会弹出身份验证窗口。
- 用户名:输入你之前创建的 Samba 用户名,
sambauser。 - 密码:输入你用
smbpasswd设置的 Samba 密码。 - 点击“确定”,你就可以看到
public共享文件夹了。
从 Linux 访问:
你可以使用 smbclient 命令行工具或图形化文件管理器。
-
使用
smbclient(命令行):# 安装 smbclient (如果未安装) # Ubuntu/Debian: sudo apt install smbclient # CentOS/RHEL: sudo yum install samba-client # 列出共享 smbclient -L //192.168.1.100 -U sambauser # 登录并进入共享 smbclient //192.168.1.100/public -U sambauser
登录后,可以使用
help查看可用命令,如get(下载),put(上传),ls(列表) 等。 -
使用文件管理器 (图形界面):
- 打开 Nautilus (GNOME), Dolphin (KDE) 等文件管理器。
- 在地址栏输入
smb://192.168.1.100。 - 双击
public共享,然后输入用户名和密码即可挂载和访问。
第七步:高级与安全配置
只读共享
如果你希望一个共享是只读的,将 writable = yes 改为 writable = no,或者添加 read only = yes。
允许特定用户写入
即使共享是可写的,你也可以限制只有特定用户可以写入。
[public]
path = /srv/samba/public
writable = yes
write list = sambauser, another_user # 只有这两个用户可以写
创建用户级别的私有共享
如果你想为每个用户创建一个私有的、只能由自己访问的目录,可以这样配置:
[homes]
comment = Home Directories
browseable = no
writable = yes
valid users = %S # %S 是当前登录的用户名
create mask = 0700
directory mask = 0700
配置后,当用户 sambauser 登录时,他会自动看到一个名为 sambauser 的共享,指向其主目录 /home/sambauser,并且只有他自己可以访问。
安全建议
- 使用强密码:为 Samba 用户设置复杂的密码。
- 最小权限原则:只授予必要的用户访问共享的权限。
- 限制网络访问:如果可能,在防火墙或 Samba 配置中限制只有特定 IP 地址可以访问。
- 在
smb.conf的[global]部分添加:hosts allow = 192.168.1.0/24 192.168.2.100
这将只允许
168.1.x网段和168.2.100这台机器访问。
- 在
常见问题排查
-
无法访问,提示“网络错误”或“找不到网络路径”:
- 检查防火墙是否已开放 Samba 端口(
137-138/UDP,139/TCP,445/TCP)。 - 检查 SELinux 是否为 enforcing 状态,如果是,需要为 Samba 设置正确的布尔值(
setsebool -P samba_enable_home_dirs on)或将其临时设为 permissive (sudo setenforce 0) 进行测试。 - 确保 Samba 服务正在运行 (
sudo systemctl status smbd)。 - 使用
testparm检查配置文件语法。
- 检查防火墙是否已开放 Samba 端口(
-
提示“拒绝访问”或“用户名或密码错误”:
- 确认用户名和密码是否正确。
- 确认该用户是否在
valid users列表中,或者是否属于指定的组。 - 确认共享目录的 Linux 文件系统权限是否正确(
770和samba组的所有权)。
希望这份详细的指南能帮助你成功安装和配置 Samba 服务器!
