1.背景

通常情况下,我们工作用的电脑都是Windows系统,而进行开发的服务器大都是Linux系统。有时需要在两个系统之间频繁的拷贝数据,尽管有 WinSCP 这样的工具来使用,但是总体来说,效率都比较低。

一种更好的方式就是两个系统之间能共享文件夹,这样对于习惯在Windows上使用source insight编辑,而在Linux系统中进行编译的同学来说,简直就是福音。Samba的出现,成功的解决了这个问题。

2. 介绍

Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。

SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。

SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。通过设置“NetBIOS over TCP/IP”使得Samba不但能与局域网络主机分享资源,还能与全世界的电脑分享资源。

Samba最大的功能就是可以用于Linux与windows系统直接的文件共享和打印共享,Samba既可以用于windows与Linux之间的文件共享,也可以用于Linux与Linux之间的资源共享。

组成Samba运行的有两个服务,一个是SMB,另一个是NMB。

SMB是Samba 的核心启动服务,主要负责建立 Linux Samba服务器与Samba客户机之间的对话, 验证用户身份并提供对文件和打印系统的访问,只有SMB服务启动,才能实现文件的共享,监听139 TCP端口。

NMB服务是负责解析用的,类似与DNS实现的功能,NMB可以把Linux系统共享的工作组名称与其IP对应起来,如果NMB服务没有启动,就只能通过IP来访问共享文件,监听137和138 UDP端口。

3. 配置

以搭建免密码Samba服务器为例

安装Samba应用

sudo yum -y samba samba-client

关闭防火墙和SELinux

sudo systemctl stop firewalld.service #停止防火墙服务

sudo systemctl disable firewalld.service #关闭防火墙

sudo setenforce 0 #设置SELinux成为permissive模式,关闭SELinux;

如果设置成1,将开启SELinux,并设置成enforcing模式

启动并查看Samba

sudo systemctl start smb nmb

sudo systemctl status smb nmb


配置Samba服务

需要修改一下/etc/samba/smb.conf配置文件,先进入/etc/samba文件夹下,将原有的smb.conf文件进行备份: cp sam.conf sam.conf.org

编辑sam.conf文件,修改成以下内容:


global为全局设置:

workgroup:设定Samba Server所要加入的工作组或者域,Windows默认为工作组名称为WORKGROUP

server string:设定Samba Server的注释

security:设定Samba Server的验证方式,一共有四种方式,安全性从低到高为:share、user、server、domain

map to guest:设定访问方式

shareWins为共享显示的文件夹名字:

path:共享文件夹路径

public:指定该共享是否允许guest账户访问

writable:是否可写

create mask:创建文件的权限,当从Windows拷贝文件到共享文件夹时,从Linux得到的文件权限

directory mask:创建文件夹的权限,与create mask类似

read only:是否可读

browseable:是否可浏览

guest ok:同public,是否支持免密访问

guest only:是否只支持guest访问

创建共享文件夹,并设置权限

mkdir /home/xxxx/shareWins

sudo chmod 777 /home/xxxx/shareWins

sudo chmod 777 /home/xxxx/

修改目录的权限,同时也将上一级的目录权限进行修改

重启Samba服务

sudo service smb restart

Windows访问共享文件夹

假设IP地址为:10.31.32.33, 在运行框中输入\\10.31.32.33,就能访问对应的文件夹了: