玩转WSL-用Samba服务替代Win10原生的文件共享

DiaoShiYuan
• 阅读 36276

玩转WSL-用Samba服务替代Win10原生的文件共享

习惯了Linux系统的人们,肯定觉得Samba服务更加灵活和方便,那如何在Windows系统上搭建高效的Samba服务呢?本文介绍了通过WSL在Win10系统上,搭建Samba文件共享服务。

背景是家里只有一个台式机,一方面家里人偶尔使用,另一方面,它是家里的数据中心,挂载了多块硬盘。所以系统用的是Windows10,但是为了方便灵活得进行文件共享,一直考虑搭建Samba服务。达到此目的的方案有多种,可以考虑用虚拟机,例如:VMWare、VirtualBox、Hyper-V,也可以考虑使用CygWin,因为Windows10提供了WSL,所以本文介绍了另一种方式,也是运行效率比较高的一种方式,使用WSL搭建Samba服务。

背景知识

Windows文件共享服务

使用网络对外提供文件访问服务,现在广泛用于局域网内部文件的共享,例如:小米盒子、手机、PC机、包括Mac,通过139或445端口。

  • 139 - 早期Windows的SMB运行于NBT(NetBIOS over TCP/IP)上,使用139端口
  • 445 - Windows2000及以上版本,SMB可以直接运行与TCP/IP上,使用445端口,效率更高

对不同版本的Windows做了抓包测试,发现WinXP只访问139端口,Win7同时访问139与445端口,Win10只访问445端口,测试结果如下:

Windows10
玩转WSL-用Samba服务替代Win10原生的文件共享
玩转WSL-用Samba服务替代Win10原生的文件共享

Windows7
玩转WSL-用Samba服务替代Win10原生的文件共享
玩转WSL-用Samba服务替代Win10原生的文件共享

WindowsXP
玩转WSL-用Samba服务替代Win10原生的文件共享
玩转WSL-用Samba服务替代Win10原生的文件共享

WSL(Windows Subsystem for Linux)

是在Windows10系统上,对Windows内核进行了封装,使其可以直接支持ELF格式的Linux可执行程序,感觉有点像GNU/Windows。
现在基于WSL,已经有了多个Linux发行版,包括Ubuntu、Debian、Suse、Kali等,能够非常方便得在Windows里面运行Linux发行版,学习和使用各种Linux工具,同时也能够将Linux里面各种服务无缝集成到Windows环境中,例如:Samba服务、SSH服务等

Samba服务

为了实现UNIX、Linux等非Windows能够访问Windows的文件共享资源,之前有个大牛将SMB(Server Message Block)协议进行了逆向分析,然后根据逆向分析的协议开发了一套开源软件Samba,可以让UNIX、Linux、Mac等系统能够与Windows之间进行文件共享。目前最新的Samba甚至可以提供AD、DC等服务。

总体方案

根据以上背景知识,在Windows10上通过WSL搭建Samba服务的方案如下:

  1. 释放Windows占用的139,445端口
  2. 安装WSL和Ubuntu发行版
  3. 安装Samba服务,并且配置
  4. 更改防火墙配置
  5. 最后测试

实施步骤

释放Windows占用的139,445端口

释放139端口
  • 安装完毕的Windows10系统,默认情况下会监听139与445端口,通过netstat -a|findstr LISTENING可以查看:
    玩转WSL-用Samba服务替代Win10原生的文件共享
  • 禁用NetBIOS over TCP/IP,通过如下操作禁用,在“更改适配器设置”界面,双击对应网卡,打开“以太网状态”界面:
    玩转WSL-用Samba服务替代Win10原生的文件共享
  • 点击“属性”打开“以太网属性”界面:
    玩转WSL-用Samba服务替代Win10原生的文件共享
  • 选中“TCP/IPv4”项目,点击“属性”,打开“TCP/IPv4属性”界面:
    玩转WSL-用Samba服务替代Win10原生的文件共享
  • 点击“高级”并选中“WINS”页签,勾选“禁用TCP/IP上的NetBIOS”:
    玩转WSL-用Samba服务替代Win10原生的文件共享
  • 点击“确定”以后生效,如果有多块网卡,每块网卡都要按照如上步骤操作,操作完毕以后,还是通过netstat命令进行查看,发现139端口已经不再监听。
    玩转WSL-用Samba服务替代Win10原生的文件共享
