前言

上篇文章中,将虚拟机从VMware替换为了开源KVM后,与Windows虚拟机之间的文件共享暂时还没有想到好的解决办法,经过考虑决定以最小化配置1C512M的配置搭建一个在宿主机和多台虚拟机均可直接访问的文件共享服务。

安装Samba

以CentOS为例,使用yum或者dnf安装即可,依照所使用发行版的软件安装方式安装即可。

查询软件安装

1
2
3
4
#以CentOS为例
rpm -qa | grep "samba"
#以Arch系为例
pacman -Qs samba

共享形式

匿名访问配置

Global为全局配置,Disk为共享配置。
匿名访问是不设限制的文件访问,任何能访问到共享主机的设备都可以读取或写入。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[global]
workgroup = SAMBA #工作组名称
security = user
map to guest = Bad User #此处两行为安全等级
passdb backend = tdbsam #此部分为用户后台模式

#此部分为打印共享配置,仅文件共享可以注释禁用
printing = cups #打印类型
printcap name = cups #打印机的配置文件
load printers = yes #是否开启打印机共享
cups options = raw

#此部分为文件与目录创建权限 (根据安全需求设置,我这里为公开型)
create mask = 0777 #创建文件权限为0777
directory mask = 0777 #创建目录权限为0777

[Disk]
comment = Samba #目录说明
path = /disk #共享路径
writable = yes #是否可写入
guest ok = yes #是否公开

指定用户访问

指定用户通过帐号密码访问文件夹。

用户配置部分:

1
2
3
$ groupadd samba	#创建用户组
$ useradd -g samba sambausr #创建用户
$ smbpasswd -a sambausr #创建smaba访问密码

共享文件夹操作部分:

1
2
3
以home下对应用户目录为例:
$ chcon -t samba_share_t /home/sambausr #SELiux安全上下文
$ chown -R sambausr:samba /home/sambausr #修改文件所有者和文件关联组

Samba共享配置部分:

1
2
3
4
5
6
7
8
9
10
11
[global]
workgroup = SAMBA #工作组名称
security = user
hosts allow = 10.10.10.1 #允许访问主机
passdb backend = tdbsam #此部分为用户后台模式

[Disk]
comment = Samba #目录说明
path = /home/sambausr #共享路径
writable = yes #是否可写入
guest ok = no #是否公开

用户组共享方式

懒,有人留言再来写🤣

重启服务启用文件共享

1
systemctl restart smb

访问与挂载

Windows

使用运行(Win+R),输入\\ip ,根据弹窗进行下一步操作即可。

Linux

匿名访问配置访问:

1
$  mount -t cifs //server/Folder /mnt/

用户访问配置访问:

1
$ mount -t cifs //server/Folder /mnt/ -o username=your-username

提示:提示输入密码时,匿名访问配置直接Enter,用户访问配置输入用户smb密码。

无法访问排查

(可能更新)

Firewalld防火墙

此处建议不关闭防火墙,而允许 Samba 穿越防火墙,以便外部用户可以访问 Samba 共享。

1
2
$ firewalld-cmd --permanent --add-service=samba
$ firewaldd-cmd --reload

SELinux安全上下文

在CentOS上SELinux是默认安装开启的,通常情况下都会导致Samba、FTP等应用无法访问相应目录,此处就Samba服务的解决方案如下:

1
2
3
4
5
6
#放行Samba用户Home目录权限:
$ /usr/sbin/setsebool -P samba_enable_home_dirs=1
#指定路径放行
$ chcon -t samba_share_t path
#查看目录是否开启权限
$ ls -ldZ path