zoukankan      html  css  js  c++  java
  • Samba和NFS文件共享

    SAMBA文件共享服务

    通过Yum软件仓库来安装Samba服务程序

    [root@zhangjh ~]# yum install samba -y
    

     Samba 配置文件注释信息较多,为了便于配置,因此先把主配置文件改个名字,然后使用cat命令读入主配置文件,再在grep命令后面添加-v参数(反向选择),分别去掉所有以井号(#)和分号(;)开头的注释信息行,

     对于剩余的空白行可以使用^$参数来表示并进行反选过滤,最后把过滤后的可用参数信息通过重定向符覆盖写入到原始文件名称中。

    [root@zhangjh ~]# mv /etc/samba/smb.conf /etc/samba/smb.conf.bak
    [root@zhangjh ~]# cat /etc/samba/smb.conf.bak | grep -v "#" | grep -v ";" | grep -v "^$" > /etc/samba/smb.conf
    [root@zhangjh ~]# cat /etc/samba/smb.conf
    [global]    
    	workgroup = MYGROUP
    	server string = Samba Server Version %v
    	log file = /var/log/samba/log.%m
    	max log size = 50
    	security = user
    	passdb backend = tdbsam
    	load printers = yes
    	cups options = raw
    [homes]
    	comment = Home Directories
    	browseable = no
    	writable = yes
    [printers]
    	comment = All Printers
    	path = /var/spool/samba
    	browseable = no
    	guest ok = no
    	writable = no
    	printable = yes
    

      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

    配置共享资源:

     Samba服务程序的主配置文件包括全局配置参数和区域配置参数。

    全局配置参数用于设置整体的资源共享环境,对里面的每一个独立的共享资源都有效。区域配置参数则用于设置单独的共享资源,且仅对该资源有效。

    用于设置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命令的参数以及作用:

    参数 作用
    -a 用户名 建立Samba用户
    -x 用户名 删除Samba用户
    -L 列出用户列表
    -Lv 列出用户详细信息的列表
    [root@zhangjh ~]# pdbedit -a -u jianghua
    new password:
    retype new password:
    Unix username:        jianghua
    NT username:          
    Account Flags:        [U          ]
    User SID:             S-1-5-21-3165414194-1039364885-2898766718-1000
    Primary Group SID:    S-1-5-21-3165414194-1039364885-2898766718-513
    Full Name:            
    Home Directory:       \zhangjhjianghua
    HomeDir Drive:        
    Logon Script:         
    Profile Path:         \zhangjhjianghuaprofile
    Domain:               ZHANGJH
    Account desc:         
    Workstations:         
    Munged dial:          
    Logon time:           0
    Logoff time:          Wed, 06 Feb 2036 23:06:39 CST
    Kickoff time:         Wed, 06 Feb 2036 23:06:39 CST
    Password last set:    Thu, 14 Jun 2018 16:58:13 CST
    Password can change:  Thu, 14 Jun 2018 16:58:13 CST
    Password must change: never
    Last bad password   : 0
    Bad password count  : 0
    Logon hours         : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    

    第2步:创建用于共享资源的文件目录。

       注意关闭SElinux。

    [root@zhangjh ~]# mkdir /home/database
    [root@zhangjh ~]# chown -Rf jianghua:jianghua /home/database/
    [root@zhangjh ~]# setenforce 0
    

    第3步:在Samba服务程序的主配置文件中,写入共享信息。在原始的配置文件中,[homes]参数为来访用户的家目录共享信息,[printers]参数为共享的打印机设备。这两项如果在今后的工作中不需要,可以手动删除。

    [root@zhangjh ~]# vim /etc/samba/smb.conf
    [global]
            workgroup = MYGROUP
            server string = Samba Server Version %v
            log file = /var/log/samba/log.%m
            max log size = 50
            security = user
            passdb backend = tdbsam
            load printers = yes
            cups options = raw
    [database]
            comment = Do not arbitrarily modify the database file
            path = /home/database
            public = no
            writable = yes
    

    第4步:重启Samba 并清空iptables防火墙,然后就可以检验配置效果了。

    [root@zhangjh ~]# systemctl restart smb
    [root@zhangjh ~]# systemctl enable smb
    ln -s '/usr/lib/systemd/system/smb.service' '/etc/systemd/system/multi-user.target.wants/smb.service'
    [root@zhangjh ~]# iptables -F
    [root@zhangjh ~]# service iptables save
    iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]
    

    Windows挂载共享

    现在可以在共享目录创建文件以及文件夹,可以修改文件,删除文件的操作。

    Linux挂载共享

     linux客户端安装支持文件共享服务的软件包(cifs-utils)。

    [root@zhangjh ~]# yum install cifs-utils -y
    

    在Linux客户端,按照Samba服务的用户名、密码、共享域的顺序将相关信息写入到一个认证文件中。

    为了保证不被其他人随意看到,最后把这个认证文件的权限修改为仅root管理员才能够读写:

    [root@zhangjh ~]# vim auth.smb
    username=jianghua
    password=password
    domain=MYGROUP
    [root@zhangjh ~]# chmod -Rf 600 auth.smb
    

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

    [root@zhangjh ~]# mkdir /database
    [root@zhangjh ~]# vim /etc/fstab 
    #
    # /etc/fstab
    # Created by anaconda on Sun May  6 05:50:56 2018
    #
    # Accessible filesystems, by reference, are maintained under '/dev/disk'
    # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
    #
    /dev/mapper/rhel-root   /                       xfs     defaults        1 1
    UUID=d33701cc-d80c-40b5-aa87-c07011414e1d /boot                   xfs     defaults        1 2
    /dev/mapper/rhel-swap   swap                    swap    defaults        0 0
    #/dev/md0 /raid_mount ext4 defaults 0 0
    #/dev/storage/zjh_dir /root/linshiceshi ext4 defaults 0 0
    /dev/cdrom /media/cdrom iso9660 defaults 0 0
    //192.168.38.251/database /database cifs credentials=/root/auth.smb 0 0
    [root@zhangjh ~]# mount -a
    

    Linux客户端成功地挂载了Samba服务的共享资源。

    进入到挂载目录/database后就可以看到Windows系统访问Samba服务程序时留下来的文件了(即文件1111.txt)。也可以对文件进行编辑,删除操作。

    [root@zhangjh ~]# df -h
    Filesystem                 Size  Used Avail Use% Mounted on
    /dev/mapper/rhel-root       18G  3.1G   15G  18% /
    devtmpfs                   909M     0  909M   0% /dev
    tmpfs                      918M   80K  918M   1% /dev/shm
    tmpfs                      918M  8.9M  909M   1% /run
    tmpfs                      918M     0  918M   0% /sys/fs/cgroup
    /dev/sr0                   3.5G  3.5G     0 100% /media/cdrom
    /dev/sda1                  497M  119M  379M  24% /boot
    //192.168.38.251/database   18G  3.1G   15G  18% /database
    [root@zhangjh ~]# cd /database/
    [root@zhangjh database]# ls
    新建文件夹
    [root@zhangjh database]# cd 新建文件夹/
    [root@zhangjh 新建文件夹]# ls
    1111.txt
    [root@zhangjh 新建文件夹]# cat 1111.txt 
    111111
    [root@zhangjh 新建文件夹]# 
    

    NFS网络文件系统

     NFS(网络文件系统)服务可以将远程Linux系统上的文件共享资源挂载到本地主机的目录上,从而使得本地主机(Linux客户端)基于TCP/IP协议,像使用本地主机上的资源那样读写远程Linux系统上的共享文件。

    安装NFS软件包:

    [root@zhangjh ~]# yum install nfs-utils -y
    

    第1步:清空NFS服务器上面iptables防火墙的默认策略,以免默认的防火墙策略禁止正常的NFS共享服务。

    [root@zhangjh ~]# iptables -F
    [root@zhangjh ~]# service iptables save
    iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]
    

    第2步:在NFS服务器上建立用于NFS文件共享的目录,并设置足够的权限确保其他人也有写入权限。

    [root@zhangjh ~]# mkdir /nfsfile
    [root@zhangjh ~]# chmod -Rf 777 /nfsfile/
    [root@zhangjh ~]# echo "welcome to nfspublic files" > /nfsfile/readme
    

    第3步:NFS服务程序的配置文件为/etc/exports,默认情况下里面没有任何内容。我们可以按照“共享目录的路径 允许访问的NFS客户端(共享权限参数)”的格式,定义要共享的目录与相应的权限

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

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

    第4步:启动和启用NFS服务程序。

       由于在使用NFS服务进行文件共享之前,需要使用RPC(Remote Procedure Call,远程过程调用)服务将NFS服务器的IP地址和端口号等信息发送给客户端。因此,在启动NFS服务之前,还需要顺带重启并启用rpcbind服务程序,并将这两个服务一并加入开机启动项中。

    [root@zhangjh ~]# systemctl restart rpcbind.service 
    [root@zhangjh ~]# systemctl enable rpcbind.service 
    [root@zhangjh ~]# systemctl start nfs-server
    [root@zhangjh ~]# systemctl enable nfs-server
    ln -s '/usr/lib/systemd/system/nfs-server.service' '/etc/systemd/system/nfs.target.wants/nfs-server.service'
    

    第5步:linux客户端配置

    使用showmount命令(以及必要的参数)查询NFS服务器的远程共享信息,其输出格式为“共享的目录名称 允许使用客户端地址”。

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

    参数 作用
    -e 显示NFS服务器的共享列表
    -a 显示本机挂载的文件资源的情况NFS资源的情况
    -v 显示版本号
    [root@zhangjh ~]# showmount -e 192.168.38.251
    Export list for 192.168.38.251:
    /nfsfile 192.168.38.*
    

    然后在NFS客户端创建一个挂载目录。使用mount命令并结合-t参数,指定要挂载的文件系统的类型,并在命令后面写上服务器的IP地址、服务器上的共享目录以及要挂载到本地系统(即客户端)的目录。

    [root@zhangjh ~]# mkdir /nfsfile
    [root@zhangjh ~]# mount -t nfs 192.168.38.251:/nfsfile/ /nfsfile/
    

     可以访问服务端的共享文件了

    [root@zhangjh ~]# cd /nfsfile/
    [root@zhangjh nfsfile]# ls
    readme
    [root@zhangjh nfsfile]# cat readme 
    welcome to nfspublic files
    

    如果希望NFS文件共享服务能一直有效,则需要将其写入到fstab文件中:

    [root@zhangjh ~]# vim /etc/fstab 
    # /etc/fstab
    # Created by anaconda on Sun May  6 05:50:56 2018
    #
    # Accessible filesystems, by reference, are maintained under '/dev/disk'
    # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
    #
    /dev/mapper/rhel-root   /                       xfs     defaults        1 1
    UUID=d33701cc-d80c-40b5-aa87-c07011414e1d /boot                   xfs     defaults        1 2
    /dev/mapper/rhel-swap   swap                    swap    defaults        0 0
    #/dev/md0 /raid_mount ext4 defaults 0 0
    #/dev/storage/zjh_dir /root/linshiceshi ext4 defaults 0 0
    /dev/cdrom /media/cdrom iso9660 defaults 0 0
    192.168.38.251:/nfsfile /nfsfile nfs defaults 0 0
    

      

    AutoFs自动挂载服务

    autofs服务程序是一种Linux系统守护进程,当检测到用户试图访问一个尚未挂载的文件系统时,将自动挂载该文件系统。

    安装autofs:

    [root@zhangjh ~]# yum install autofs -y
    

     在autofs服务程序的主配置文件中需要按照“挂载目录 子配置文件”的格式进行填写。

    [root@zhangjh ~]# vim /etc/auto.master
    #
    # Sample auto.master file
    # This is an automounter map and it has the following format
    # key [ -mount-options-separated-by-comma ] location
    # For details of the format look at autofs(5).
    #
    /media /etc/iso.misc   #增加一行
    /misc   /etc/auto.misc
    #
    # NOTE: mounts done from a hosts map will be mounted with the
    #       "nosuid" and "nodev" options unless the "suid" and "dev"
    #       options are explicitly given.
    #
    /net    -hosts
    #
    # Include /etc/auto.master.d/*.autofs
    #
    +dir:/etc/auto.master.d
    #
    # Include central master map if it can be found using
    # nsswitch sources.
    #
    # Note that if there are entries for /net or /misc (as
    # above) in the included master map any keys that are the
    # same will not be seen as the first read key seen takes
    # precedence.
    #
    +auto.master
    

    在子配置文件中,应按照“挂载目录 挂载文件类型及权限 :设备名称”的格式进行填写。

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

    [root@zhangjh ~]# vim /etc/iso.misc
    iso -fstype=iso9660,ro,nosuid,nodev :/dev/cdrom
    [root@zhangjh ~]# systemctl start autofs
    [root@zhangjh ~]# systemctl enable autofs
    ln -s '/usr/lib/systemd/system/autofs.service' '/etc/systemd/system/multi-user.target.wants/autofs.service'
    

    接下来将发生一件非常有趣的事情。我们先查看当前的光盘设备挂载情况,确认光盘设备没有被挂载上,而且/media目录中根本就没有iso子目录。

    但是,我们却可以使用cd命令切换到这个iso子目录中,而且光盘设备会被立即自动挂载上。我们也就能顺利查看光盘内的内容了。

    [root@zhangjh ~]# df -h
    df: ‘/media/cdrom’: No such file or directory
    Filesystem                 Size  Used Avail Use% Mounted on
    /dev/mapper/rhel-root       18G  3.1G   15G  18% /
    devtmpfs                   909M     0  909M   0% /dev
    tmpfs                      918M   80K  918M   1% /dev/shm
    tmpfs                      918M  8.9M  909M   1% /run
    tmpfs                      918M     0  918M   0% /sys/fs/cgroup
    /dev/sda1                  497M  119M  379M  24% /boot
    //192.168.38.251/database   18G  3.1G   15G  18% /database
    [root@zhangjh ~]# cd /media/
    [root@zhangjh media]# ls
    [root@zhangjh media]# cd iso
    [root@zhangjh iso]# ls -l
    total 812
    dr-xr-xr-x.  4 root root   2048 May  7  2014 addons
    dr-xr-xr-x.  3 root root   2048 May  7  2014 EFI
    -r--r--r--.  1 root root   8266 Apr  4  2014 EULA
    -r--r--r--.  1 root root  18092 Mar  6  2012 GPL
    dr-xr-xr-x.  3 root root   2048 May  7  2014 images
    dr-xr-xr-x.  2 root root   2048 May  7  2014 isolinux
    dr-xr-xr-x.  2 root root   2048 May  7  2014 LiveOS
    -r--r--r--.  1 root root    108 May  7  2014 media.repo
    dr-xr-xr-x.  2 root root 774144 May  7  2014 Packages
    dr-xr-xr-x. 24 root root   6144 May  7  2014 release-notes
    dr-xr-xr-x.  2 root root   4096 May  7  2014 repodata
    -r--r--r--.  1 root root   3375 Apr  1  2014 RPM-GPG-KEY-redhat-beta
    -r--r--r--.  1 root root   3211 Apr  1  2014 RPM-GPG-KEY-redhat-release
    -r--r--r--.  1 root root   1568 May  7  2014 TRANS.TBL
    [root@zhangjh iso]# df -h
    df: ‘/media/cdrom’: No such file or directory
    Filesystem                 Size  Used Avail Use% Mounted on
    /dev/mapper/rhel-root       18G  3.1G   15G  18% /
    devtmpfs                   909M     0  909M   0% /dev
    tmpfs                      918M   80K  918M   1% /dev/shm
    tmpfs                      918M  8.9M  909M   1% /run
    tmpfs                      918M     0  918M   0% /sys/fs/cgroup
    /dev/sda1                  497M  119M  379M  24% /boot
    //192.168.38.251/database   18G  3.1G   15G  18% /database
    /dev/sr0                   3.5G  3.5G     0 100% /media/iso
    

      

  • 相关阅读:
    深入浅出Blazor webassembly之Local storage
    深入浅出Blazor webassembly之一种简单的部署方法
    深入浅出Blazor webassembly之以SubDirectory方式部署
    深入浅出Blazor webassembly之理解 Blazor WASM
    深入浅出Blazor webassembly之Logging
    [转]解决github不能访问的问题
    深入浅出Blazor webassembly之使用State container机制实现两组件联动
    深入浅出Blazor webassembly之使用EventCallback机制进行组件之间联动
    跳槽一年后的回顾
    Node.js躬行记(12)——BFF
  • 原文地址:https://www.cnblogs.com/zhangjianghua/p/9183760.html
Copyright © 2011-2022 走看看