当前位置: 代码迷 >> 综合 >> 文件共享:samba,iscsi,NFS
  详细解决方案

文件共享:samba,iscsi,NFS

热度:38   发布时间:2023-12-15 06:53:46.0
###############
#####samba文件共享
###############

能在linux与windows之间进行文件案共享

通用Internet文件系统(CIFS)也称为服务器信息块(SMB),是适用于Microsoft
Windows服务器和客户端的标准文件和打印机共享系统。
Samba服务可用于将Linux文件系统作为CIFS/SMB网络文件共享进行共享,并将Linux
打印机作为CIFS/SMB打印机共享进行共享。



1>服务器安装及基本调试

服务器ip:172.25.254.112
     hostnamectl set-hostname samba.example.com     
     yum install samba-client samba-common samba -y
     systemctl stop firewalld.service
     setsebool -P samba_enable_home_dirs on
     systemctl start smb
     smbpasswd -a student              ##student用户必须是本机存在的用户、
                 ##不能添加系统不存在的用户:
             ******************************
        [root@localhost ~]# smbpasswd -a yang      
        New SMB password:  
        Retype new SMB password:
        Failed to add entry foR user yang.   

             ******************************
     pdbedit -L                        ##列出smb用户
     pdbedit -x student                ##删除smb用户
     pdbedit -L
     smbpasswd -a student

测试(ip:172.25.254.12):

     smbclient -L //172.25.254.112 -U student          ##列出共享目录的信息


     smbclient //172.25.254.112/student -U student     ##进入共享目录,默认共享的是登陆用户家目录

如果出现以下报错:
 [root@desktop ~]# smbclient -L //172.25.254.112 -U student
  Enter students password:
  protocol negotiation failed: NT_STATUS_IO_TIMEOUT
解决方法:
     服务器/etc/hosts 下加上服务器ip和名字

2>samba共享目录

     cd /
     mkdir westos
     cd westos/
     touch file{1..10}
     ls
     vim /etc/samba/smb.conf
     ---------
        [westos1]            ##共享目录的名字(自己定义)
        comment = local directory westos    ##共享说明
        path = /westos      ##文件路径
     ---------

     systemctl restart smb

  测试(ip:172.25.254.12):

     smbclient -L //172.25.254.112 -U student


     vim /etc/samba/smb.conf
     smbclient  //172.25.254.112/westos -U student
               登陆上去之后不能ls查看   因为selinux标签没有改变


     **共享 用户自己建立的目录时需要修改该目录的selinux标签属性,此方式只针对修改目录
     semanage  fcontext -a -t samba_share_t '/westos(/.*)?'     
     restorecon  -FvvR /westos/

     smbclient  //172.25.254.112/westos -U student
                  此时登陆上去之后ls能查看到目录下的文件

   
     vim /etc/samba/smb.conf
               ----------
        [linux]
        comment = local directory westos
        path = /linux
               -----------
        
     systemctl restart smb
     smbclient -L //172.25.254.112 -U student
     cd /
     mkdir linux
     touch linux/tong

     **共享 系统建立的目录时需要修改的selinux sebool属性,此方式修改针对所有目录,
             一旦开放,selinux标签不再保护目录访问
     setsebool -P samba_export_all_rw on           ##可以读写
     setsebool -P samba_export_all_ro on           ##只读
     smbclient  //172.25.254.112/linux -U student
    
     用户要在共享目录下建立文件夹(拥有写权限)必须具备三点:
           1>服务器分享的目录具有写权限
     2>selinux sebool 开启写权限
     3>samba配置文件里添加了允许写的参数(samba服务允许写的权力)

  在测试端登陆后用ls查看:
 smb: \> ls
   .                                   D        0  Mon Mar 20 16:42:45 2017
   ..                                  D        0  Mon Mar 20 15:59:53 2017
   aa                                  D        0  Mon Mar 20 16:21:39 2017
   ss                                  D        0  Mon Mar 20 16:41:20 2017
   gile                                N        0  Mon Mar 20 16:42:09 2017
   file                                N        0  Mon Mar 20 16:42:45 2017

        10473900 blocks of size 1024. 7240984 blocks available

  ##服务器自己建立的文件或目录显示的是  N  通过samba服务在共享目录下建立的文件或目录显示的是  D



3>匿名访问

    vim /etc/samba/smb.conf
    ------------
     125         map to guest = bad user     ##所有未认证的用户影射为guest(给guest一个身份)

     321         [westos]
     322         comment = local directory westos
     323         path = /westos
     324         guest ok = yes              ##开启匿名
    ------------
    systemctl restart smb

 测试(ip:172.25.254.12):
    smbclient //172.25.254.112/westos
    mount //172.25.254.112/westos /mnt -o username=guest      
    umount /mnt

4>samba共享目录的管理参数

    vim /etc/samba/smb.conf
    -----------------
        [westos]
        comment = local directory westos
        path = /westos
        guest ok = yes
        writeable = yes             ##允许所有人可写
     #  write list = yang           ##只允许用户yang可写
     #  write list = @yang          ##只允许用户组yang可写
     #  valid users = yang          ##只允许用户yang登陆
     #  valid users = +yang         ##只允许用户组yang登陆
     #  browseable = no             ##是否显示本共享目录
     #  admin users = yang          ##让yang用户拥有超级用户权限
    ------------------

   systemctl restart smb

   *  usermod -G yang student  ##将student加到用户组yang中
   *  usermod -G "" student

   测试(ip:172.25.254.12):
      mount //172.25.254.112/westos /mnt  -o  password=yang,username=yang
       


5>多用户挂载

    yum install cifs-utils -y
    vim /root/passfile
   ----------
     username=yang
     password=yang
   ----------
              
    mount //172.25.254.112/westos /mnt -o credentials=/root/passfile,multiuser,sec=ntlmssp

    su - yang        ##与passfile文件里用户同名
     ls /mnt
     cifscreds add 172.25.254.112
     ls /mnt         ##查看成功

    su - kiosk       ##与passfile文件里用户不同名
     ls /mnt         ##查看不成功
     cifscreds add 172.25.254.112
     ls /mnt         ##查看不成功      
   

6>自动挂载(autofs服务)

autofs与mount/unmount不同之处在于,他是一种服务程序。如果它检测到用户正试图访问一个尚未挂载的文件系统,
它就会自动检测该文件系统,如果存在,那么autofs会自动将其挂载。另一方面,如果它检测到某个已挂载的文件系统
在一段时间内没有被使用,那么autofs会自动将其卸载,因此,一旦运行了autofs之后,用户就不用手动完成文件系统
的挂载和卸载了。

  =====
  服务的安装与启动
  =====
   yum install autofs -y     ##安装autofs服务
   systemctl start autofs
 
  ======
  编辑配置文件
  ======
  vim /etc/auto.master     ##主配置文件
            ----------------------------------
            这个文件里的每一行对应一个挂载点
       autofs服务的每个挂载点都有一个相应的配置文件,比如   /etc/auto.master 文件里有一行
       /misc   /etc/auto.misc   这一行表示 /misc 挂载点的配置文件是 /etc/auto.misc
             这里/misc 代表的是你要挂载的真正目录的上层目录    比如你真正要挂载的位置是 /mnt/server
            那么这里你就该写的挂载点是 /mnt   后面配置文件格式一般都统一写成   auto.xxx  后缀应与
            挂载点名称相同 。 如我要挂载在 /mnt/server下   我就该在  /etc/auto.master 里加这一行:
      /mnt   /etc/auto.mnt
            ----------------------------------

 
  vim /etc/auto.mnt        ##编辑挂载点配置文件    
         --------------------
     server       -fstype=cifs,username=[],password=[] ://ip/dir
         --------------------
      server代表是/mnt/server   
      -fstype=cifs 代表文件系统格式是cifs  
            在Red Hat Enterprise Linux 5以下(不包括5),samba的共享的文件系统类型是smbfs,
            在Red Hat Enterprise Linux 5及5以上则是cifs类型
      username   password  填写你自己samab账户username password
   

   =========
   更改挂载时间
   =========
         默认情况下挂载时间是300s,5min不使用就自动卸载,当然这个时间是可以改变的
         在  /etc/sysconfig/autofs 下  有一行参数  :  
    TIMEOUT=300
         将300改为你自己想要的值就ok了默认单位为秒
         注意这个配置文件在不同版本的redhat下存在位置也不同:
         7.0系统:
     /etc/sysconfig/autofs
        7.2系统:
     /etc/autofs.conf
   

#################
#####NFS网络文件存储
#################


1>简介

    网络文件系统(NFS)是Unix系统和网络附加存储文件管理器常用的网络文件
   系统,允许多个客户端通过网络共享文件访问。它可用于提供对共享二进制
    目录的访问,也可用于允许用户在同一工作组中从不同客户端访问其文件。
  NFS协议有多个版本:Linux支持版本4、版本3和版本2, 而大多数系统管理员
    熟悉的是NFSv3。默认情况下,该协议并不安全,但是更新的版本(如NFSv4
    )提供了对更安全的身份验证的支持,甚至可以通过kerberos进行加密

   NFSv4还导出pseudo-root(所有导出的文件系统的root)。如果客户端挂载nfs-server:/ ,这将在NFS
     服务器上的/下面相对于其位置挂载所有导出文件系统。这对于浏览从客户端的服务器导出的所有
    文件系统有用。您仍可单独挂载文件系统。

    默认情况下,NFS服务器将NFS客户端上的root视为用户nfsnobody。即,如果root尝试访问挂载的
    导出中的文件,服务器会将其视作用户nfsnobody访问。在NFS导出被无磁盘客户端用作/和root需
    要被视作root的情况中,这种安全措施存在隐患。若要禁用此保护,服务器需要将no_root_squash
    添加到在/etc/exports中导出设置的选项列表:
  /exports/root     172.25.254.12(rw,no_root_squash)

    对于NFSv4,必须在服务器上打开端口2049/TCP(对于nfsd)。对于NFSv3和更早版本,必须为
  rpcbind、rpc.mountd、lockd和rpc.rquotad打开更多端口,而在“随机”选择的端口上启动其中许
    多服务这一事实又增加了复杂性。此外,NFSv2和NFSv3支持UDP传输,还要求打开相应的端口。


