Linux目录共享读写需按客户端类型选协议:Windows用Samba,Linux间优先NFS,KVM中Windows虚拟机推荐virtiofs;Samba须确保smb.conf中path存在、writable=yes且read only=no并设valid users=@组;NFS需检查/etc/exports的rw权限、客户端挂载参数及服务端目录SGID(chmod 2775)与UID/GID一致;同时放行防火墙端口并配置SELinux布尔值与上下文。

Linux 设置目录共享读写,核心不是“开个共享就行”,而是选对协议、配对权限、绕过常见陷阱。 Windows 客户端必须用 Samba;两台 Linux 之间优先选 NFS;KVM 中 Windows 虚拟机挂载宿主机目录,直接上 virtiofs 更稳更快。别硬套教程,先看客户端类型再动手。
samba 共享读写:Windows 连不上或只能读?检查这几点
Windows 访问失败,90% 出在 smb.conf 配置项写错或权限没兜住:
-
path = /srv/samba/shared对应的目录必须真实存在,且smbd进程能读取:运行ls -ld /srv/samba/shared,确认属组包含sambashare或nogroup,且有执行权限(drwxrwxr-x或类似) -
writable = yes和read only = no必须同时设置 —— 后者优先级更高,只写writable = yes但漏掉read only = no,Windows 仍会显示为只读 -
valid users = @sambashare是推荐写法;确保系统用户已加入该组(usermod -aG sambashare alice),再用smbpasswd -a alice单独设 Samba 密码 -
create mask = 0664和directory mask = 0775决定新建文件/目录权限;若 Windows 用户上传后文件变成-rw-------,就是这里没调 -
browsable = yes必须设,否则共享名不会出现在 Windows “网络”里,只能靠\192.168.x.xshared手动输入访问
NFS 共享读写:Linux 客户端挂载后无法写入?重点查三处
NFS 不走用户认证,权限映射靠 UID/GID 直通,出问题基本是服务端导出配置或客户端挂载参数不对:
-
/etc/exports中客户端 IP 或网段写错,比如写成192.168.1.100却实际连的是192.168.1.101;用*测试时务必加no_root_squash(仅限可信内网) - 导出选项漏了
rw,或误写成ro;同步策略建议用sync(数据安全)而非async(风险高) - 客户端挂载时没加
-o rw,或用了ro参数;正确命令类似:mount -t nfs 192.168.1.10:/share /mnt/share -o rw,hard,intr - 服务端共享目录本身权限不够:即使 NFS 允许写,如果
/share的属组没写权限(如drwxr-xr-x),Linux 客户端照样写不了
共享目录权限:chmod 777 是懒人坑,2775 + SGID 才真协作
给共享目录设 chmod 777 表面省事,实际让所有用户都能删别人文件,还破坏组继承:
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
- 用
chmod 2775 /srv/shared:开头的2是 SGID 位,保证该目录下新建文件/子目录自动继承父目录的组(如sambashare) - 配合
chgrp sambashare /srv/shared和usermod -aG sambashare user1 user2,组内成员才能自然获得读写权 - 若需防误删,再加粘滞位:
chmod +t /srv/shared—— 这样只有文件所有者或 root 才能删文件,哪怕组有写权限 - 注意:NFS 客户端 UID/GID 必须和服务端一致,否则
2775也白搭;Samba 则不依赖 UID/GID 对齐
防火墙与 SELinux:配完连不上?大概率卡在这俩地方
服务跑着、配置看着都对,却连不上 —— 很可能被系统级安全机制拦住了:
- Samba 需放行
139/tcp、445/tcp;NFS 需放行111/tcp/udp(rpcbind)、2049/tcp/udp(nfsd),还有动态端口(rpc.statd等),建议用firewall-cmd --permanent --add-service=samba或nfs - SELinux 默认阻止网络共享行为:
setsebool -P samba_export_all_ro=1 samba_export_all_rw=1开启 Samba 读写;NFS 用setsebool -P nfs_export_all_ro=1 nfs_export_all_rw=1 - 改完 SELinux 布尔值后,别忘了
restorecon -Rv /srv/samba/shared或/share重置上下文,否则权限仍不生效
真正麻烦的从来不是配哪一行,而是服务启动了、配置 reload 了、防火墙开了、SELinux 放行了,结果发现客户端用的是旧缓存凭据,或者 Windows 上 net use 挂载残留了冲突连接 —— 这些细节不清理,前面全白干。










