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中的用户未添加到系统。这三点缺一不可,否则前期配置将完全失效。

Linux配置Samba与Windows共享文件夹教程

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 的输出,问题往往根源在此。