Ubuntu开启samba文件共享
摘要
本文详细介绍了在 Ubuntu 上搭建 Samba 文件共享服务的完整流程。内容涵盖 SMB 协议原理、Linux 与 Samba 的双层身份模型、安装服务、配置共享目录及用户权限、重启服务以及跨平台访问方法。文章还提供了防火墙配置与常见排错技巧,旨在帮助用户实现局域网内多设备无缝访问文件。
前言
在一台 Ubuntu 服务器或 NAS 主机上,想让你 Windows 电脑、手机、电视直接访问里面的文件(像访问本地硬盘一样拖拽文件),最通用的办法就是开 Samba 文件共享。Samba 实现了 Windows 的 SMB/CIFS 网络文件协议,装好之后,Windows 的资源管理器地址栏敲个 \\IP 就能像打开本地文件夹一样用 Ubuntu 里的目录,几乎零学习成本。
这篇教程按完整步骤带你在一台 Ubuntu 机器上把 Samba 跑起来,从安装、配共享目录、建用户到 Windows 访问验证,一步步来,小白也能照做。
适用:Ubuntu 服务器 / 无桌面主机 / NAS 系统,想让局域网内 Windows、macOS、手机都能访问共享目录的场景。
一、先搞懂 SMB 这套协议,后面排错才不慌
SMB(Server Message Block)是局域网文件共享协议,从 1980 年代 IBM 那套 NetBIOS 一路演进到现在,大致分三代:
版本 | 出现时间 | 关键变化 |
|---|---|---|
SMB1 | 1990s | 老协议,开销大、往返次数多 |
SMB2 | 2006(Vista) | 大幅减少往返、支持更大的读写块 |
SMB3 | 2012(Win8) | 端到端加密、多通道、持续可用 |
SMB1 现在是必须避开的东西,原因很直接:2017 年席卷全球的 WannaCry 勒索病毒,走的就是 SMB1 的 EternalBlue 漏洞。所以 Windows 10 1709 以后默认不再安装 SMB1 组件,现代 Samba 也默认 server min protocol = SMB2。
这带来一个实际后果:如果你家里还有古董 XP 机器、老电视盒子或十年前的老打印机,它们可能连不上。 这时候你要明白这是"为了安全刻意不兼容",不是配置错了 —— 并且不应该为了迁就它们去打开 SMB1。实在必须兼容,也请只在隔离的内网里临时开,用完关掉。
顺便解释一个常被搞混的名字:CIFS。它是微软在 SMB1 时代给自己实现起的名字(Common Internet File System)。Linux 内核里挂载 SMB 的类型名至今还叫 cifs,所以你在命令里看到 cifs 不要以为是另一套协议 —— 它就是 SMB。
再看端口。现代 SMB 直接跑在 445/tcp 上;历史遗留的 139/tcp(NetBIOS over TCP/IP)和 137/138/udp(名字解析)由 nmbd 这个进程负责。因为现在客户端都能直接用 IP 或 DNS 找到服务器,nmbd 基本可以不用,实际只需要 smbd 一个服务在跑。ufw allow samba 放行的是一整组(137/138/139/445),了解这个分工能帮你判断"防火墙到底开了什么"。
二、最关键的一个模型:Samba 是「两层身份」
这一点理解了,后面 90% 的权限问题都能自己推理出来。
Linux 层:一个真实的系统用户(
/etc/passwd里的账号),决定文件属主和 POSIX 权限Samba 层:一套独立的密码库(
/var/lib/samba/private/passwd.tdb),由smbpasswd -a创建
两层是分开维护的,所以会出现这些现象:
smbpasswd -x akira只删掉 Samba 密码条目,Linux 用户和文件都还在userdel akira删掉系统用户,但 Samba 密码库里可能还残留条目你从 Windows 访问共享时,服务端是按"Linux 用户 akira"的身份去读文件的 —— 跟这个用户 SSH 登录进来看到的权限一模一样
也就是说:Samba 不管权限判定,Linux 管。 这就是为什么下面用 chmod 777 能"一次解决所有问题" —— 它把 Linux 层的门整个打开了,代价是所有本机用户也都能改这个目录。
三、安装 Samba 服务
先在 Ubuntu 上安装 Samba:
安装过程中如果提示,输入 Y 确认即可。装完后 Samba 相关的服务(smbd)一般会自动就绪。
四、准备共享目录
Samba 的作用是把 Ubuntu 上的某个目录共享出去。如果你的目录已存在,可以直接跳过这步;没有的话先创建并给权限:
说明:目录路径和权限可按需改。如果只是个人/家庭局域网内用,目录可以宽松点;但如果这台机器要暴露到外网或有重要数据,建议用
755甚至更严,并配合 Samba 的valid users限制只让指定用户访问。
一个容易被忽略的坑:如果这个目录在外部挂载盘上,而且盘是 NTFS 或 exFAT,那么 chmod 是无效的 —— 这两种文件系统根本没有 Linux 权限位,命令执行了但不报错,权限也不会变。这种情况下必须靠挂载时的参数控制(比如 uid=1000,gid=1000,umask=022,在 /etc/fstab 里写)。用 ls -l 看属主时如果永远显示 root root 且改不动,基本就是这个问题。
五、编辑 Samba 配置
核心配置在 /etc/samba/smb.conf,用编辑器打开:
建议先在文件顶部的 [global] 段补上几条安全基线(关键,很多人只写共享段就完事):
然后在文件最后面追加一段共享定义,例如:
几个关键参数的意思:
参数 | 作用 |
|---|---|
| 共享名,别人在 Windows 上看到的就是这个名字 |
| 真正要共享的 Ubuntu 本地目录绝对路径 |
| 允许访问的 Samba 用户名( |
|
|
| 是否在网络邻居中列出;设 |
| 通过 SMB 新建的文件/目录用什么权限 |
| 强制新文件归属某个组,团队协作时避免"同组人改不了" |
create mask 和 directory mask 是很多人踩坑的地方。 它们的默认值是 0744 / 0755 —— 意思是"只有属主能写"。所以当多个用户共用同一个共享目录时,A 建的文件 B 改不了。把 mask 放宽到 0664 / 0775 并配 force group,同组人才能协作。注意:mask 只对通过 SMB 新建的文件生效,已有文件的权限还是得用 chmod 改。
六、创建 Samba 用户
Samba 用的是自己的一套用户密码(跟 Linux 登录密码不是一回事),需要单独创建。
如果系统里还没有对应账号,先建一个 Linux 用户(已有可跳过):
然后把该用户加入 Samba 并设置访问密码:
🔐 安全提醒:Samba 密码别设得太简单,尤其当共享目录可写、或机器在内网之外也能被访问时。也不要随意对所有人开放写权限,能设
valid users就设上。
推荐再加一步:让这个用户也能登录系统(有时候某些客户端会在建立会话时要求),或者干脆建一个不能登录 shell 的专用账号来跑共享,降低风险:
这样即使密码泄露,攻击者也没法用它 SSH 登录进来 —— 这是"共享账号"和"系统账号"分离的意义。
七、重启 Samba 服务使配置生效
如果没有报错,说明配置加载成功。如果改了配置文件后没生效,多半是忘了重启这一步。
想确认配置本身有没有语法问题,可以先跑一次检查(强烈建议在重启前做):
它会列出所有生效的参数,并在有语法错误时提示。习惯上先 testparm 再重启,能避免"改坏了服务直接起不来"。
八、测试访问
配置好后,就可以在其它设备上访问了。
Linux 访问(文件管理器地址栏输入):
Windows 访问(Win+R 打开运行,或资源管理器地址栏输入):
输入刚才设置的 Samba 用户名和密码,就能看到 [share] 共享目录,像本地磁盘一样读写文件了。上面的 IP 换成你 Ubuntu 机器的实际局域网 IP。
🔧 排错:
连不上/超时:先确认两台设备在同一局域网;再检查 Ubuntu 防火墙是否放行 SMB。UFW 放行可执行
sudo ufw allow samba或放行 445 端口。提示权限不足/无权限写入:检查目录权限(
chmod)和writable是否设了yes,以及访问用户是否在valid users里。能连上但看不到共享:确认
smb.conf里没有语法错误,重启服务后再试。Windows 提示"你不能访问此共享文件夹"(错误 0x80070035):多半是网络发现/凭据缓存问题。可以先
net use \\192.168.2.129\share /delete清掉旧凭据,再用 IP(而不是主机名)访问。macOS 挂载后写不进:macOS 会额外在目录里生成
._xxx和.DS_Store这类元数据文件。要抑制它们,可以在共享段里加vfs objects = fruit和fruit:metadata = stream。
手机端也能直接访问:Android 用支持 SMB 的文件管理器(如 Solid Explorer、Material Files),iOS 用系统「文件」App → 右上角「连接服务器」→ 填 smb://192.168.2.129。这是把 NAS 当家庭相册/影音库最省事的办法,不需要装任何客户端。
扩展:常用管理命令
把常用的 Samba 用户管理命令也列出来备用:
改完配置后,最常打交道的两条命令就是 testparm(检查)和 sudo service smbd restart(生效),记住这一对基本够用。
结尾
Samba 是 Linux 和 Windows 之间文件共享最成熟的方案,配置其实就"装包 + 配 conf + 建用户 + 重启"四步。配好之后,Ubuntu 上的目录就能像网络硬盘一样被全家设备访问,做下载目录共享、NAS 文件互通都很方便。
如果你是第一次配、卡在某一步连不上,优先检查防火墙放行和目录权限这两个最常出问题的地方。有问题欢迎评论区交流。
反过来的需求也很多:这台 Ubuntu 要去访问别人已经开好的 SMB 共享(比如另一台 NAS、或另一台 Windows 上共享出来的目录),那时候用到的不是 Samba 服务端,而是
cifs-utils客户端和一套挂载参数,是完全不同的一条路:在 Ubuntu 上挂载 SMB 共享:从临时挂载到开机自动挂载。
相关文章
暂无相关文章