本文记录如何在 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。
至此,你已经可以稳定实现虚拟机文件共享,并规避常见坑点。