Linux配置Samba与Windows共享文件夹教程
作者:技术拾光时间:2026-07-03 09:01:07浏览:521
Samba共享配置:需运行smbd和nmbd服务;[global]设置workgroup、security=user、maptoguest=baduser;使用validusers与目录权限双重控制访问;SELinux添加samba_share_t标签;防火墙开放UDP137-138及TCP/UDP445端口。
在Windows连接Linux的Samba共享时,常见的问题并非配置书写错误,而是基础服务未正常运行。许多故障源于smbd未启动、nmbd被防火墙拦截,或smbpasswd中的用户未添加到系统。这三点缺一不可,否则前期配置将完全失效。

service smbd nmbd 必须同时 active (running)
不少管理员仅启动了smbd,却忽略了nmbd。Windows"网络"中无法看到Linux主机名时,通常是由于nmbd未运行,导致NetBIOS广播未能发出。
- 检查两个服务状态非常简单:执行
systemctl status smbd nmbd,两者均需显示active (running)。 - 如需一次性启用并启动服务:
sudo systemctl enable --now smbd nmbd - 若
nmbd报错,如"Address already in use",通常是由于端口137或138被占用。使用sudo ss -tuln | grep ':13[78]'可查看占用端口的进程。 - 另一个常见坑是:
nmbd对主机名有要求,不能包含下划线。例如nas_v2这种名称会导致失败。通过hostname命令确认当前名称,必要时修改/etc/hostname,然后执行sudo systemctl restart systemd-hostnamed使更改生效。
smb.conf 里 global 段不设这三项,Windows 就认不出你
仅编写共享段是不够的。[global]中的三个参数缺一不可。缺少任何一个,Windows连接时会提示0x80070035错误,或直接显示"找不到网络路径"。
workgroup = WORKGROUP:必须与Windows客户端的工作组名称一致。默认值为WORKGROUP,注意不要误写为HOME或包含空格。security = user:这是当前最稳定可靠的认证方式。security = share在Samba 4.12之后已被废弃,在Windows 10和11上基本无法连接。map to guest = bad user:该设置能在密码输错时自动将用户降级为guest访问,避免卡死弹窗报错。但需配合共享段的guest ok = yes才能生效。- 此外,建议添加
unixcharset = UTF-8和dos charset = CP936,可有效避免中文文件名乱码问题。
valid users 和目录权限必须双重满足
Samba认证通过并不等于可以读写目录。系统层权限与Samba层权限是两套独立逻辑,必须同时放行。
valid users = @sambashare:仅sambashare用户组成员才能访问。首先创建组:sudo groupadd sambashare,再将用户加入:sudo usermod -aG sambashare alice。- 共享目录的属组必须改为
sambashare:sudo chgrp sambashare /srv/samba/shared - 权限设置建议添加SGID位,确保新创建的文件自动继承所属组:
sudo chmod 2775 /srv/samba/shared。避免使用777,既不安全,在SELinux环境下也容易被拒绝。 - 若系统启用了SELinux,需为目录打标签:先执行
sudo semanage fcontext -a -t samba_share_t "/srv/samba/shared(/.*)",再执行sudo restorecon -Rv /srv/samba/shared使设置生效。
防火墙不放 137–139/445(TCP+UDP),Windows 就是连不上
此步骤为必选项,不可跳过。Samba依赖四个端口,任何一个被封锁都会导致不同症状:
- UDP 137/138:影响Windows"网络"中发现Linux主机名,由
nmbd负责。 - TCP/UDP 445:所有现代SMBv2/v3连接的通道,Windows 10和11默认仅使用此端口。
- Ubuntu/Debian系统使用UFW时:
sudo ufw allow 137:139/tcp && sudo ufw allow 445/tcp && sudo ufw allow 137:139/udp && sudo ufw allow 445/udp - RHEL/CentOS/Rocky系统使用firewalld时,直接执行
sudo firewall-cmd --permanent --add-service=samba,比手动开放四个端口更可靠。 - 切勿相信"关闭防火墙试试"的建议。临时关闭可验证问题所在,但生产环境必须精准放行所需端口,否则系统暴露于风险中。
最后提醒一个极易被忽略的组合问题:nmbd与UDP端口的关系。即便服务看似正常、TCP 445端口畅通、用户也已添加,Windows仍可能在"网络"中找不到Linux机器。此时无需重新配置smb.conf,应优先关注 systemctl status nmbd 和 firewall-cmd --list-ports | grep 137 的输出,问题往往根源在此。
