Linux共享文件夹两种方式

共享方式一:借助vm-tools

在桌面新建一个文件夹作为共享文件夹,任意名称均可,接下来在虚拟机中执行命令:

# 安装vm-tools工具
yum -y install open-vm-tools

# 挂载共享文件夹
vmhgfs-fuse .host:/ /mnt/hgfs

执行完毕后需要在虚拟机软件中添加共享文件夹:

做完上述配置后,需要重启虚拟机:

reboot

接下来就OK了,为了排除防火墙干扰,最好直接关闭防火墙:

# 关闭防火墙
systemctl stop firewalld

# 防火墙禁止开机启动
systemctl disable firewalld

共享方式二:借助SMB

Samba是在Linux系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。 SMB(Server Messages Block, 信息服务块)是一种在局域网上共享文件和打印机的一种通信协议, 它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。 SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统,打印机及其他资源。

# 安装samba
yum install -y samba

# 添加一个名为root的samba账号,这与Linux用户的root无任何关系
smbpasswd -a root

# 设置密码
....

# 再次输入密码
....

# 启动刚才添加的samba账号
smbpasswd -e root

关于samba用户的命令如下:

# 添加 Samba 用户帐号
smbpasswd -a sambauser

# 禁用 Samba 用户帐号
smbpasswd -d sambauser

# 启用 Samba 用户帐号
smbpasswd -e sambauser

# 删除 Samba 用户帐号
smbpasswd -x sambauser

修改samba配置文件:

# 先备份一个配置文件
cp /etc/samba/smb.conf /etc/samba/smb.conf.back

# 先新建一个文件夹作为Linux下的共享文件夹
cd ~
mkdir share-folder
chmod -R 777 share-folder/

# 编辑配置文件
vim /etc/samba/smb.conf

smb.conf:

# See smb.conf.example for a more detailed config file or
# read the smb.conf manpage.
# Run 'testparm' to verify the config is correct after
# you modified it.

[global]
        workgroup = SAMBA
        security = user

        passdb backend = tdbsam

        printing = cups
        printcap name = cups
        load printers = yes
        cups options = raw

#[homes]
#       comment = Home Directories
#       valid users = %S, %D%w%S
#       browseable = No
#       read only = No
#       inherit acls = Yes

[myshare]
        comment = MyShareFolder
        path = /root/share-folder
        writable = yes
        browseable = Yes
        create mask = 0664
        force create mode = 0664
        directory mask = 0775
[printers]
        comment = All Printers
        path = /var/tmp
        printable = Yes
        create mask = 0600
        browseable = No

[print$]
        comment = Printer Drivers
        path = /var/lib/samba/drivers
        write list = @printadmin root
        force group = @printadmin
        create mask = 0664
        directory mask = 0775

共享默认会将用户的主目录共享 , 这是不安全的 , 所以将其注释掉了。

现在启动/停止/重启服务命令都是一致的:

# 启动smb服务
systemctl start smb

# 停止smb服务
systemctl stop smb

# 重启smb服务
systemctl restart smb

# 查看smb服务状态
systemctl status smb

如果 Windows 下访问 Linux 下共享目录, 提示没有权限:

1、确保 Linux 下防火墙关闭或者是开放共享目录权限

2、确保 Samba 服务器配置文件 smb.conf 设置没有问题

3、确保 setlinux 关闭 , 可以用 setenforce 0 命令执行; 默认 SELinux 禁止网络上对 Samba 服务器上的共享目录进行写操作

Samb 还需要开放下面四个端口:

UDP 137、UDP 138、TCP 139、TCP 445

云服务器文件夹共享

由于云服务器445端口不开放,所以需要修改服务器端口,也就是smb ports = 4455这一句配置:

# See smb.conf.example for a more detailed config file or
# read the smb.conf manpage.
# Run 'testparm' to verify the config is correct after
# you modified it.

[global]
	workgroup = SAMBA
	security = user

	passdb backend = tdbsam

	printing = cups
	printcap name = cups
	load printers = yes
	cups options = raw
	smb ports = 4455
[tenent-cloud]
        comment = MyShareFolder
        path = /root/tenent-cloud
        writable = yes
        browseable = Yes
        create mask = 0664
        force create mode = 0664
        directory mask = 0775

[printers]
	comment = All Printers
	path = /var/tmp
	printable = Yes
	create mask = 0600
	browseable = No

[print$]
	comment = Printer Drivers
	path = /var/lib/samba/drivers
	write list = @printadmin root
	force group = @printadmin
	create mask = 0664
	directory mask = 0775

当然也可以定义其他端口,我这里选择的端口是4455,需要在云服务器的安全组配置里进出设置开放4455端口。接下来在Windows上配置端口转发,因为Windows默认配置为445,打开管理员powershell:

# 配置端口转发
netsh interface portproxy add v4tov4 listenport=445 listenaddress=127.0.0.1 connectport=4455 connectaddress=85.80.220.107

# 删除配置的端口转发
netsh interface portproxy delete v4tov4 listenaddress=85.80.220.107 listenport=4455

上面的例子中,85.80.220.107是云服务的地址,4455是云服务的端口,接下来只需要在本地访问127.0.0.1即可访问到云服务器的服务:

如果访问到的是本地的共享,那么需要把本地的文件共享服务给关闭(必须禁用,再重启电脑):

这样电脑就等于有一个免费的网盘了。