admin 管理员组

文章数量: 887021

场景一:项目资料很多,在微信里传来传去很不方便,如何建立一个文件共享空间,让项目组的所有人都可以实时地查看和编辑?
场景二:windows上的磁盘空间快满了,但是linux服务器上的磁盘空间还很大,如何在windows上像利用本地磁盘空间一样利用linux服务器上的磁盘空间?
Samba服务是在linux与windows之间共享文件的最佳选择,可以轻松解决以上场景的问题。本文演示如何在linux上搭建Samba服务,以及如何用windows连接linux上的文件共享空间,使用的linux系统为Ubuntu 16.04.7 LTS,windows系统为Windows 10专业版。

一、Ubuntu安装配置Samba服务器

注意:下面的操作在root账号下进行
1、查看服务器磁盘利用情况

df -h


可以看到/home目录还有1.8T的可用磁盘空间,因此这里在/home目录下建立共享文件夹
2、依次执行以下命令
创建共享文件夹

mkdir /home/sambashare

设置共享文件夹权限

chmod 777 /home/sambashare

安装Samba服务

apt install samba

3、修改配置文件

vim /etc/samba/smb.conf

[printers]和[print$]的配置是跟打印机相关的,不用打印机的话建议都注释掉

场景一需要创建多人使用的公有共享sambashare,这里的共享名sambashare可以是别的名字;场景二需要创建私有共享homes,共享名homes只能是这个名字。在配置文件的最后面添加以下代码

[sambashare]
    path = /home/sambashare
    valid users = lifaqiang
    write list = lifaqiang
    directory mask = 0775
    create mask = 0664
[homes]
    browseable = no
    writable = yes
    valid users = %S

  第1行的sambashare为共享名,下面的5行为该共享使用的配置,可以通过这样的形式添加不同共享名的多个共享。path指定共享目录路径。valid users指定允许访问该共享的用户,如果不指定则所有用户都能访问。write list指定允许写入该共享的用户,优先级比writable高,指定的用户必须是服务器上已经存在的用户,如果不指定则所有用户服从writable。valid users和write list可以指定由逗号隔开的多个用户名。directory mask设置创建目录的权限,create mask设置创建文件的权限。browseable用来指定是否可以在资源管理器中看到该共享的图标,browseable默认为yes,如果[homes]里面browseable采用默认值,将会显示指向同一目录的两个图标,一个图标名为homes,一个图标名为登录的用户名,为了去除重复,[homes]中browseable设置成no。writable用来指定该共享路径是否可写,默认为no。
  当用户请求一个共享时,服务器将在存在的共享资源段中去寻找,如果找到匹配的共享资源段,就使用这个共享资源段。如果找不到,就将请求的共享名看成是用户的用户名,并在本地的密码文件中找到这个用户,如果用户名存在,并且用户提供的密码正确,则以这个[homes]段复制出一个共享提供给该用户。这个新的共享的名称是用户的用户名,而不是homes,如果[homes]段里没有指定的共享路径,就把该用户的家目录作为共享路径。%S是Samba的宏,表示当前共享的名称,因此,[homes]段的%S即用户名,valid users设置为%S则只有当前用户可以访问。
  除此之外,还有一些可能会用到的参数。public指定是否可以在不输入用户名和密码的情况下访问该共享路径(即匿名访问,身份为linux的nobody用户),同guest ok,默认为no。read only含义与writable相反,指定该路径是否只读,默认为yes,优先级比write list低。available指定该共享是否可用,默认为yes,适用于需要频繁开启和关闭共享的场景。
4、依次执行以下命令
修改配置文件后需要重启smbd服务使配置生效

systemctl restart smbd

将smbd服务加入到启动项,开机自动启动

systemctl enable smbd

Samba有独立的用户数据库,并且Samba的用户必须是linux服务器上存在的用户,因此需要选择linux账户添加到Samba的用户数据库并设置密码,这里的密码可以与登录linux使用的密码一致也可以不一致

smbpasswd -a lifaqiang

5、查看服务器ip,在windows上打开cmd,输入以下命令测试smbd服务是否工作正常。telnet命令与ping类似,但是ping不能指定端口号,telnet可以,下面的445就是smbd服务默认使用的端口号

telnet 10.17.140.70 445

提示telnet不是内部或外部命令,说明电脑没有安装这个功能,需在windows功能页面勾选Telnet客户端并重启才能使用该命令

如果出现以下界面,说明smbd服务工作正常

出现以下界面,说明端口被网管禁用,需要自定义一个新的端口号

测试时发现使用有线网络的电脑可以正常连接445端口,但是使用无线网络的电脑无法正常连接445端口。为了让使用有线网络的电脑和使用无线网络的电脑都能正常使用Samba服务,这里修改smbd服务使用的端口号为446,然后在windows上的445端口通过端口映射连接服务器上的446端口。如果连接445端口没有问题,那么下面第6、1步可以跳过。
6、修改配置文件并重启smbd服务

vim /etc/samba/smb.conf

systemctl restart smbd

二、windows配置

1、在windows上以管理员身份运行cmd,输入下面的命令
添加端口映射

netsh interface portproxy add v4tov4 listenaddress=127.0.0.1 listenport=445 connectaddress=10.17.140.70 connectport=446

查看端口映射

netsh interface portproxy show v4tov4

出现以下界面则添加成功

重启windows电脑使端口映射生效
2、如果添加了端口映射,可通过\\127.0.0.1查看共享

如果未添加端口映射,通过\\服务器ip地址的方式即可访问共享文件夹。双击进入文件夹,第一次访问共享文件夹需要输入用户名密码,如下图,勾选记住我的凭据重启电脑后不用输入用户名密码即可访问。如果需要删除登录信息或者用另一个用户登录,可以依次打开控制面板、用户账户、管理windows凭据,删除当前用户的登录信息,然后重启电脑。
点击确定,就可以进入文件夹,退回到上一级可以看到自己的私有共享,并且也可以直接访问

3、为了更方便访问共享文件夹,可以在windows上进行如下设置


如果未添加端口映射,请更改上图中1处的ip地址为服务器ip地址。同样的方法添加映射的网络文件夹\\127.0.0.1\lifaqiang,就可以直接在此电脑的界面里添加这两个文件夹的图标,如下图,双击即可快速进入这两个文件夹,就像在操作windows下的磁盘一样。

4、如果输入\\127.0.0.1无法访问远程文件夹,在Windows功能页面安装SMB 1.0CIFS客户端,再重启电脑一般就没问题了

本文标签: 文件共享 Linux Windows