释放445端口
  • 通过“WIN+R”打开运行窗口,输入:services.msc,打开服务管理界面:
    玩转WSL-用Samba服务替代Win10原生的文件共享
  • 找到Computer Browser服务,双击该服务打开属性界面,将“启动类型”修改为禁用,并且直接点击“停止”:
    玩转WSL-用Samba服务替代Win10原生的文件共享
  • 找到Server服务:
    玩转WSL-用Samba服务替代Win10原生的文件共享
  • 双击Server服务,打开属性界面,将“启动类型”修改为禁用,并且直接点击“停止”:
    玩转WSL-用Samba服务替代Win10原生的文件共享
  • 设置完毕以后重启系统。
  • 重启完毕以后,再通过netstat -a|findstr LISTENING命令检查端口使用情况,发现445端口已经释放成功。
    玩转WSL-用Samba服务替代Win10原生的文件共享

安装WSL和Ubuntu发行版

  • 在“程序和功能”管理界面,点击“启用或关闭Windows功能”,在“Windows功能”列表中,勾选“适用于Linux的Windows子系统”(注意:不同的Windows版本可能名字有所差别,我试验的是17134.191版本)
    玩转WSL-用Samba服务替代Win10原生的文件共享
  • 重启系统,然后打开“Microsoft Store”应用商城,在搜索栏里面输入wsl
    玩转WSL-用Samba服务替代Win10原生的文件共享
  • 选择搜索结果中的Ubuntu 16.04(其他发行版应该也可以,本次试验的是Ubuntu),并且进行安装:
    玩转WSL-用Samba服务替代Win10原生的文件共享
  • 安装过程比较快,得益于家里的宽带:
    玩转WSL-用Samba服务替代Win10原生的文件共享
  • 安装完毕以后在“开始菜单”可以找到Ubuntu:
    玩转WSL-用Samba服务替代Win10原生的文件共享
  • 点击图标打开控制台,也可以通过“运行”界面,先打开“CMD”窗口,再通过bash命令进入Ubuntu的命令行模式:
    玩转WSL-用Samba服务替代Win10原生的文件共享

安装Samba服务,并且配置

安装Samba服务:
  • 先升级apt-get工具,命令:sudo apt-get update
    玩转WSL-用Samba服务替代Win10原生的文件共享
  • 安装samba软件包,命令:sudo apt install samba
    玩转WSL-用Samba服务替代Win10原生的文件共享
配置samba服务:

这里只是一个配置示例,用最简单的配置让服务跑起来,如果需要深入了解samba服务的配置,建议去网上找更多的攻略。

  • 打开配置文件,并进行编辑:sudo vi /etc/samba/smb.conf,这里配置了一个用户私有目录homes,以及一个所有人可读写的共享目录share,对应windows上的目录分别是c:\private\<用户名>,以及c:\share
    玩转WSL-用Samba服务替代Win10原生的文件共享

具体配置文件内容如下:

[global]
    workgroup = WORKGROUP
    server string = jamieli-vm
    log file = /var/log/samba/log.%m
    log level = 0
    max log size = 1000
    security = user
    map to guest = Bad User
    passdb backend = smbpasswd
    smb passwd file = /etc/samba/smbpasswd
    username map = /etc/samba/smbusers
    guest account = nobody
    os level = 64

[homes]
    comment = user private
    path = /mnt/c/private/%u
    read only = No

[share]
    comment = home share
    guest ok = Yes
    path = /mnt/c/share
    read only = No
    public = Yes
  • 写好配置文件,因为是user安全模式,所以需要添加一个smb用户,命令:sudo smbpasswd -a jamieli,并输入密码:
    玩转WSL-用Samba服务替代Win10原生的文件共享
  • 启动smbd服务,sudo service smbd start
    玩转WSL-用Samba服务替代Win10原生的文件共享
  • 在Windows的CMD窗口查看端口暂用情况,发现139与445被smbd服务占用了:
    玩转WSL-用Samba服务替代Win10原生的文件共享
  • 通过Windows本地的资源管理器,输入本机IP地址,可以访问到共享目录:
    玩转WSL-用Samba服务替代Win10原生的文件共享
  • homes目录中,创建一个test目录,可以看到对应c:\private\jamieli目录中,多了一个相同的目录:
    玩转WSL-用Samba服务替代Win10原生的文件共享
  • 但是通过另外一台机器访问,发现访问失败,原因就是防火墙的设置问题,下一节我们讲下如何配置防火墙:
    玩转WSL-用Samba服务替代Win10原生的文件共享
    玩转WSL-用Samba服务替代Win10原生的文件共享

