我们将使用 apt 包管理器(适用于 Debian/Ubuntu 系统),对于 CentOS/RHEL 系统,可以使用 yum 或 dnf。

第一部分:安装 Samba
更新系统包列表
确保你的系统包列表是最新的。
sudo apt update sudo apt upgrade -y
安装 Samba 软件包
Samba 的主要组件包括 samba 包(核心服务器)和 samba-common-bin 包(提供客户端工具如 smbclient)。
sudo apt install samba samba-common-bin -y
安装完成后,Samba 服务会自动启动,你可以使用以下命令检查其状态:
sudo systemctl status smbd
如果看到 active (running),说明服务正在运行。

第二部分:配置 Samba 共享
这是最关键的一步,我们将配置一个名为 public 的公共共享目录,和一个名为 private 的私有共享目录,只有特定用户可以访问。
创建共享目录
创建两个目录,一个用于公共共享,一个用于私有共享。
# 创建公共共享目录 sudo mkdir -p /srv/samba/public # 创建私有共享目录 sudo mkdir -p /srv/samba/private # 设置目录的所有权 # 将 public 目录的所有者设为 root,组设为 sambashare,并设置正确的权限 sudo chown -R root:sambashare /srv/samba/public sudo chmod -R 0775 /srv/samba/public # 将 private 目录的所有者设为 root,组设为 sambashare sudo chown -R root:sambashare /srv/samba/private sudo chmod -R 0770 /srv/samba/private
注意:我们创建了一个名为 sambashare 的系统组,稍后我们会将用户添加到这个组中。
创建 Samba 用户
Samba 有自己独立的用户数据库,它不直接使用系统用户,你需要为想要访问 Samba 共享的用户创建 Samba 账户。

前提:该用户必须首先作为系统用户存在,如果不存在,请先创建:
# 假设我们要创建一个名为 'testuser' 的系统用户 sudo useradd -m testuser
为 testuser 创建 Samba 用户账户,并设置一个独立的 Samba 密码(这个密码可以和系统密码不同)。
sudo smbpasswd -a testuser
系统会提示你输入并确认这个新密码。
编辑 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
在文件末尾添加以下配置:
# ========================================
# Samba 共享配置
# ========================================
[public]
comment = Public Share
path = /srv/samba/public
browsable = yes
guest ok = yes # 允许来宾用户(匿名)访问
read only = no # 允许写入
force create mode = 0664
force directory mode = 0775
[private]
comment = Private Share for testuser
path = /srv/samba/private
browsable = yes
valid users = testuser # 只有 testuser 用户可以访问
guest ok = no # 禁止来宾访问
read only = no # 允许写入
create mask = 0770 # 新建文件的默认权限
directory mask = 0770 # 新建目录的默认权限
配置解释:
[public]和[private]:这是共享的名称,在 Windows 网络邻居中会显示。comment:共享的描述信息。path:指定共享的本地文件系统路径。browsable = yes:在网络上是否可见。guest ok = yes:允许匿名用户(guest)访问。public共享设为yes。valid users = testuser:指定哪些用户可以访问。private共享只允许testuser。read only = no:允许用户写入文件。force create mode / create mask:设置新创建文件的默认权限。force directory mode / directory mask:设置新创建目录的默认权限。
检查配置文件语法
保存并关闭编辑器后,运行以下命令检查 smb.conf 的语法是否正确:
testparm -s
如果输出 Loaded services file OK.,说明语法正确。
创建 Samba 用户组并添加用户
为了更好地管理私有共享的权限,我们将 testuser 添加到之前提到的 sambashare 组中。
# sambashare 组不存在,先创建它 sudo groupadd sambashare # 将 testuser 添加到 sambashare 组 sudo usermod -aG sambashare testuser
重要:让 testuser 重新登录或运行 newgrp sambashare 来使其获得新的组权限。
重启 Samba 服务
使新的配置生效:
sudo systemctl restart smbd nmbd
smbd 是文件和打印服务,nmbd 是 NetBIOS 名称服务。
第三部分:防火墙配置
如果你的服务器启用了 UFW 防火墙,需要开放 Samba 所需的端口。
# 开放 Samba 的端口范围 sudo ufw allow samba
第四部分:客户端访问测试
你可以从另一台计算机(Windows 或 Linux)访问这个共享了。
从 Windows 访问:
- 打开“文件资源管理器”。
- 在地址栏中输入
\\<你的Linux服务器IP地址>,然后按回车。\\192.168.1.100
- 你应该能看到
public和private两个共享文件夹。 - 双击
public,可以直接进入,无需密码。 - 双击
private,系统会提示你输入用户名和密码,输入testuser和你之前设置的 Samba 密码即可。
从 Linux 访问:
你可以使用 smbclient 命令行工具来测试。
-
测试匿名访问
public:smbclient //192.168.1.100/public -N
-N表示不提示输入密码(用于匿名/来宾访问),进入后,可以使用ls,get,put等命令。 -
测试用户
testuser访问private:smbclient //192.168.1.100/private -U testuser
系统会提示你输入
testuser的 Samba 密码。
第五部分:开机自启
确保 Samba 服务在服务器重启后自动启动:
sudo systemctl enable smbd nmbd
总结与排错
-
无法访问?
- 检查防火墙:
sudo ufw status。 - 检查 Samba 服务状态:
sudo systemctl status smbd。 - 检查 SELinux(如果使用的是 CentOS/RHEL):可能需要设置
setsebool -P samba_enable_home_dirs on等策略。 - 检查网络:确保你的 Linux 服务器和客户端在同一网段。
- 检查日志:
/var/log/samba/log.smbd和/var/log/samba/log.nmbd是排查问题的关键。
- 检查防火墙:
-
权限问题?
- 确保共享目录的权限设置正确(
0775/0770)。 - 确保访问用户在
valid users列表中,并且是sambashare组的成员。 - 使用
ls -l /srv/samba/private查看文件的所有者和组。
- 确保共享目录的权限设置正确(
遵循以上步骤,你应该就能成功搭建一个功能完善的 Samba 文件共享服务器了。
