zoukankan      html  css  js  c++  java
  • Linux新手随手笔记2.2-使用Samba和NFS实现文件共享

    SMB-server  (Samba)

    Samba是个桑巴舞,是舞蹈的名字。

    Linux系统和Windows系统共享。

    SAMBA文件共享服务

    下面我们开始做实验

    先安装samba软件包yum -y install samba

    然后我们配置程序的主配置文件。

    配置文件后缀一般都是conf.

    300多条。那么我急继续老办法。

    这里分号开抬头的也是注释,然后-v是反选。然后写入到sam.conf,因为我们开头给他原来的改名了,然后我们会发现还有好多空行也很烦人,那么我们也可以这么做。

    再加一个grep  -v "^$"这代表就是一个空行。

    我们就会看到都过滤出来了。

    然后我们来编辑这个配置文件

    可以看出来我们原来320行的内容,现在只剩下了20行,是不是就很爽了。

                                                Samba服务程序中的参数以及作用

    [global]   #全局参数。
      workgroup = MYGROUP #工作组名称
      server string = Samba Server Version %v #服务器介绍信息,参数%v为显示SMB版本号
      log file = /var/log/samba/log.%m #定义日志文件的存放位置与名称,参数%m为来访的主机名
      max log size = 50 #定义日志文件的最大容量为50KB
      security = user #安全验证的方式,总共有4种
      #share:来访主机无需验证口令;比较方便,但安全性很差
      #user:需验证来访主机提供的口令后才可以访问;提升了安全性
      #server:使用独立的远程主机验证来访主机提供的口令(集中管理账户)
      #domain:使用域控制器进行身份验证
      passdb backend = tdbsam #定义用户后台的类型,共有3种
      #smbpasswd:使用smbpasswd命令为系统用户设置Samba服务程序的密码
      #tdbsam:创建数据库文件并使用pdbedit命令建立Samba服务程序的用户
      #ldapsam:基于LDAP服务进行账户验证
      load printers = yes #设置在Samba服务启动时是否共享打印机设备
      cups options = raw #打印机的选项
    [homes]   #共享参数
      comment = Home Directories #描述信息
      browseable = no #指定共享信息是否在“网上邻居”中可见
      writable = yes #定义是否可以执行写入操作,与“read only”相反
    [printers]   #打印机共享参数
      comment = All Printers  
      path = /var/spool/samba #共享文件的实际路径(重要)。
      browseable = no  
      guest ok = no #是否所有人可见,等同于"public"参数。
      writable = no  
      printable = yes

    最后一列printers是共享打印机参数,我们这里没有,给他删掉。

    然后我们看一下homes是共享出去每个用户家目录,不太安全,删掉

    然后我们看到有用得信息就这么9行

    然后我们说一下这些参数作用。

    1.[global]       共享的名称

    2.workgroup = MYGROUP    共享的用户组

    3.server string = Samba Server Version %v   共享出去的信息,%v是让别人知道我们服务器的版本

    4.log file =   /var/log/samba/log.%m                定义日志文件的存放位置与名称,参数%m为来访的主机名

    5.max log size = 50                                     定义日志文件的最大容量为50KB,就是说50K保存一个

    6.security = user                 安全验证的方式,总共有4种      

    7.passdb backend = tdbsam       定义用户后台的类型,共有3种

    然后配置共享资源

                                                  用于设置Samba服务程序的参数以及作用

    参数 作用
    [database] 共享名称为database
    comment = Do not arbitrarily modify the database file 警告用户不要随意修改数据库
    path = /home/database 共享目录为/home/database
    public = no 关闭“所有人可见”
    writable = yes 允许写入操作

    第1步:创建用于访问共享资源的账户信息。在RHEL 7系统中,Samba服务程序默认使用的是用户口令认证模式(user)。这种认证模式可以确保仅让有密码且受信任的用户访问共享资源,而且验证过程也十分简单。不过,只有建立账户信息数据库之后,才能使用用户口令认证模式。另外,Samba服务程序的数据库要求账户必须在当前系统中已经存在,否则日后创建文件时将导致文件的权限属性混乱不堪,由此引发错误。

    pdbedit命令用于管理SMB服务程序的账户信息数据库,格式为“pdbedit [选项] 账户”。在第一次把账户信息写入到数据库时需要使用-a参数,以后在执行修改密码、删除账户等操作时就不再需要该参数了。pdbedit命令中使用的参数以及作用如表

                                                       用于pdbedit命令的参数以及作用

    参数 作用
    -a 用户名 建立Samba用户
    -x 用户名 删除Samba用户
    -L 列出用户列表
    -Lv 列出用户详细信息的列表

    现在在我们本地有这么一个用户linuxprobe ,必须是要存在的一个用户。然后我们将这个用户给他加入到这个samba的数据库里面,做一个验证,-a代表我们第一次加就可以了,把这个用户加入到数据库里面,也就是建立samba用户。-u代表用户的名称。然后我们设置一下专门给他验证samba服务的这么一个密码。

    然后我们给他创建一个共享目录database,然后再给他777权限,让其他用户也可以进行操作。

    如果你感觉不够安全的话就给他设置一下所有组和所有者。

    接下来别忘了SELinux会限制我们的行为,所以我们要给他把域设为允许。

    然后我们过滤出来之后用setsebool 命令给他修改为on,-P是永久生效。其中samba_enable_home_dirs是代表开启我们用户的访问权限。

    然后现在我们创建出来自己的共享信息了,那么接下来我们再回到配置文件。

    说一下这些新加的注释的作用:

    [database] 挂载的名称,大家注意,这个名称不是没有用,我们待会挂载设备的时候就是用的这个名称,如果你写了其他的,那么一会要注意也挂载设备名称也是你写的那个。

    comment = 你可以对这个共享用一段话来描述。

    path = 定义我们的目录,就是我们刚才创建的共享目录,那里写的什么这里就写什么。

    public = no 是否是公开模式,我们选择no,因为我们这里希望是一个账号密码的验证,不想公开

    writable = yes 是否能进行写入,我们选择可以。

    然后我们保存退出重启smb服务并且加入开机启动项。

    这样就完了么,并没有,我们看一下虚拟机和个人电脑通不通。

    是通的,那么好。我们准备第二台虚拟机。

    我们接下来测试用Windows访问Linux    Linux访问Linux的测试,进行跨平台的实验。

    我们发现报错了。

    那么我们找一下错误,先试试防火墙吧,我们执行一下我们的iptables -F

    然后我们再试一下,果然可以了,然后输入账户密码,因为我们设置的事需要账号密码验证的,linuxpro 密码是自己设置的。登陆之后就如上图。

    让我们点击这个文件的时候他会提醒我们权限不足,那么这是什么原因呢,我们权限都设置为777了,大家会不会第一时间就想到SELinux.我们试一下。

    我们先setenforce 0临时关闭一下SELinux。

    果然,进来了。

    然后我们不能给他一直关闭,这不是个好办法,因为不安全,所以我们给他再开启了,单独允许samba的域进行允许,先过滤。

    然后我们看一下,我们这次开启一下samba_export_all_rw 这个应该是samba共享的读写权限,我们再试一下。

    确实可以。说明我们刚才开错了,应该开这一条才对,尴尬。

    然后我们在里面进行添加修改删除操作,发现可以,我们回linux看一下里面有没有我在本机上创建的这两个文件。

    发现有了。但是我们还没试一试Linux了呢

    老样子,先ping一下。

     然后我们想用Linux共享的话必须安装一个软件cifs-utils

    然后我们创建一个认证文件,名称无所谓

    在Linux客户端,按照Samba服务的用户名、密码、共享域的顺序将相关信息写入到一个认证文件中。为了保证不被其他人随意看到,最后把这个认证文件的权限修改为仅root管理员才能够读写:

    然后我们写上参数,先写上用户名称username=linuxprobe就是待会我们用谁来验证的,然后写上验证密码。domaim=  是工作组,这个不要瞎写,不知道的话这样查。在服务器上查cat /etc/samba/smb.conf 

    配置好认证文件后我们给他一个600权限,不让其他人查看到这个文件信息。

    在Linux客户端上创建一个用于挂载Samba服务共享资源的目录,并把挂载信息写入到/etc/fstab文件中,以确保共享挂载信息在服务器重启后依然生效:

    然后我们编辑一下/etc/fstab配置挂载

    格式就是先来两个//然后写上共享服务器的IP然后是/database,就是我们配置samba的时候[]里面的名称,千万别瞎写。然后挂在到本地/database.  格式叫做cifs  ,然后认证文件,我们是通过调取文件的方式进行认证的,而不是把我们账户和密码写入到文件的。

    然后我们就可以挂载我们文件中定义好的设备了mount -a

    然后我们查看df -h

    然后我们可以看到,里面有文件,就是我们开始和Windows测试创建的,现在我们进行一下修改等操作。我们发现可以编辑,在外面查看也发现没问题。

    --------------------------------------------------------------------------------------------------------------------

    NFS(need for speed)网络文件系统

    如果大家觉得Samba服务程序的配置太麻烦,而且恰巧需要共享文件的主机都是Linux系统,那么我们推荐NFS,NFS(网络文件系统)服务可以将远程Linux系统上的文件共享资源挂载到本地主机的目录上,从而使得本地主机(Linux客户端)基于TCP/IP协议,像使用本地主机上的资源那样读写远程Linux系统上的共享文件。这一般是对于Linux和Linux之间的共享。

    做实验前先准备两台Linux,并且还原一下,避免和上一个实验冲突。

    在这之前我们还要准备一下给别人共享的文件夹。

    先在服务端(192.168.10.10)创建一个共享的目录,然后进入这个目录在里面放一个文件并且随便写一些内容,然后给这个目录一个777的权限来让别人也能够进行读写的权限。

    然后我们编辑一下我们NFS的配置文件,和其他的可能不一样,这个需要特殊记一下。

                                                  用于配置NFS服务程序配置文件的参数

    参数 作用
    ro 只读
    rw 读写
    root_squash 当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户
    no_root_squash 当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员
    all_squash 无论NFS客户端使用什么账户访问,均映射为NFS服务器的匿名用户
    sync 同时将数据写入到内存与硬盘中,保证不丢失数据
    async 优先将数据保存到内存,然后再写入硬盘;这样效率更高,但可能会丢失数据

    打开后我们发现是空的,那就对了。他就是空的我们自己写东西。

    第一列就是我们共享设备的名称也就是我们刚才创建的共享目录/gongxiang。

    第二列写的是共享给谁也就是我们的*,代表共享给所有人,我们也可以写成192.168.0.0/24 共享给这个网段,或者192.168.10.20共享给某个主机。

    注意小括号和*之间不能有空格,连着写的。

    第三个写的是()里面写的参数,rw是给他们读写的权限,如果只读就是ro,sync代表数据进行一个同步,当我们客户端死机或者网络中断的情况下,他可以将我们数据实时同步到我们的硬盘,让我们数据尽量不要丢失。root_squash是说我们将对方来访的超级用户root给他映射成我们本地的一个虚拟(匿名)用户.

    其他参数设置到看上面参数列表。

    然后我们执行一个命令export -a,这是让我们配置文件能够去生效。

    然后我们重启一下nfs服务并且添加到开机启动里面。

    然后别忘了清空一下我们的iptables -F,并且我们把iptables状态进行一个保存

    然后我们就可以进去到我们的客户端里面了。

    别忘了ping一下看通不通,小问题往往最容易被忽视浪费时间。

    NFS客户端的配置步骤也十分简单。先使用showmount命令(以及必要的参数,见表)查询NFS服务器的远程共享信息,其输出格式为“共享的目录名称 允许使用客户端地址”。

                                            showmount命令中可用的参数以及作用

    参数 作用
    -e 显示NFS服务器的共享列表
    -a 显示本机挂载的文件资源的情况NFS资源的情况
    -v 显示版本号

    然后我们配置一下vim /etc/fstab

     我们最前面写上服务端的地址192.168.10.10. 对方服务器共享目录/gongxiang ,然后是本地路径/gongxiang,我们方便记忆都起一样,这里别忘了一会出去创建这个目录。我们都没创建呢在客户端。然后文件格式是nfs,权限是defaults 然后是不备份,没有校验。

    然后我们创建出来我们的本地共享目录,然后挂载,然后df -h看挂载上了没有,有时候会出现mount -a执行完了报错,这时候不急,你直接df -h看一下,是不是已经挂载上了。

    然后我们马上到共享目录看一下,发现有了,然后再进行里面内容修改增加等操作,完全没问题。

    我们在客户端进行修改操作,然后去服务端去查看,果然发生了变化,没问题。

    ----------------------------------------------------------------------------------------------------------------------------------

    AutoFs自动挂载服务

    无论是Samba服务还是NFS服务,都要把挂载信息写入到/etc/fstab中,这样远程共享资源就会自动随服务器开机而进行挂载。虽然这很方便,但是如果挂载的远程资源太多,则会给网络带宽和服务器的硬件资源带来很大负载。如果在资源挂载后长期不使用,也会造成服务器硬件资源的浪费。可能会有读者说,“可以在每次使用之前执行mount命令进行手动挂载”。这是一个不错的选择,但是每次都需要先挂载再使用,您不觉得麻烦吗?

    autofs自动挂载服务可以帮我们解决这一问题。与mount命令不同,autofs服务程序是一种Linux系统守护进程,当检测到用户试图访问一个尚未挂载的文件系统时,将自动挂载该文件系统。换句话说,我们将挂载信息填入/etc/fstab文件后,系统在每次开机时都自动将其挂载,而autofs服务程序则是在用户需要使用该文件系统时才去动态挂载,从而节约了网络资源和服务器的硬件资源。

    第一步我们先安装autofs软件

    然后我们卸载掉我们一直部署的yum文件系统,把挂载卸载掉。

     

    然后我们编辑一下autofs的主配置文件。

    处于生产环境中的Linux服务器,一般会同时管理许多设备的挂载操作。如果把这些设备挂载信息都写入到autofs服务的主配置文件中,无疑会让主配置文件臃肿不堪,不利于服务执行效率,也不利于日后修改里面的配置内容,因此在autofs服务程序的主配置文件中需要按照“挂载目录 子配置文件”的格式进行填写。挂载目录是设备挂载位置的上一级目录。例如,光盘设备一般挂载到/media/cdrom目录中,那么挂载目录写成/media即可。对应的子配置文件则是对这个挂载目录内的挂载设备信息作进一步的说明。子配置文件需要用户自行定义,文件名字没有严格要求,但后缀建议以.misc结束。

    在子配置文件中,应按照“挂载目录 挂载文件类型及权限 :设备名称”的格式进行填写。例如,要把光盘设备挂载到/media/iso目录中,可将挂载目录写为iso,而-fstype为文件系统格式参数,iso9660为光盘设备格式,ro、nosuid及nodev为光盘设备具体的权限参数,/dev/cdrom则是定义要挂载的设备名称。配置完成后再顺手将autofs服务程序启动并加入到系统启动项中:

    这里是我们自己创建的子配置文件,不是系统原有的,大家注意一下。

    其中我们是要将光盘设备挂载到/media/iso中,那么我们直接写iso 就好了,而-fstype为文件系统格式参数,iso9660为光盘设备格式,ro是只读,nosuid和nodev是当我们光盘里面出现了suid和dev的这个设备文件的话,那么我们当做一般文件来进行处理,防止一些黑客篡改我们的文件,这个参数可以写可以不写。最后要写上我们挂在的设备的名称/dev/cdrom。

    然后我们给他重启服务并且添加到开机启动项。

    我们看一下我们的光盘现在确实是没有被挂载上的。

    我们再进入media目录看一下,没有任何文件。

    然后我们看一下cd到里面的iso,这时候里面没有目录应该报错才对,但是,没有报错,好进去了,并且里面有文件,那么这时候我们马上df -h查看一下挂载信息,发现莫名挂在上了。这就是我们的自动挂载autofs.

  • 相关阅读:
    npm install遇到的问题
    已经安装了node和npm,输入node -v 未找到命令
    虚拟机VMware搭建代码环境
    使用VMware出现的各种问题
    bind、delegate、on的区别
    软件设计原则
    Qt 模型/视图/委托
    UML类图与类间六种关系表示
    C++内存分配与释放
    SQLite 自定义函数,聚合,排序规则
  • 原文地址:https://www.cnblogs.com/hshyx/p/10824593.html
Copyright © 2011-2022 走看看