更改防火墙配置

  • 在“运行”界面输入:wf.msc,启动防火墙配置界面,选中“入站规则”菜单,右侧点击“新建规则”:
    玩转WSL-用Samba服务替代Win10原生的文件共享
  • 在“新建入站规则向导”界面中,选中“端口”:
    玩转WSL-用Samba服务替代Win10原生的文件共享
  • 选择“TCP”,并且输入端口“139,445”:
    玩转WSL-用Samba服务替代Win10原生的文件共享
  • 选择“允许连接”:
    玩转WSL-用Samba服务替代Win10原生的文件共享
  • 起名为“samba服务”,点击“完成”:
    玩转WSL-用Samba服务替代Win10原生的文件共享

最后测试:

  • 在Mac下面进行访问测试,在Finder界面下使用“CMD+K”,打开“连接服务器”界面,输入之前配置的服务器地址:
    玩转WSL-用Samba服务替代Win10原生的文件共享
  • 输入通过smbpasswd命令添加的SMB账户与密码:
    玩转WSL-用Samba服务替代Win10原生的文件共享
  • 成功访问通过WSL搭建的Samba服务,此时关闭Ubuntu窗口没有任何影响,服务在后台会继续运行:
    玩转WSL-用Samba服务替代Win10原生的文件共享

总结

通过该服务配置的过程,大体了解了WSL的使用,通过该方式也可以在Windows上部署SSH等服务,对于熟悉Linux系统的人员来说是一大福音。
同时通过一些工具,也可以将这些服务包装成Windows的Service,Windows启动的时候自动加载这些服务。
欢迎各位看官互相交流,Email:jamieli@vip.qq.com,WeChat:jamieli

参考

NetBIOS over TCP/IP
Windows Subsystem for Linux Documentation

点赞
收藏
评论区
推荐文章
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
3年前
OpenWrt 对外网开放vsftp服务和samba服务
对WAN开放vsFTPOpenWrt默认启动了vsftp服务,在Luci上没找到配置界面,但是后台是有这个服务的,如果在Openwrt的lan下,可以直接使用FileZilla之类的客户端连接.其配置文件位于/etc/vsftpd.conf如果需要对wan提供服务,需要做以下设置:1\.修改/etc/v
Stella981 Stella981
3年前
CentOS 7创建Samba共享目录
1\.安装Samba服务yum y install samba 查看yum源中Samba版本yum list | grep samba 查看samba的安装情况rpm qa | grep sambaSamba服务器安装完之后,会生成配置文件目录/etc/samba,/etc/samba/smb.conf
Stella981 Stella981
3年前
Linux samba服务器配置
samba服务器配置配置文件1./etc/samba/smb.confsamba的主要配置文件,可设置全局参数和共享目录的参数2./etc/samba/lmhosts通过hostname来访问samba:3./etc/samba/smbusers由于windows和linux里的管理员和访客账号名
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Wesley13 Wesley13
3年前
ubuntu 12.04(64位)下搭建android5.0开发环境 (win7 && 虚拟机)
本文介绍在WIN7操作系统通过在虚拟机VMWARE和Ubuntu下搭建了一个android5.0编译环境的操作过程,包括LINUX系统安装,JDK安装,samba服务和ssh服务安装。因为要下载补丁,需要网络支持,要能够上网。电脑要64位cpu,安装好win7操作系统。第一步:下载ubuntu地址:LINU
Stella981 Stella981
3年前
Linux设置文件夹共享
linux环境实现文件夹共享,常用的方法就是安装Samba,以下就是实现文件夹共享的步骤:一、安装Samba  yumyinstallsambasambaclientsambacommon二、修改Samba配置文件1.配置内核参数 ulimit
Wesley13 Wesley13
3年前
FTP服务搭建配置笔记
1、什么是文件共享服务?简单来说就是文件域存储块设备可以共享给他人使用。1.1实现文件共享服务的三种方式1.FTP:属于应用层服务,可以跨平台使用2.NFS:属于内核模式,不可以跨平台使用3.Samba:可以跨平台使用1.2实现存储设备域服务器连接的三种方式1.DAS:连接磁盘2.
Stella981 Stella981
3年前
Samba的主配置文件
Samba的主配置文件为/etc/samba/smb.conf主配置文件由两部分构成GlobalSettings(55245行)  该设置都是与Samba服务整体运行环境有关的选项,它的设置项目是针对所有共享资源的。ShareDefinitions
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
5个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(