Samba服务器简介
在了解了rz和sz后我们会发现rz和sz其实是通过简单的命令的方式把我们想要上传或者下载的文件去上传和下载。这样在我们实际开发中我们会觉得也很麻烦,因为我们毕竟要敲那么多东西,那我能不能通过我的鼠标,比如说把我的U盘插入我的电脑然后在U盘和我的电脑之间通过复制粘贴的方式来黏贴文件不是更快吗?所以下面我们就要给大家介绍一款服务器叫做Samba服务
什么是Samba服务
这个Samba就可以把它简单的想象成我们的Linux是一个U盘,把其中一个目录当做U盘,然后把U盘接入Windows,这样的话我就可以直接通过像访问U盘一样去复制粘贴访问了。
想象一下如果两台Windows它们俩之间AWindows想把自己的目录共享给BWindows去用,或者是把AWindows目录当成U盘接入到BWindows上,Windows会提供一个叫网上邻居的功能,那这样的话我们只需要通过“\\”这个符号,注意方向,两根反斜线。后面是不是跟我们的IP地址或我们的主机名是不是就可以访问这个Windows。假如Bwindows1.2那我反斜线就跟1.2,然后Awindows就可以访问到Bwindows。
然后在访问过后我们就可以在反斜线后找到它的共享目录。而这个共享目录相当于一个U盘似的在Awindows下可以直接操作。所以相对而言windows和windows在文件共享方面是比较简单的。那么,我们现在需求是Windows和linux,那这样的话我们都说linux和windows本身就属于同一级别的不同操作系统,所以他们俩之间操作最开始是不能通过网上邻居的,就是说因为Linux和Windows本身两家公司,Windows本身就没把Windows与Windows传递的网上邻居的网络协议给公布出来。
所以linux想要访问的是没办法的,后来linux就想那我没有办法,我windows的用户量比较多,而且大家的需求也比较也比较急,所以这样的情况下我就想能不能也开发一个协议,把linux当成一个假的windows,也完成跟windows一模一样的访问方式。那么linux该怎么做呢?linux首先考虑的应该是windows和windows共享它实际上是用一个非常重要的协议叫做SMB协议。这个协议的全名是Server Message Block,这样一个服务消息块的协议,那么这套协议linux一开始是想让微软直接公布出来直接拿来用。但是微软没有同意,后来linux那些研究人员就想那么我就通过windows和windows之间数据的包进行一个反向推导的过程,这样的话,它就不能叫SMB否则就重名了,所以它想了一个方法把S后面加个A,B后面加个A,就相当于把这个工程叫做SAMBA工程。而且通过这个SAMBA后就干脆不叫做SAMBA工程就叫做SAMBA服务了。所以SAMBA服务其实就是SMB服务,这两种只是linux想在这个协议上跟windows区别一下 ,给我们变了一个漂亮的名字,多加了两个A,应该说linux运行了SAMBA服务就相当于把这个linux当成windows了,当然是假的windows,这样的话就变成了windows跟假的windows进行数据通信了。所以这个就是我们所说的SAMBA服务,所以说很显然SAMBA服务也需要一个安装的过程。SAMBA服务首先还是要在linux下进行相应的安装配置最后让Windows进行操作它就可以了。
SAMBA的三步曲
第一个步骤就是安装,那安装是怎么来安装呢?其实安装方法是非常简单的就是我们所说的apt-get install samba这条命令,它的全名叫Samba,在安装Samba的时候它会顺带把与安装Samba有关的软件全部都给你安装进去,然后我们现在来试验一下。进入我们的虚拟机里面,我们还是通过远程登录的方式来进行操作,这样的话基本都是纯文本操作,大家可以多练习一下它的命令,首先我还是rocky用户,所以我还需要更新我的权限
如图,第一步是因为我不仅仅更新我的权限还要更新我的软件,记住Samba这个名字,点击回车键,然后它开始读取数据库并且开始安装我们相应的软件包,由于Samba服务比较多比较大所以在下载过程中可能会有些慢。
然后因为我已经下载好之后所以很快的安装完成,那安装完后我们来看看最后两句话,因为很多时候出来的东西我们看不懂不过没关系,我们一般来说关心一下后面的情况,比如我们现在来看,它有两个start或者是running的意思,也就是我安装完成之后它自动启动了两个东西,一个叫smbd一个叫nmbd,是什么意思呢?很显然d这个后缀代表服务很好理解,说明Samba其实是两个服务的,一个叫做smb,就是说它相当于我们Samba的真正的服务,因为前面我们说过Samba中添加的两个a是没有的真正的就是Smb。然后还有一个服务叫做nmb,那这两个服务共同构成Samba的服务,所以说Samba的安装应该是比较简单的。
那下面我们说在使用任何服务是时候都要做几个步骤:
第一个是安装,第二就是配置,什么叫做配置呢?就是说我们服务器它是怎么工作的,我们需要给它一个配置文件,当你把这个配置文件修改成你想要的的时候,那我们并没有完成,因为服务器还是按照原来的配置去执行的,所以我们第二步在配置完后还有个步骤就是重启。所以说任何一个服务它都是三部曲先安装在修改配置然后重启服务,基本上是这样三个步骤,那下面我们就来看,学任何服务第一件事就是要记得服务的配置文件在哪儿,然后对这个配置文件是怎么修改的,这是我们学习任何服务的主线,也就是我们以后看到的很多后期会用到的服务它思路都是一模一样的。
Samba服务器的配置
Samba服务的配置文件在这个目录下,叫做/etc/samba/smb.conf。这个目录如果说我们安装的不是Ubuntu,那可能目录就不是这个名字了,它可能会在其他目录,所以说到底这个目录在哪儿跟我们安装的Ubuntu发行版本是有关系的,但是没有关系如果大家安装的不是Ubuntu那就可以去网上搜索一下,你的那个发行版本安装Samba服务的那款配置文件在哪里,一般来说都有介绍,所以是比较好找到的。
下面我们来进入一下/etc/samba/smb.conf目录下,看它里面有什么东西:(bak_smb.conf是我自建的,下面将为什么自建)
如图,我们用ls看出etc/samba/smb.conf目录下有哪些东西,里面有两个文件其中一个文件叫做.conf,这个文件其实是我们最关心的,那么这种文件一般来说都是我们服务的配置文件,所以你想要学一个服务配置文件是最主要的,但是我们现在说一下,因为我们现在所要培养嵌入式工程师而不是Linux服务器的管理人员,所以对于这个服务我们不要求大家把每一个配置选项都记得很清楚,因为意义不大,我们更多的还是希望大家去掌握一些嵌入式的方法性,服务可能会在你们以后公司里的网管,他应该会帮你们把这些服务都搭好,所以我们在这儿只需要学习了解一些简单的东西就可以。然后怎么做呢,在做这个之前我们还需要做一件事情,就是把smb.cont这个文件备份一下,因为如果你不备份就很有可能出现一种问题就是万一这个文件改错了或者是改了之后启动不了,很有可能是你的语法写错了,然后我们就可以借鉴一下我们之前备份的文件。所以我们需要cp一下,但是在cp之前要加上sudo因为我们可能涉及到一个目录文件的更新。
如图,我一般把备份名字写的是bak-后面文件名一模一样,这样比较容易找到,当然这是根据自己的个人习惯而言。点击回车键后我们会发现已经包含了备份文件。下面我们来看一下,关于smb.conf我们需要修改成什么,而改smb.conf这个东西恰好就需要进行smb配置的重要选项,而Samba配置的主要配置是,“配置需要共享哪个目录,以及这个目录的访问权限”这句话怎么理解呢?因为你已经把Linux当成一台假的Windows电脑了,所以哪个目录要共享出来你要告诉我然后这个目录是只读的还是可读可写的访问你也要告诉我,这样来说我的那台Windows就相当于可以访问Linux这个U盘了。所以服务器的配置重点就两个事情,你要共享谁还有共享的权限就可以了。然后我们来看看这个smb.conf权限怎么加入“配置需要共享哪个目录,以及这个目录的访问权限”这两个选项。我们还是用vi去编辑它然后点击回车键:(其实图是盗别人的,因为我的电脑已经安装好了,为了更加详细的讲解)
如图,这里面文件比较多,如果有兴趣可以去网上搜索一下关于Samba配置的文章,它里面可以跟上图每一个选项对应的代表什么意义都有个解释,当然你可以去记一下它,但是我们这儿只是一个初步的理解所以不建议大家把它记得特别深,我们只需要知道怎么使用就可以了。然后我们把它移到最后去添加一个自己的东西就可以了,然后我们通过vi跳到低端敲“i”插入,我们会看见下面有个警告:正在修改一个只读文件,因为我现在是rocky用户去操作Samba服务,很显然会改不了因为这是一个系统中比较关键的服务,所以我们还是需要sudo一下,然后在进行敲“i”就没有问题了。下面我们来看如何去增加一个共享的目录呢?根据Samba这个共享有个语法大家注意一下:
如图,图中的方括号就是增加一个新功能的语法,也就是想增加一个新功能就增加一个新的方括号,方括号里就是你以后想产生的共享名称,比如说我们叫做rocky share,就相当于这个给别人看的,你共享的名字叫什么。然后我们只知道它的名字是什么,里面什么东西我们并不知道,所以我们还需要以上面图片中的方括号内容为中心节点,后面展开对这个节点的一些描述。有哪些描述信息呢?
如图,上面节点中的comment我们把它理解为一个字符串,相当于一个我们在访问时候的一个标题的感觉,当然这个标题可以随便写,只有是一般的字符串就可以,所以我们就按照它上面的字符串的形式去写为my share,下面还有一个我们刚刚说过我们应该把那个目录共享出去呢?图上的path这个变量就非常重要了,这个就告诉我们最终是共享给谁的,当然这个名字没必要也叫rocky share,你可以共享任何目录,只是它给别人看的是rocky share 实际上访问内部是由path这个选项来决定的,一般来说我们建议把这个path放到你开的那个目录权限就可以,比如说我们现在是/home/rocky/lab我们随便新建了一个目录叫lab,比如我们的一些实验代码放在这里面,这就是/home/rocky/lab目录,然后这只是把path设置了,但path是什么权限呢?在Samba中我是以什么形式去访问这个目录的?
Read only 这个单词是只读但是很显然我们想要上传或下载我们的代码这个单词对其没有任何意义,所以我们需要做一个writable这样的选项把它等于yes,这样的话我们这个目录已经具备可写,但是光具备可写是不完全的还有一个选项是browseable也就是说可不可以浏览当然我们会选择yes,其实这里面最主要的就是path和writable这两个选项,其他选项也没什么,所以大家对Samba的掌握这几个选项就够了,如果大家还有兴趣想在去深入理解,可以去网上查一下还有什么样的选项,因为特别多,我们作为初学阶段也不建议大家去记太多,这样我们的修改配置文件就完成了。剩下我们按照这个配置文件在更新一下就可以了。
Samba的用户权限
在Linux中本身就有个登录用户这样的一个概念,那Samba有没有呢?Samba和Linux有什么关系呢?Samba也有一个叫做登录用户的概念,相当于这两款软件都有一个叫做登录用户的概念,Samba在设计中想到如果说我自己需要一个用户名和密码登录但我跟Linux有什么关系,如果跟Linux的用户名一模一样那么会导致比如说:
Linux登录用户有个a用户,它的密码是123而Samba跟Linux是共享的话那么它的登录用户也是a,密码是123,那么会造成一个问题,Windows访问Linux是通过Samba,那么这样的话Windows就已经知道Linux的用户名和密码了。所以说这样来说就非常不安全,如果Windows能够登录那就也可以登录Linux,也就是说它不仅可以访问你的共享文件夹也可以访问其他任何文件夹,因为它具备这个登录权限,它就可以跑到你这个机器里面直接操作了。而Samba就相当于泄露了这个密码。所以说为了解决这样的问题,Samba就设计了这样一套方案:
如图,Samba设计两个表也就是上方的两个四边形,四边形中的椭圆代表二者的密码。左边四边形就是本身Linux登录的表,那Samba登录就没有选择共享左边这个表而是选择备份了一份也就是右边的四边形。
访问Samba服务器
在我们的开始菜单中有一个运行命令,运行命令中你直接敲反斜线就可以了,如果你觉得不想敲,你也可以在我的电脑那个上面那个框,这两个反斜线也是一样的,敲的ip地址怎么确定,那很显然,我们就只需要确定。
如图,确定一下地址,如果你们是第一次登陆,在这个地方就会让你稍等一下,可能会弹出一个框,在这个框就输入你的用户名和密码,你到时候就把你刚才设置那个用户名和密码打进去就可以了。
然后你可以发这个地方就有个lilin_share,就说明我们其实已经刚才那个方括号里的名字给共享出来了,那共享目录是谁呢?当然我们在双击是进不去的。访问不了,可是为什么呢?刚才我们在设置这个smb.com这个文件的时候,我们是不是把/home/rocky/lab这个目录给共享出去,但是实际上我们没有这个目录,所以我们来看那怎么办?(因为我的电脑已经安装上了,所以这个是盗别人的图)
如图,我现在回到这个/home/lilin/lab(这个目录就是之前我们设置的目录)目录下mkdir lab创建这个lab目录,然后我们进去lab看一下,lab里面肯定没有东西所以我们现在还是去随便创建一些新的文件。比如说123.txt,这个文件我们随便写几个数字,比如111222333。然后退出,我们看看它能不能看到。与之前一样,我们还是先运行一下然后点击双击,这个时候大家可以看到刚刚创建的123,和里面的内容都可以看到了,并且是一模一样的。(名字不影响)(进入root才能写入)
如图,在网络位置有个Z盘我们可以点击双击进去看到123,相当于Samba服务把Ubuntu当做一个U盘通过网络连接我们的Windows,那这样我就可以点击右键复制粘贴去操作。在这个地方我们同样也可以新建新文件,比如我在这儿新建一个新文件abc点击回车输入内容hello world ,然后我们在Linux的lab目录下ls查看一下也有一个abc.txt文件,然后我们输入cat这个命令也可以去查看一下回车后我们可以看到abc的内容是我们刚才敲hello world;