Ubuntu搭建Samba文件共享服务器详细教程

 更新时间:2026年08月13日 10:02:03   作者:海盗船长没有船y  
还在为Ubuntu和Windows之间共享文件发愁?本教程从零开始教你安装和配置Samba服务,用通俗的“双层门锁”模型讲透权限设置,并附上常见连接故障的排错方法,让你轻松搭建稳定安全的文件共享服务器

从安装配置到常见问题排错

1. 简介:Samba是什么?

Samba是一个在Linux和UNIX系统上实现SMB/CIFS协议的开源软件套件。

简单来说,它允许你的Ubuntu计算机像一台Windows机器一样,在网络上共享文件和打印机,使得Windows、macOS和Linux客户端都能无缝访问。

本指南将带你从零开始,搭建一个稳定、安全的文件共享服务器。

2. 第一步:安装Samba服务

首先,更新你的包列表,然后安装Samba软件包。

# 更新软件包列表
sudo apt update

# 安装Samba核心套件
sudo apt install samba

安装完成后,Samba服务会自动启动。

3. 第二步:核心配置

3.1 理解“双层门锁”权限模型

这是配置Samba最关键的概念,理解它能帮你解决90%的权限问题。

  • 第一层锁 (Linux文件系统权限):这是物理层面的锁,由chmod和chown命令控制。它决定了一个系统用户在本机上是否有权访问某个文件或目录。
  • 第二层锁 (Samba共享权限):这是网络层面的锁,由/etc/samba/smb.conf文件定义。它决定了网络访客通过共享协议能做什么。

核心原则:Samba权限无法超越Linux权限。如果一个目录在Linux上是只读的,那么无论Samba如何配置,网络用户都无法写入。

3.2 创建Samba用户并设置密码

Samba使用自己独立的用户密码数据库。用于Samba登录的用户必须首先是系统中的一个真实用户。

确保Linux系统用户存在

如果用户不存在,先创建。例如,创建一个名为shareuser的用户:

sudo adduser shareuser

为该用户设置Samba密码

使用smbpasswd命令将系统用户添加到Samba数据库,并为其设置一个专用于Samba登录的密码(可以和系统密码不同)。

sudo smbpasswd -a shareuser

根据提示输入两次密码即可。

3.3 准备共享目录与设定权限

现在,我们来创建要共享的目录,并设置好它的“第一层锁”。

创建目录

推荐将共享目录放在/srv/下,这是一个用于存放服务数据的标准位置。

sudo mkdir -p /srv/samba/shared_folder

设置所有权和权限

将目录的所有权交给刚刚创建的Samba用户,并设置合适的读写权限。

# 更改所有者和用户组
sudo chown shareuser:shareuser /srv/samba/shared_folder/

# 设定权限为775,这是一个安全且实用的选择
# 所有者和同组用户可读写执行,其他用户只读执行
sudo chmod 775 /srv/samba/shared_folder/

3.4 编辑Samba主配置文件smb.conf

这是配置“第二层锁”的地方。

备份原始配置(强烈推荐)

sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak

编辑配置文件

使用sudo权限和你喜欢的编辑器打开文件。

sudo nano /etc/samba/smb.conf

添加共享定义

在文件的最底部,添加以下内容。这是一个经过验证的“黄金模板”。

[MyShare]
    comment = Public Shared Folder
    path = /srv/samba/shared_folder
    browseable = yes
    guest ok = no
    read only = no
    writable = yes
    valid users = shareuser
    force user = shareuser
  • [MyShare]: 共享名称,网络邻居中会显示这个名字。
  • path: 共享目录的绝对路径。
  • browseable: 是否在网络邻居中可见。
  • guest ok: 是否允许匿名访问。设为no更安全。
  • read only/writable: 明确声明共享是可读写的。
  • valid users: 允许访问的用户列表。
  • force user: 关键配置。强制所有网络操作都以shareuser的身份执行,完美匹配文件系统权限,避免权限混乱。

3.5 验证配置并重启服务

检查配置语法

使用testparm命令可以检查smb.conf是否有语法错误。

testparm

重启Samba服务以应用更改(必须步骤)

sudo systemctl restart smbd nmbd

4. 第三步:客户端连接指南

首先,获取你的Ubuntu服务器的IP地址:

ip addr show

4.1 从Windows连接

打开文件资源管理器,在地址栏输入 \\<Ubuntu服务器IP> (例如 \\192.168.1.100),回车后输入Samba用户名和密码。

4.2 从macOS连接

打开“访达”(Finder),点击菜单栏“前往”->“连接服务器”,输入 smb://<Ubuntu服务器IP> (例如 smb://192.168.1.100)。

4.3 从其他Linux/Ubuntu连接

打开文件管理器,选择“连接到服务器”或“其他位置”,输入 smb://<Ubuntu服务器IP>。

5. 第四步:终极排错手册

5.1 症状:能看文件夹,但内部文件不可见且无法写入

这是最常见的问题,直接回归“双层门锁”模型排查。

  • 检查第一层锁:ls -ld /path/to/share,确认Samba用户(或force user指定的用户)对该目录有rwx(读写执行)权限。
  • 检查第二层锁:检查smb.conf中对应共享的配置,确保有read only = no或writable = yes。

5.2 症状:编辑配置文件后提示“无法打开并写入文件”

例如Vim/Vi报错 E212: 无法打开并写入文件。

  • 原因:你没有使用sudo权限编辑系统文件。所有修改都在内存中,并未保存到硬盘。
  • 解决方案:关闭文件,使用 sudo nano /etc/samba/smb.conf 或 sudo vim ... 重新编辑并保存。

5.3 症状:Windows客户端凭据错误或持续拒绝访问

  • 原因一:Samba密码与系统密码是独立的。请确认你使用的是smbpasswd设置的密码。
  • 原因二:Windows缓存了旧的或错误的凭据。
  • 解决方案:在Windows上打开控制面板 -> 凭据管理器 -> Windows 凭据,找到与你的服务器IP相关的记录并删除,然后重新连接。

5.4 症状:完全无法连接服务器

  • 原因:防火墙阻止了连接。
  • 解决方案:如果你的Ubuntu开启了UFW防火墙,需要允许Samba服务通过。
sudo ufw allow samba

总结

搭建Samba共享服务器的过程本身不复杂,但权限系统是其核心与难点。

只要你牢记“Linux权限为基,Samba权限为表,sudo执行修改,重启应用配置”的原则,就能从容应对绝大多数问题。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • linux如何通过防火墙iptables做隔离端口的脚本

    linux如何通过防火墙iptables做隔离端口的脚本

    这篇文章主要介绍了linux如何通过防火墙iptables做隔离端口的脚本问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • Linux 相对路径和绝对路径的使用

    Linux 相对路径和绝对路径的使用

    这篇文章主要介绍了Linux 相对路径和绝对路径的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • linux查看服务端证书方式(keytool和openssl)

    linux查看服务端证书方式(keytool和openssl)

    介绍了通过keytool和openssl工具来查看服务器端的SSL/TLS证书,包括直接抓取服务器证书和下载证书文件的方法,详细说明了每种方法的操作步骤和输出结果,帮助用户验证证书有效性和进行信任链验证
    2024-10-10
  • linux usb摄像头设备信息查看方式

    linux usb摄像头设备信息查看方式

    这篇文章主要介绍了linux usb摄像头设备信息查看方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • Linux文本处理工具使用详解

    Linux文本处理工具使用详解

    在本篇文章里小编给各位分享的是一篇关于Linux文本处理工具使用详解内容,有兴趣的朋友们可以学习下。
    2020-03-03
  • 详解Linux下调试器GDB的基本使用方法

    详解Linux下调试器GDB的基本使用方法

    GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。不管是调试Linux内核空间的驱动还是调试用户空间的应用程序,掌握gdb的用法都是必须。而且,调试内核和调试应用程序时使用的gdb命令是完全相同的
    2021-06-06
  • Linux 添加开机启动方法(服务/脚本)

    Linux 添加开机启动方法(服务/脚本)

    这篇文章主要介绍了Linux 添加开机启动方法(服务/脚本),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • linux 磁盘转移空间的方法

    linux 磁盘转移空间的方法

    本篇文章主要介绍了linux 磁盘转移空间的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • vim学习高级技巧之序列的生成方法详解

    vim学习高级技巧之序列的生成方法详解

    Vim经过了这么多年的发展,已经是世界上最强悍的编辑器之一,这篇文章主要给大家介绍了关于vim高级学习技巧之序列生成的相关资料,文中通过示例代码给大家介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习下吧。
    2017-09-09
  • Linux 下C语言连接mysql实例详解

    Linux 下C语言连接mysql实例详解

    这篇文章主要介绍了Linux 下C语言连接mysql实例详解的相关资料,需要的朋友可以参考下
    2017-04-04

最新评论