2>服务器配置(ip:172.25.254.112):

     yum search nfs            
     yum install nfs-utils.x86_64 -y    ##安装软件
     systemctl start nfs                ##开启服务
     firewall-cmd --list-all            ##查看火墙设置
     firewall-cmd --permanent --add-service=nfs
     firewall-cmd --permanent --add-service=mountd
     firewall-cmd --permanent --add-service=rpc-bind
     firewall-cmd --reload
     firewall-cmd --list-all    
     mkdir /westos           ##建立共享目录(也能分享系统本就存在的目录)
     vim /etc/exports
            -------------------
       /westos        172.25.254.12(rw)   ##分享目录为/westos  只允许172.25.254.12读写
            -------------------

     exportfs -rv                        ##-r 确保应用这些更改  -v 显示所有导出(共享)
     showmount -e 172.25.254.112         ##显示指定NFS服务器共享目录列表

      ****************
   NFS共享常用参数
      ****************
        ro                   #只读访问   
        rw                   #读写访问   
        sync                 #所有数据在请求时写入共享   
        async                #NFS在写入数据前可以相应请求   
        secure               #NFS通过1024以下的安全TCP/IP端口发送   
        insecure             #NFS通过1024以上的端口发送   
        wdelay               #如果多个用户要写入NFS目录,则归组写入(默认)   
        no_wdelay            #如果多个用户要写入NFS目录,则立即写入,当使用async时,无需此设置。  
        hide                 #在NFS共享目录中不共享其子目录   
        no_hide              #共享NFS目录的子目录   
        subtree_check        #如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认)   
        no_subtree_check     #和上面相对,不检查父目录权限   
        all_squash           #共享文件的UID和GID映射匿名用户anonymous,适合公用目录。   
        no_all_squash        #保留共享文件的UID和GID(默认)   
        root_squash          #root用户的所有请求映射成如anonymous用户一样的权限(默认)   
        no_root_squas        #root用户具有根目录的完全管理访问权限   
        anonuid=xxx          #指定NFS服务器/etc/passwd文件中匿名用户的UID   
        anongid=xxx          #指定NFS服务器/etc/passwd文件中匿名用户的GID


     *************************
   /etc/exports  文件编写
     *************************
   /nfsshare/read     172.25.0.0/24(ro,sync)      ##允许一个网段的机器去访问此共享目录
   /nfsshare/write    172.25.0.0/24(rw,sync) 127.0.0.1(rw,sync)   ##允许这两个网段的机器去读写此共享目录
   /nfsshare/read     *(ro,sync)                  ##允许所有机器访问此目录
   /nfsshare/read     172.25.254.12(ro,sync)      ##允许这个ip访问此目录


3>客户端查看并挂载(ip:172.25.254.12)

   showmount -e 172.25.254.112
   mount 172.25.254.112:/westos /mnt
   df
   cd /mnt
   mkdir  aaa
   ls
   touch hello


4>永久挂载NFS文件系统:

    将相应的行添加至/etc/fstab:
  nfsserver:/nfsshare
  /mnt/nfsshare  nfs  defaults  0 0

    客户端NFS挂载选项
   rw:挂载可读写的文件系统
   ro:挂载只读文件系统

  vers=4:尝试只使用指定的NFS版本进行挂载。如果服务器不支持该版本,则挂载请求失败
  soft:如果NFS请求超时,三次尝试后返回错误。权衡数据完整性与提高客户端响应性。(默
                 认行为hard,将无限期地重试)。


5>保护NFS输出

   在serverx和desktopx上运行脚本,加入kerberos认证域:
   # lab nfskrb5 setup
   安装kerberos服务所需的keytab:(以下操作都在server0上进行)
   # wget -O /etc/krb5.keytab http://classroom.example.com/pub/keytabs/server0.keytab
   激活NFS v4.2版本,可以输出selinux标签,编辑/etc/sysconfig/nfs修改如下选项:
   RPCNFSDARGS="-V 4.2"
   启动nfs-secure-server服务:
   # systemctl start nfs-secure-server; systemctl enable nfs-secure-server
   配置NFS输出:
   # mkdir /securenfs
   # echo '/securenfs desktop0(sec=krb5p,rw)' >> /etc/exports
   # exportfs -r
   安装kerberos服务所需keytab:(以下操作都在dekstop0进行)
   # wget -O /etc/krb5.keytab http://classroom.example.com/pub/keytabs/desktop0.keytab
   启动nfs-secure服务:
   # systemctl start nfs-secure; systemctl enable nfs-secure
   配置客户端挂载:
   # mkdir /mnt/secureshare
   /etc/fstab
   server0:/securenfs /mnt/secureshare nfs defaults,v4.2,sec=krb5p 0 0
   # mount -a


6>自动挂载(autofs)
    
   在客户端:
    vim /etc/auto.master
         ----------------
      /mnt    /etc/auto.mnt
         ----------------

    vim /etc/auto.mnt
        ------------------
     yang    -rw,vers=4      172.25.254.112:/westos
        ------------------
 
   systemctl restart autofs
   cd /mnt/yang
    

##############
####iscsi远程块存储
##############


