Windows访问Linux共享必须用Samba,关键四步:安装Samba包、创建目录并设chmod 2775与chgrp sambashare、添加系统用户至组并smbpasswd注册、配置中同时写writable=yes和read only=no。

Windows 访问 Linux 共享必须用 Samba
如果你的客户端是 Windows(或 macOS),smbd 是唯一靠谱的选择。NFS 在 Windows 上原生不支持,强行配第三方客户端(如 NFS Client for Windows)兼容性差、权限混乱、重启后常掉挂载。
关键动作只有四步:
- 安装 samba 和 samba-common-bin(Ubuntu/Debian)或 samba + samba-client(RHEL/CentOS)
- 创建目录并设 chmod 2775,再 chgrp sambashare(组不存在就先 groupadd sambashare)
- 确保系统用户已加入该组:usermod -aG sambashare alice,再跑 smbpasswd -a alice
- 配置段里必须同时写 writable = yes 和 read only = no,否则 Windows 可能只读
Linux 之间互访优先选 NFS
NFS 不需要用户密码、UID/GID 直通、无额外协议开销,适合服务器集群、开发机传大文件等场景。但注意:/etc/exports 里写的 IP 或网段必须精确匹配客户端地址,写成 192.168.1.0/24 却用 192.168.1.100 连不上,得改成 192.168.1.0/24(rw,sync,no_subtree_check)。
常见坑:
- 忘开防火墙端口:111(rpcbind)、2049(nfsd)、20048(mountd)
- no_root_squash 别乱加——它让 root 客户端获得服务端 root 权限,等同于裸奔
- 客户端挂载时漏加 -t nfs 或没装 nfs-utils,报错 mount: unknown filesystem type 'nfs'
Samba 配置里这几个参数写错就连不上
smb.conf 看似简单,但以下几项错一个,Windows 就要么看不见共享名,要么弹密码框却死活登不进:
-
path = /srv/samba/shared:路径必须真实存在,且ls -ld /srv/samba/shared显示属组包含sambashare,否则 smbd 进程读不了 -
browsable = yes:不设这个,共享不会出现在 Windows “网络”里,只能靠\192.168.x.xshared手动输地址 -
valid users = @sambashare:用@组名比列一堆用户名靠谱;确保用户真在组里,id alice能看到sambashare -
create mask = 0664和directory mask = 0775:不设的话,Windows 上传的文件默认是0600,别人根本改不了
改完务必运行 testparm,有报错别急着重启 smbd。
KVM 中 Windows 客户机别折腾 Samba 共享
在 KVM 里跑 Windows 虚拟机,想挂主机目录?Samba 是绕远路:要配服务、开防火墙、调权限、处理凭据缓存……实际用 virtiofs 更稳更快。
操作要点:
- 虚拟机关机状态下,在 virt-manager 的“添加硬件”里选“文件系统”,驱动选 virtiofs
- 主机路径填绝对路径(如 /home/alice/share),目标路径填个标签名(如 hostshare)
- Windows 里打开“此电脑”,会自动出现一个叫 hostshare 的网络驱动器,点开就能读写
- 不依赖网络、不占端口、权限由主机文件系统直接控制,性能接近本地磁盘
SGID 目录权限、testparm 验证、no_root_squash 的危险性——这些细节不手动试一遍,很容易卡在“能看见但写不了”或“挂得上但一复制就断”。


















