CentOS 7.9 虚拟机文件夹共享到局域网(Samba 实战 + 常见踩坑)

本文记录如何在 CentOS 7.9 虚拟机上,将目录共享给局域网其他机器访问(如 Windows / Linux),并总结实际过程中常见的问题与解决方案。


一、实现目标

将虚拟机中的某个目录(如 /app)共享出来,使局域网内其他设备可以通过网络访问:

\\虚拟机IP\share

二、推荐方案:Samba 文件共享

Samba 是 Linux 上实现 Windows 文件共享(SMB 协议)的标准方案,兼容性最好。

1. 安装 Samba

yum install -y samba

2. 创建共享目录

mkdir -p /app
chmod -R 777 /app

3. 配置共享

编辑配置文件:

vi /etc/samba/smb.conf

在文件末尾添加:

[share]
path = /app
browseable = yes
writable = yes
valid users = root

4. 添加 Samba 用户

smbpasswd -a root

5. 启动服务

systemctl start smb
systemctl enable smb

6. 放行防火墙

firewall-cmd --permanent --add-service=samba
firewall-cmd --reload

三、客户端访问

Windows 访问

\\192.168.168.180\share

如果需要指定用户:

net use \\192.168.168.180\share /user:root

如果登录失败,清理缓存:

net use * /delete /y

四、常见踩坑总结(重点)

1. 能看到共享但无法打开(最常见)

现象:

  • 可以访问 \\IP\share
  • 双击提示无权限

原因:

  • SELinux 拦截访问

验证:

setenforce 0

如果关闭后可以访问,说明就是 SELinux 问题。

正确解决:

chcon -R -t samba_share_t /app

或者永久方案:

semanage fcontext -a -t samba_share_t "/app(/.*)?"
restorecon -Rv /app

2. root 登录失败

原因:

  • Samba 用户和 Linux 用户是两套体系

解决:

smbpasswd -a root

3. 被当成 guest(匿名用户)

现象:

  • 输入 root 也无法生效

原因:

  • 配置了 public = yes

解决:

  • 删除该配置
  • 使用 valid users 控制访问

4. 目录权限问题

检查:

ls -ld /app

测试:

chmod -R 777 /app

5. 虚拟机网络模式错误

必须使用:

  • 桥接模式(Bridge)

否则:

  • NAT 模式默认无法被局域网访问

6. Windows 缓存问题

现象:

  • 改了配置仍然无法访问

解决:

net use * /delete /y

五、最佳实践建议

1. 不建议使用 root 作为共享用户

useradd dev
passwd dev
smbpasswd -a dev

然后配置:

valid users = dev

2. 推荐使用独立目录

mkdir -p /data/share
chmod -R 777 /data/share

避免和系统目录冲突。


六、总结

在 CentOS 7 上做文件共享,问题通常不在 Samba 本身,而在系统安全机制:

  • 网络问题(桥接模式)
  • 用户认证(Samba 用户)
  • 文件权限(chmod)
  • SELinux(最常见问题)

一句话总结:

能连但打不开,优先查 SELinux。


至此,你已经可以稳定实现虚拟机文件共享,并规避常见坑点。

发表回复