服务端:

    =======
    服务的安装与启动
    =======
      yum install targetcli.noarch -y
      systemctl start target
      systemctl enable target
      systemctl stop firewalld
    =====
    共享硬盘的建立
    ======
      fdisk /dev/vdb   ##先从本机分割一块空间
      targetcli        ##启动软件,建立共享
    ********
       ls
       /backstores/block  create westos:storage1 /dev/vdb1         
       /iscsi  create iqn.2017-03.com.westos:storage1
       iscsi/iqn.2017-03.com.westos:storage1/tpg1/acls create  iqn.2017-03.com.westos:key1
       iscsi/iqn.2017-03.com.westos:storage1/tpg1/luns create  /backstores/block/westos:storage1
       iscsi/iqn.2017-03.com.westos:storage1/tpg1/portals create  172.25.254.212
       exit
    *********
     依照上面命令建立好的文件系统:
   =======================
  /> ls
  o- / ..................................................................... [...]
    o- backstores .......................................................... [...]
    | o- block .............................................. [Storage Objects: 1]
    | | o- westos:storage1 ........... [/dev/vdb1 (100.0MiB) write-thru activated]
    | o- fileio ............................................. [Storage Objects: 0]
    | o- pscsi .............................................. [Storage Objects: 0]
    | o- ramdisk ............................................ [Storage Objects: 0]
    o- iscsi ........................................................ [Targets: 1]
    | o- iqn.2017-03.com.westos:storage1 ............................... [TPGs: 1]
    |   o- tpg1 ........................................... [no-gen-acls, no-auth]
    |     o- acls ...................................................... [ACLs: 1]
    |     | o- iqn.2017-03.com.westos:key1 ...................... [Mapped LUNs: 1]
    |     |   o- mapped_lun0 ................... [lun0 block/westos:storage1 (rw)]
    |     o- luns ...................................................... [LUNs: 1]
    |     | o- lun0 .......................... [block/westos:storage1 (/dev/vdb1)]
    |     o- portals ................................................ [Portals: 1]
    |       o- 172.25.254.112:3260 .......................................... [OK]
    o- loopback ..................................................... [Targets: 0]
   ==========================


      vim /etc/iscsi/initiatorname.iscsi
       --------
        InitiatorName=iqn.2017-03.com.westos:key1
       --------
        
测试:

  客户端:
    yum install iscsi-initiator-utils -y
    vim /etc/iscsi/initiatorname.iscsi
              ---------------
      InitiatorName=iqn.2017-03.com.westos:key1
              ---------------
    systemctl restart iscsi
    systemctl status iscsi
    systemctl restart iscsid
    systemctl status iscsid
    history
    iscsiadm -m discovery -t st -p 172.25.254.212        ##发现
    iscsiadm -m node -T iqn.2017-03.com.westos:storage1 -p 172.25.254.212 -l   ##登陆


   =====
   客户端访问存储
   =====
    fdisk  -l    ##发现多了一块设备  /dev/sda
    fdisk /dev/sda  
    partprobe
    fdisk -l
    mkfs.xfs /dev/sda1
    mount /dev/sda1 /mnt
    df
    umount /mnt
   =====
   中断使用iSCSI目标
   =====
    确保没有使用目标所提供的任何设备。
    确保从/etc/fstab等位置中删除使用目标的所有永久挂载。
     登出iSCSI目标,以暂时断开连接。
    # iscsiadm -m node -T iqn.2017-03.com.westos:storage1 -p 172.25.254.212 -u
     删除iSCSI目标的本地记录,以永久断开连接。
    # iscsiadm -m node -T iqn.2017-03.com.westos:storage1 -p 172.25.254.212 -o delete


   如果没有中断删除就重启电脑,iscsi会自动连接,如果服务器那边没有开启此服务,开机速度会非常慢,在开机后

   清除  /var/lib/iscsi/nodes/     /var/lib/iscsi/send_targets/  下的所有内容就ok了