當前位置: 妍妍網 > 碼農

Linux 下多種方式實作檔共享詳解

2024-07-08碼農

戳下方名片 ,關註並 星標

回復「 1024 」獲取 2TB 學習資源!

👉 體系化學習:

特色專欄

/ /

/ /

/ /

/ /

/ /

檔共享服務在Linux系統上有多種方式,最常用的有Samba,vsftp,iSCSI,NFS這四種方式,如下將分別配置四種不同的檔共享服務.

VSFTP 檔傳輸

FTP是檔傳輸協定.用於Internet上的控制檔的雙向傳輸,FTP傳輸檔屬於明文傳輸,不對傳輸過程進行任何加密處理,VSFTP服務是Linux系統下的加強版傳輸伺服器,安全性更好.

VSFTP的特點

  • • 1.vsftp程式的執行者一般是普通使用者,降低了相對應行程的許可權,提高了安全性.

  • • 2.任何需要執行較高許可權的指令都需要上層程式授權.

  • • 3.ftp所需要使用的絕大多數命令都被整合到了vsftp中,基本不需要系統額外提供命令.

  • • 4.擁有chroot功能,可以改變使用者的根目錄,限制使用者只能在自己的家目錄.

  • VSFTP的連線型別

    控制連線(持續連線)-> TCP21(命令通道)-> 使用者收發FTP命令

    數據連線(按需連線)-> TCP20(數據通道)-> 用於上傳下載數據

    主動模式與被動模式

    1.很多防火墻在設定的時候都是不允許接受外部發起的連線,所以許多位於防火墻後或內網的FTP伺服器不支持PASV模式,因為客戶端無法穿過防火墻開啟FTP伺服器的高位埠.

    2.而許多內網的客戶端不能用PORT模式登陸FTP伺服器,因為從伺服器的TCP20無法和企業網路絡的客戶端建立一個新的連線,造成無法工作.

    配置匿名FTP伺服器

    作用:任意使用者,輸入FTP伺服器IP都可以存取,只需輸入使用者名稱ftp即可存取.

    #[匿名配置常用參數]
    anonymous_enable=YES #啟用匿名存取
    anon_umask=022 #匿名使用者所上傳檔的許可權掩碼
    anon_root=/var/ftp #匿名使用者的FTP根目錄
    anon_upload_enable=YES #允許上傳檔
    anon_mkdir_write_enable=YES #允許建立目錄
    anon_other_write_enable=YES #開放其他寫入權
    anon_max_rate=0 #限制最大傳輸速率

    1.安裝VSFTP伺服器.

    [root@localhost ~]# yum install -y vsftpd

    2.修改VSFTP主配置檔,覆蓋寫入以下內容,並去掉#號註釋即可.

    [root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
    pasv_enable=YES #開啟被動模式
    pasv_min_port=10000 #被動模式最小埠
    pasv_max_port=15000 #被動模式最大埠
    anonymous_enable=YES #允許匿名使用者存取
    anon_upload_enable=YES #允許匿名使用者上傳
    anon_mkdir_write_enable=YES #允許匿名使用者建立目錄
    anon_other_write_enable=YES #開放其他人寫入許可權
    anon_umask=022 #設定匿名使用者umask
    anon_root=/ghost #匿名使用者ftp根目錄
    local_enable=YES #允許本地使用者登入
    write_enable=YES #允許本地使用者上傳
    local_umask=022 #本地使用者上傳umask值
    xferlog_enable=YES #啟用記錄日誌
    connect_from_port_20=YES #主動模式傳輸介面
    xferlog_std_format=YES #使用標準ftp日誌的格式
    listen=YES #允許被偵聽
    pam_service_name=vsftpd #ftp采用pam預設使用者名稱密碼驗證
    userlist_enable=YES #使用者登陸限制
    tcp_wrappers=YES #網路存取限制機制

    #[開啟vim,輸入正則 去掉警號:%s/#.*$//g 去掉空格:%s/\s//g]




    3.啟動FTP服務,並設定開機自動啟動.

    [root@localhost ~]# systemctl start vsftpd
    [root@localhost ~]# systemctl enable vsftpd

    配置本地使用者FTP伺服器

    作用:只有正確輸入使用者名稱和密碼才能存取數據.

    #[本地配置常用參數]
    local_enable=YES #是否啟用本地系統使用者
    local_umask=022 #本地使用者所上傳檔的許可權掩碼
    local_root=/var/ftp #設定本地使用者的FTP根目錄
    chroot_local_user=YES #是否將使用者禁錮在主目錄
    local_max_rate=0 #限制最大傳輸速率
    ftpd_banner=Welcome to blah FTP service #使用者登入時顯示的歡迎資訊
    banner_file=/目錄 #彈出一個說明,可以做哪些操作
    userlist_enable=YES &userlist_deny=YES #禁止/etc/vsftpd/user_list檔中出現的使用者名稱登入FTP
    userlist_enable=YES & userlist_deny=NO #僅允許/etc/vsftpd/user_list檔中出現的使用者名稱登入FTP

    1.安裝VSFTP伺服器.

    [root@localhost ~]# yum install -y vsftpd

    2.修改VSFTP主配置檔,覆蓋寫入以下內容,並去掉#號註釋即可.

    [root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
    pasv_enable=YES #開啟被動模式
    pasv_min_port=10000 #被動模式最小埠
    pasv_max_port=15000 #被動模式最大埠
    anonymous_enable=NO #允許匿名使用者登陸
    chroot_local_user=YES #把使用者禁錮在家目錄
    local_enable=YES #本地使用者允許登陸
    local_root=/ghost #指定本地使用者的ftp根目錄
    write_enable=YES #允許本地使用者上傳
    local_umask=022 #本地使用者上傳umask值
    xferlog_enable=YES #啟用記錄日誌
    xferlog_std_format=YES #使用標準ftp日誌的格式
    listen=YES #允許被偵聽
    pam_service_name=vsftpd #ftp采用pam預設使用者名稱密碼驗證
    userlist_enable=YES #使用者登陸限制
    tcp_wrappers=YES #網路存取限制機制
    #[開啟vim,輸入正則 去掉警號:%s/#.*$//g 去掉空格:%s/\s//g]



    3.建立使用者並指定其家目錄,建立用於儲存數據的目錄.

    [root@localhost ~]# useradd -s /sbin/nologin -d /ghost/lyshark lyshark
    [root@localhost ~]# passwd lyshark

    4.啟動FTP服務,並設定開機自動啟動.

    [root@localhost ~]# systemctl start vsftpd
    [root@localhost ~]# systemctl enable vsftpd

    配置匿名與本地混合FTP

    作用:匿名使用者可以檢視共享數據,登陸後有自己的儲存池.

    1.安裝VSFTP伺服器

    [root@localhost ~]# yum install -y vsftpd

    2.修改VSFTP主配置檔,覆蓋寫入以下內容,並去掉#號註釋即可.

    [root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
    pasv_enable=YES #開啟被動模式
    pasv_min_port=10000 #被動模式最小埠
    pasv_max_port=15000 #被動模式最大埠
    anonymous_enable=YES #允許匿名使用者登陸
    anon_umask=022 #設定匿名使用者umask
    anon_root=/var/ftp #匿名使用者ftp根目錄
    anon_upload_enable=YES #允許匿名使用者上傳
    anon_mkdir_write_enable=YES #允許匿名使用者建立目錄
    anon_other_write_enable=YES #開放其他人寫入許可權
    anon_max_rate=0 #限制最大傳輸速率
    local_enable=YES #允許本地使用者登入
    local_root=/ghost #指定本地使用者的ftp根目錄
    chroot_local_user=YES #把使用者禁錮在家目錄
    write_enable=YES #允許本地使用者上傳
    local_umask=022 #本地使用者上傳umask值
    xferlog_enable=YES #啟用記錄日誌
    xferlog_std_format=YES #使用標準ftp日誌的格式
    listen=YES #允許被偵聽
    pam_service_name=vsftpd #ftp采用pam預設使用者名稱密碼驗證
    userlist_enable=YES #使用者登陸限制
    tcp_wrappers=YES #網路存取限制機制
    #[開啟vim,輸入正則 去掉警號:%s/#.*$//g 去掉空格:%s/\s//g]


    3.建立使用者並指定其家目錄,建立用於儲存數據的目錄.

    [root@localhost ~]# useradd -s /sbin/nologin -d /ghost/lyshark lyshark
    [root@localhost ~]# passwd lyshark

    4.啟動FTP服務,並設定開機自動啟動.

    [root@localhost ~]# systemctl start vsftpd
    [root@localhost ~]# systemctl enable vsftpd

    配置虛擬使用者FTP伺服器

    作用:有時候建立本地使用者過多,嚴重影響系統效率,所有我們要使用虛擬使用者模式.

    [虛擬配置常用參數]
    anon_world_readable_only=NO #允許檢視和上傳下載檔
    anon_upload_enable=YES #允許上傳檔
    anon_world_readable_only=NO #允許檢視和上傳下載檔
    anon_mkdir_write_enable=YES #允許建立目錄
    anon_world_readable_only=NO #允許檢視和上傳下載檔
    anon_other_write_enable=YES #允許重名和刪除檔

    1.安裝相應軟體包,libdb-utls是資料庫包.

    yum install -y libdb-utils
    yum install -y vsftpd

    2.配置vlogin檔,vlogin檔名稱可自訂,寫入相應帳號以及密碼.

    [root@localhost ~]# vim /etc/vsftpd/vlogin
    Lyshark #奇數行寫帳號
    123456 #偶數行寫密碼

    3.將寫好的檔加密,並轉換成vlogin.db資料庫檔

    [root@localhost ~]# db_load -T -t hash -f /etc/vsftpd/vlogin /etc/vsftpd/vlogin.db

    4.設定資料庫檔的許可權,保證安全.

    [root@localhost ~]# chmod 600 /etc/vsftpd/{vlogin,vlogin.db}

    5.覆蓋編輯PAM檔,寫入以下內容.

    [root@localhost ~]# vim /etc/pam.d/vsftpd.pam
    auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vlogin
    account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vlogin

    6.建立一個對映帳號virtual,所有的登陸請求都是virtual.

    [root@localhost ~]# useradd -s /sbin/nologin -d /home/ftp virtual

    7.修改VSFTP主配置檔,覆蓋寫入以下內容,並去掉#號註釋即可.

    [root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
    pasv_enable=YES #開啟被動模式
    pasv_min_port=10000 #被動模式最小埠
    pasv_max_port=15000 #被動模式最大埠
    anonymous_enable=NO #允許匿名使用者存取
    local_enable=YES #允許本地使用者登入
    write_enable=YES #允許本地使用者上傳
    anon_upload_enable=YES #允許匿名使用者上傳
    anon_mkdir_write_enable=NO #允許匿名使用者建立目錄
    anon_other_write_enable=NO #開放其他人寫入許可權
    chroot_local_user=YES #把使用者禁錮在家目錄
    guest_enable=YES #啟動來賓使用者
    guest_username=virtual #來賓預設使用的使用者
    listen=YES #允許被偵聽
    listen_port=21 #偵聽21埠
    pam_service_name=vsftpd.pam #ftp采用pam預設使用者名稱密碼驗證
    user_config_dir=/etc/vsftpd_user_conf #指定虛擬使用者配置檔保存位置
    user_sub_token=$USER #對映使用者變量
    #[開啟vim,輸入正則 去掉警號:%s/#.*$//g 去掉空格:%s/\s//g]


    8.建立對應檔(用於保存許可權檔).

    [root@localhost ~]# mkdir /etc/vsftpd_user_conf
    [root@localhost ~]# mkdir -p /home/ftp/lyshark

    9.編輯檔給指定使用者分配許可權,用匿名使用者許可權分配.

    [root@localhost ~]# vim /etc/vsftpd_user_conf/lyshark
    local_root=/home/ftp/$USER
    anon_upload_enable=YES
    anon_mkdir_write_enable=YES
    anon_other_write_enable=YES
    chroot_local_user=YES
    # allow_writeable_chroot=YES #可在公共目錄下建立檔

    10.啟動FTP服務,並設定開機自動啟動.

    [root@localhost ~]# systemctl start vsftpd
    [root@localhost ~]# systemctl enable vsftpd

    OpenSSL+FTP 加密傳輸

    1.檢視是否安裝OpenSSL包.

    [root@localhost ~]# rpm -q openssl

    2.生成SSL加密金鑰對.

    [root@localhost ~]# openssl req -new -x509 -nodes -out vsftpd.pem -keyout vsftpd.pem
    [參數說明]
    req #標註格式
    -new #建立一個新的證書
    -x509 #證書內容格式
    -nodes #不使用密碼
    -out #生成檔名
    -keyout #生成的秘鑰檔名
    #建立時依次填寫:國家、省份、城市、組織、部門、個人或主機名、信箱

    3.把生成的證書放入特定目錄下,並給予最低許可權,保證安全.

    [root@localhost ~]# cp -a vsftpd.pem /etc/ssl/certs/
    [root@localhost ~]# chmod 500 /etc/ssl/certs/

    4.在VSFTP主配置中檔加入以下參數.

    [root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
    ssl_enable=YES #啟用ssl認證
    ssl_tlsv1=YES
    ssl_sslv2=YES #開啟tlsv1、sslv2、sslv3都支持
    ssl_sslv3=YES
    allow_anon_ssl=YES #允許匿名使用者
    force_anon_logins_ssl=YES
    force_anon_data_ssl=YES #匿名登入和傳輸時強制使用ssl
    force_local_logins_ssl=YES
    force_local_data_ssl=YES #本地登入和傳輸時強制使用ssl
    rsa_cert_file=/etc/ssl/certs/vsftpd.pem #證書檔所在目錄
    #[開啟vim,輸入正則 去掉警號:%s/#.*$//g 去掉空格:%s/\s//g]

    5.啟動FTP服務,並設定開機自動啟動.

    [root@localhost ~]# systemctl start vsftpd
    [root@localhost ~]# systemctl enable vsftpd

    Samba 檔共享

    smb: 實作資源共享、許可權驗證 -> TCP 139 445

    nmb: 實作電腦名解析 -> UDP 137

    Samba和FTP的區別

  • • Samba可以實作跨平台的檔傳輸,並且支持線上修改,這一點是它和FTP伺服器的明顯區別.

  • • Linux 系統之間的資源共享,我們使用的是NFS協定.

  • • Windows 系統之間的資源共享,我們使用的是NetBIOS協定.

  • • Linux 和 Windows 之間資源共享我們就要使用SMB協定了.CIFS協定.

  • 匿名驗證Samba配置

    匿名Samba的主要作用是,在區域網路內編輯共享檔,比如你有一個word檔需要讓大家填寫,此時我們就可以使用Samb服務將Word文件匿名分享出去,讓大家填寫文件

    配置伺服端

    1.首先透過yum,來安裝samba服務程式,恰巧samba服務名也是samba

    [root@localhost ~]# yum install -y samba samba-client
    Loaded plugins: product-id, search-disabled-repos, subscription-manager
    This system is not registered with an entitlement server. You can use subscription-manager.
    Package samba-4.7.1-6.el7.x86_64 already installed and latest version
    Package samba-client-4.7.1-6.el7.x86_64 already installed and latest version
    Nothing to do

    2.然後建立一個共享目錄,這個目錄主要用來儲存一些檔,後期要共享出去

    [root@localhost ~]# mkdir /smb_file
    [root@localhost ~]#
    [root@localhost ~]# chmod 755 -R /smb_file/
    [root@localhost ~]#

    3.編輯Samba主配置檔,在配置檔最下面建立匿名共享區域,如果有多個匿名區域可以繼續往下寫配置

    [root@localhost ~]# vim /etc/samba/smb.conf
    6 [global]
    7 workgroup = SAMBA
    8 security = user
    9 map to guest=Bad User #添加此項,開啟免密碼認證
     .....
     38
     39 [smb_file] #共享目錄顯示的名稱
     40 comment=hello guest #描述資訊(可以自訂)
     41 path=/smb_file #共享的目錄
     42 browseable=yes #共享目錄是否對所有人可見
     43 guest ok=yes #允許匿名使用者存取
     44 writable=yes #匿名使用者可寫
     45 public=yes #所有人可見

    4.重新開機SMB服務,並設定開機自啟動

    [root@localhost ~]# systemctl restart smb
    [root@localhost ~]# systemctl enable smb

    配置Linux客戶端

    1.首先想要使用Samba資源,需要在Linxu客戶端安裝一個Samba的客戶端工具,下面就開始安裝吧

    [root@localhost ~]# yum install -y samba-client
    Loaded plugins: product-id, search-disabled-repos, subscription-manager
    This system is not registered with an entitlement server. You can use subscription-manager.
    Package samba-client-4.7.1-6.el7.x86_64 already installed and latest version
    Nothing to do

    2.匿名使用者存取,我們可以直接使用下面的命令無需輸入密碼直接掃描資源,並使用

    [root@localhost ~]# smbclient -L //伺服器IP #檢視smaba共享目錄
    Enter SAMBA root s password:
    Sharename Type Comment
    --------- ---- -------
    print$ Disk Printer Drivers
    smb_file Disk hello guest
    IPC$ IPC IPC Service (Samba 4.7.1)
    Reconnecting with SMB1 for workgroup listing.
    Server Comment
    --------- -------
    Workgroup Master
    --------- -------
    [root@localhost ~]# smbclient //伺服器IP/共享名 #檢視共享檔
    Enter SAMBA root s password:
    Try "help" to get a list of possible commands.
    smb: \> ls
    . DR 0 Mon Nov 5 04:53:30 2018
    .. DR 0 Mon Nov 5 04:45:11 2018
    17811456 blocks of size 1024. 16582792 blocks available
    smb: \>





    配置Windows客戶端

    執行CMD(Win+R) > 輸入:\\伺服器IP\ 共享資源名 #存取目錄
    C:\Users\LyShark>net use * /del #清理windows目錄緩存

    你有以下的遠端連線:

    \\192.168.1.20\smb_file
    繼續執行會取消連線。
    你想繼續此操作嗎? (Y/N) [N]: y
    命令成功完成。

    密碼驗證Samba配置

    基於密碼驗證的Samba的常用作用是,在區域網路內,實作加密存取,只有知道相應密碼的人才能存取指定資源

    配置伺服端

    1.首先透過yum,來安裝samba服務程式,恰巧samba服務名也是samba

    [root@localhost ~]# yum install -y samba samba-client
    Loaded plugins: product-id, search-disabled-repos, subscription-manager
    This system is not registered with an entitlement server. You can use subscription-manager.
    Package samba-4.7.1-6.el7.x86_64 already installed and latest version
    Package samba-client-4.7.1-6.el7.x86_64 already installed and latest version
    Nothing to do

    2.然後建立一個共享目錄,這個目錄主要用來儲存一些檔,後期要共享出去

    [root@localhost ~]# mkdir /smb_file
    [root@localhost ~]#
    [root@localhost ~]# chmod 755 -R /smb_file/
    [root@localhost ~]#

    3.編輯Samba主配置檔,在配置檔最下面建立共享區域,如果有多個區域可以繼續往下寫配置

    [root@localhost ~]# vim /etc/samba/smb.conf
     39 [smb_file] #共享目錄顯示的名稱
     40 comment=hello admin #描述資訊(可以自訂)
     41 path=/smb_file #共享的目錄
     42 browseable=yes #共享目錄是否對所有人可見
     43 guest ok=no #允許匿名使用者存取
     44 writable=yes #可寫

    4.透過命令管理,建立一個系統使用者,並轉換為Samba使用者

    [root@localhost ~]# useradd -M -s /sbin/nologin admin #建立一個系統使用者
    [root@localhost ~]# smbpasswd -a admin #將系統使用者轉化成Samba使用者
    -----------------------------------------------------------------
    [參數說明]
    smbpasswd [選項] 帳戶名稱
    -a #添加帳戶並設定密碼
    -x #刪除SMB帳戶
    -d #禁用SMB帳戶
    -e #啟用SMB帳戶
    -----------------------------------------------------------------
    [root@localhost ~]# useradd -M -s /sbin/nologin guest #建立一個系統使用者
    [root@localhost ~]# pdbedit -a guest #將系統使用者轉化成Samba使用者
    new password:
    retype new password:
    Unix username: guest
    NT username:
    Account Flags: [U ]
    User SID: S-1-5-21-2500030998-3215874083-1041928306-1001
    Primary Group SID: S-1-5-21-2500030998-3215874083-1041928306-513
    Full Name:
    Home Directory: \\localhost\guest
    HomeDir Drive:
    Logon Script:
    Profile Path: \\localhost\guest\profile
    Domain: LOCALHOST
    Account desc:
    Workstations:
    Munged dial:
    Logon time: 0
    Logoff time: Wed, 06 Feb 2036 10:06:39 EST
    Kickoff time: Wed, 06 Feb 2036 10:06:39 EST
    Password last set: Mon, 05 Nov 2018 06:23:37 EST
    Password can change: Mon, 05 Nov 2018 06:23:37 EST
    Password must change: never
    Last bad password : 0
    Bad password count : 0
    Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

    [root@localhost ~]# pdbedit -L #列出所有Samba使用者
    admin:1001:
    guest:1002:



    5.重新開機SMB服務,並設定開機自啟動

    [root@localhost ~]# systemctl restart smb
    [root@localhost ~]# systemctl enable smb

    配置Linux客戶端

    1.首先想要使用Samba資源,需要在Linxu客戶端安裝一個Samba的客戶端工具,下面就開始安裝吧

    [root@localhost ~]# yum install -y samba-client
    Loaded plugins: product-id, search-disabled-repos, subscription-manager
    This system is not registered with an entitlement server. You can use subscription-manager.
    Package samba-client-4.7.1-6.el7.x86_64 already installed and latest version
    Nothing to do

    2.使用者存取,我們可以直接使用下面的命令輸入密碼掃描資源,並使用

    [root@localhost ~]# smbclient -U 使用者名稱 -L //伺服器IP #檢視共享目錄
    Enter SAMBA dmin s password:
    Sharename Type Comment
    --------- ---- -------
    print$ Disk Printer Drivers
    smb_file Disk hello admin
    IPC$ IPC IPC Service (Samba 4.7.1)
    admin Disk Home Directories
    Reconnecting with SMB1 for workgroup listing.
    Server Comment
    --------- -------
    Workgroup Master
    --------- -------
    [root@localhost ~]# smbclient -U 使用者名稱 //伺服器IP/共享檔名 #檢視共享檔
    Enter SAMBA dmins password:
    Try "help" to get a list of possible commands.
    smb: \> ls
    . D 0 Mon Nov 5 06:30:02 2018
    .. DR 0 Mon Nov 5 06:17:37 2018
    lyshark N 988 Mon Nov 5 06:23:28 2018
    17811456 blocks of size 1024. 16584148 blocks available




    Linux掛載Samba

    1.將遠端的smb_file共享目錄,掛載到原生的/mnt下,我們可以執行以下命令

    [檔格式] [/smb_file共享目錄][掛載到/mnt] [username=smb使用者名稱][password=smb密碼]
    [root@localhost ~]# mount -t cifs //192.168.1.20/smb_file /mnt -o username=admin,password=123123
    [root@localhost ~]#
    [root@localhost ~]# df -h
    Filesystem Size Used Avail Use% Mounted on
    /dev/mapper/rhel-root 17G 1.2G 16G 7% /
    //192.168.1.20/smb_file 17G 1.2G 16G 7% /mnt

    NFS 實作檔共享

    NFS 即網路檔案系統,是一種使用於分布式檔案系統的協定,NFS 功能是透過網路讓不同的機器,不同的作業系統能夠彼此分享各自的數據,讓應用程式在客戶端透過網路存取位於伺服器磁盤中的數據,是在類Unix系統間實作磁盤檔共享的一種方法.

    目前NFS有三個版本,其常用的版本解析

  • • NFSv2:是一個古老的版本,但卻被眾多的作業系統所支持,這樣相容性更好.

  • • NFSv3:擁有更多的特點,包括更快的速度,更大的單個檔大小,對TCP的支持.

  • • NFSv4:提供有狀態連線,共容易追蹤,安全性增強,RHEL7上預設4版本協定.

  • 在啟動NFS Server之前,首先要啟動RPC服務否則NFS Server就無法向RPC服務區註冊,另外如果RPC服務重新啟動,原來已經註冊好的NFS埠數據就會全部遺失.因此此時RPC服務管理的NFS程式也要重新啟動以重新向RPC註冊.

    NFS系統的守護行程介紹

  • • RPC:(Remote Procedure Call Protocol),遠端程序呼叫協定

  • • NFS:它是基本的NFS守護行程,主要功能是管理客戶端是否能夠登入伺服器

  • • RPCbind:主要功能是進行埠對映工作,和埠代理分配等

  • 客戶端NFS和伺服端NFS通訊過程

  • • 首先伺服器端啟動RPC服務,並開啟111埠

  • • 啟動NFS服務,並向RPC註冊埠資訊

  • • 客戶端啟動RPC,向伺服端的RPC服務請求伺服端的NFS埠

  • • 伺服端的RPC服務,反饋NFS埠資訊給客戶端

  • • 客戶端透過獲取的NFS埠來建立和伺服端的NFS連線並進行數據的傳輸

  • NFS伺服器是透過讀取/etc/exports配置檔設定那個客戶端可以存取那些NFS共享檔案系統,該檔書寫原則有如下幾條.

  • • 空白行的內容將被忽略

  • • 以#號開頭的內容是註釋

  • • 可以透過\轉義字元換行

  • • 每個共享檔案系統需要獨立一行條目

  • • 客戶端的主機列表需要使用空格隔開

  • • 接下來我們來看一下一條完整的規則條目是如何書寫的吧,需要註意的是客戶端主機可以是一個網段,單台主機或者是主機名稱,在使用時應該靈活運用.

  • [共享目錄] [允許誰來存取][許可權] [可用主機名][許可權] [其他主機許可權]
    /nfs 192.168.1.1(rw) localhost(rw) *(ro,sync)
    /nfs 192.168.1.0/24(rw) localhost(rw) *(ro,sync)
    /nfs 192.168.1.1(rw) 192.168.1.2(ro) 192.168.1.3(ro,sync)

    如上所示,有個許可權列表,NFS配置中可以給一個共享路徑指定相關許可權,NFS的預設內容為ro,sync,wdelay,root_squash,具體的NFS內容列表,我們可以參考一下列表.

    以上的幾個說明資訊,是我們最常用的幾個,當然還有很多這樣的配置選項,這裏就不依次列舉了,更多內容請百度了解.

    NFS 伺服端配置

    1.在配置NFS共享檔之前,我們先來放行NFS的幾個常用服務,並將防火墻預設設定為拒絕狀態.

    [root@localhost ~]# firewall-cmd --add-service=nfs
    [root@localhost ~]# firewall-cmd --add-service=mountd
    [root@localhost ~]# firewall-cmd --add-service=rpc-bind
    [root@localhost ~]# firewall-cmd --add-service=nfs --permanent
    [root@localhost ~]# firewall-cmd --add-service=mountd --permanent
    [root@localhost ~]# firewall-cmd --add-service=rpc-bind --permanent

    2.透過YUM倉庫快速安裝NFS相關的軟體包.

    [root@localhost ~]# yum install -y rpcbind nfs-utils*
    Package rpcbind-0.2.0-47.el7.x86_64 already installed and latest version
    Package 1:nfs-utils-1.3.0-0.61.el7.x86_64 already installed and latest version
    Nothing to do

    3.建立需要共享的檔,並拷貝相關的檔內容,並設定SeLinux規則.

    [root@localhost ~]# mkdir -p /public
    [root@localhost ~]# chmod o+rw /public/
    [root@localhost ~]# chcon -R -t public_content_t /public/

    4.修改NFS主配置檔,並寫入要存取的主機列表.

    [root@localhost ~]# vim /etc/exports
    /public 192.168.1.0/24(rw,sync)
    #-----------------------------------------------------------------
    # 其他完整寫法,可參考以下配置方式
    #[共享目錄] [允許誰來存取][許可權] [可用主機名][許可權] [其他主機許可權]
    #/nfs 192.168.1.1(rw) localhost(rw) *(ro,sync)
    #/nfs 192.168.1.0/24(rw) localhost(rw) *(ro,sync)

    5.重新開機NFS服務,和守護行程,並設定開機自啟動.

    [root@localhost ~]# systemctl restart nfs
    [root@localhost ~]# systemctl restart rpcbind
    [root@localhost ~]# systemctl enable nfs
    [root@localhost ~]# systemctl enable rpcbind
    [root@localhost ~]# systemctl restart nfs-server
    [root@localhost ~]# systemctl enable nfs-server

    NFS 客戶端配置

    1.透過YUM倉庫快速安裝NFS相關的軟體包.

    [root@localhost ~]# yum install -y rpcbind nfs-utils*
    Package rpcbind-0.2.0-47.el7.x86_64 already installed and latest version
    Package 1:nfs-utils-1.3.0-0.61.el7.x86_64 already installed and latest version
    Nothing to do

    2.建立掛載點,並設定SeLinux規則.

    [root@localhost ~]# mkdir -p /mnt/nfsmount
    [root@localhost ~]# chcon -R -t public_content_t /mnt/nfsmount

    NFS掛載演示: 手動掛載目錄,可透過mount命令來實作,具體的掛載參數如下.

    #mount -t nfs -o 選項 服務主機:/伺服器共享目錄 /本地掛載沒記錄
    [root@localhost ~]# mount -t nfs -o rw,sync 192.168.1.5:/public /mnt/nfsmount
    [root@localhost ~]# df -hT |grep "public"
    Filesystem Type Size Used Avail Use% Mounted on
    192.168.1.5:/public nfs4 17G 1.9G 16G 12% /mnt/nfsmount

    具體的掛載詳細參數如下:

  • • Intr:當伺服器宕機時終端NFS請求

  • • nfsvers=4:指定使用那個版本的協定

  • • noacl:關閉ACL,僅與老版本相容

  • • nolock:關閉檔鎖機制

  • • noexec:掛載時遮蔽二進制程式

  • • port=num:指定NFS伺服器埠號

  • • rsize=num:設定最大數據塊大小(讀取)

  • • wsize=num:設定最大數據塊大小(寫入)

  • • tcp:使用TCP協定掛載

  • • udp:使用UDP協定掛載

  • nfsstat命令: NFS提供了檢視NFS共享狀態功能.

    [root@localhost ~]# nfsstat #顯示伺服端與客戶端狀態
    [root@localhost ~]# nfsstat -s #只顯示伺服端狀態
    [root@localhost ~]# nfsstat -c #只顯示客戶端狀態
    [root@localhost ~]# nfsstat -n #僅顯示NFS與RPC資訊
    [root@localhost ~]# nfsstat -m #顯示掛載資訊
    [root@localhost ~]# nfsstat -l #以列表資訊顯示資訊

    rpcinfo命令: NFS生成RPC資訊報表功能.

    [root@localhost ~]# rpcinfo -m 127.0.0.1 #顯示指定主機rpcbind操作列表
    [root@localhost ~]# rpcinfo -p 127.0.0.1 #顯示指定主機RPC註冊資訊 
    [root@localhost ~]# rpcinfo -s #顯示所有RPC註冊資訊

    showmount命令: NFS使用shomount命令可以檢視遠端主機共享列表.

    [root@localhost ~]# showmount -e 127.0.0.1 #顯示伺服器可用資源
    [root@localhost ~]# showmount -a 127.0.0.1 #檢視所有客戶連結資訊
    [root@localhost ~]# showmount -d 127.0.0.1 #只顯示客戶輸出資訊

    exportfs命令: 此命令允許root在不重新開機NFS服務情況下,選擇共享或取消共享檔.

    [root@localhost ~]# exportfs -a #全部掛載或解除安裝配置檔中的內容
    [root@localhost ~]# exportfs -r #重新載入配置檔中的資訊
    [root@localhost ~]# exportfs -u #停止單一目錄的共享
    [root@localhost ~]# exportfs -au #停止所有伺服端的共享
    [root@localhost ~]# exportfs -ra #重新共享所有目錄

    配置固定埠: 我們可以修改配置檔來實作配置固定的共享埠號.

    [root@localhost ~]# vim /etc/sysconfig/nfs
    RQUOTAD_PORT=5001
    LOCKD_TCPPORT=5002 #設定tcp的ockd程式埠號
    LOCKD_UDPPORT=5002 #設定udp的lockd程式埠號
    MOUNTD_PORT=5003 #設定mountd程式埠號
    STATD_PORT=5004 #設定rpc.statd程式埠號

    設定自動掛載: 修改自動掛載目錄,寫入以下內容即可實作自動掛載.

    [root@localhost ~]# vim /etc/fstab
    192.168.1.1:/public /mnt/nfsmount nfs default 0 0

    iSCSI 磁盤共享服務

    iSCSI技術是一種新儲存技術, iSCSI 提供了在 IP 網路封裝 SCSI 命令,且以TCP/IP協定傳輸.

    配置iSCSI伺服端

    1.透過yum安裝iSCSI伺服端,此處已安裝成功,略過本步驟

    [root@localhost ~]# yum install -y targetd targetcli
    Loaded plugins: product-id, search-disabled-repos, subscription-manager
    This system is not registered with an entitlement server. You can use subscription-manager.
    Package targetd-0.8.6-1.el7.noarch already installed and latest version
    Package targetcli-2.1.fb46-1.el7.noarch already installed and latest version
    Nothing to do

    2.安裝成功後,手動啟動iSCSI服務,並設定開機自啟動 (註意:iSCSI服務程式為targetd)

    [root@localhost ~]# systemctl restart targetd
    [root@localhost ~]# systemctl enable targetd

    3.檢視iSCSI伺服端共享資源,targetcli是用於管理iSCSI服務的專用命令,在執行命令是可看到互動界面.

    [root@localhost ~]# targetcli
    Warning: Could not load preferences file /root/.targetcli/prefs.bin.
    targetcli shell version 2.1.fb46
    Copyright 2011-2013 by Datera, Inc and others.
    For help on commands, type 'help'.
    /> ls
    o- / .................................................................... [...]
    o- backstores ......................................................... [...]
    | o- block ............................................................ [Storage Objects: 0]
    | o- fileio ........................................................... [Storage Objects: 0]
    | o- pscsi ............................................................ [Storage Objects: 0]
    | o- ramdisk .......................................................... [Storage Objects: 0]
    o- iscsi .............................................................. [Targets: 0]
    o- loopback ........................................................... [Targets: 0]
    />

    4.進入/backstores/block共享裝置位置,並建立共享裝置名稱 (註意:/backstores/block是iSCSI伺服端配置共享裝置的位置)

    /> cd backstores/block #進入共享裝置位置
    /backstores/block> create disk0 /dev/sdb #建立共享裝置名稱 此處將 /dev/sdb 加入到裝置中命名為disk0
    Created block storage object disk0 using /dev/sdb.
    /backstores/block> cd / #返回根
    /> ls
    o- / ............................................................. [...]
    o- backstores .................................................. [...]
    | o- block ..................................................... [Storage Objects: 1]
    | | o- disk0 ................................................... [/dev/sdb (20.0GiB) write-thru deactivated]
    | | o- alua .................................................. [ALUA Groups: 1]
    | | o- default_tg_pt_gp .................................... [ALUA state: Active/optimized]
    | o- fileio .................................................... [Storage Objects: 0]
    | o- pscsi ..................................................... [Storage Objects: 0]
    | o- ramdisk ................................................... [Storage Objects: 0]
    o- iscsi ....................................................... [Targets: 0]
    o- loopback .................................................... [Targets: 0]
    />

    5.建立iSCSI target名稱及配置共享資源,iSCSI target 名稱是由系統自動生成的,這是一串用於描述共享資源的唯一字串

    /> cd iscsi #進入iSCSI目錄
    /iscsi> create #建立target標簽
    Created target iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.8c7dcc63aea8.
    Created TPG 1.
    Global pref auto_add_default_portal=true
    Created default portal listening on all IPs (0.0.0.0), port 3260.
    /iscsi>
    /iscsi> cd iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.8c7dcc63aea8/ #進入上面的標簽中
    /iscsi/iqn.20....8c7dcc63aea8> ls #檢視標簽內容
    o- iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.8c7dcc63aea8 ........ [TPGs: 1]
    o- tpg1 ............................................................. [no-gen-acls, no-auth]
    o- acls ........................................................... [ACLs: 0]
    o- luns ........................................................... [LUNs: 0]
    o- portals ........................................................ [Portals: 1]
    o- 0.0.0.0:3260 ................................................. [OK]
    /iscsi/iqn.20....8c7dcc63aea8> cd tpg1/luns #進入tpg目錄
    /iscsi/iqn.20...ea8/tpg1/luns> create /backstores/block/disk0 #標簽與裝置繫結
    Created LUN 0.

    6.配置存取控制列表(ACL),iSCSI裝置無需密碼進行驗證,只需知道標簽名稱即可透過,因此需要在iSCSI伺服端的配置檔中寫入一串能夠驗證資訊的名稱,這裏推薦在系統生成的標簽後面加上識別元,:client參數,保證標簽唯一性,同時方便區別和管理

    /> cd iscsi/iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.8c7dcc63aea8 #進入指定標簽
    /iscsi/iqn.20....8c7dcc63aea8> cd tpg1/acls #進入ACL配置列表
    /iscsi/iqn.20...ea8/tpg1/acls> create iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.8c7dcc63aea8:client #建立用於掛載的標簽
    Created Node ACL for iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.8c7dcc63aea8:client
    Created mapped LUN 0.
    /iscsi/iqn.20...ea8/tpg1/acls>

    7.設定iSCSI伺服器的監聽IP地址和埠號,即在portals參數目錄中寫上伺服器的IP地址,接下來系統會自動開啟伺服器192.168.1.20的3260號埠,為外部提供共享儲存服務

    /> cd /iscsi/iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.8c7dcc63aea8/ #進入操作的標簽
    /iscsi/iqn.20....8c7dcc63aea8> cd tpg1/portals/ #進入埠配置
    /iscsi/iqn.20.../tpg1/portals> ls
    o- portals ...................................................................... [Portals: 1]
    o- 0.0.0.0:3260 ............................................................... [OK]
    /iscsi/iqn.20.../tpg1/portals>
    /iscsi/iqn.20.../tpg1/portals> delete 0.0.0.0 3260 #刪除原有配置
    Deleted network portal 0.0.0.0:3260
    /iscsi/iqn.20.../tpg1/portals> create 192.168.1.20 #建立偵聽本機
    Using default IP port 3260
    Created network portal 192.168.1.20:3260.
    /iscsi/iqn.20.../tpg1/portals> ls
    o- portals ...................................................................... [Portals: 1]
    o- 192.168.1.20:3260 .......................................................... [OK]
    /iscsi/iqn.20.../tpg1/portals>

    8.配置全部妥當後檢查一下,沒問題的話保存.

    /iscsi/iqn.20.../tpg1/portals> cd /
    />
    /> ls
    o- / ................................................................... [...]
    o- backstores ........................................................ [...]
    | o- block ........................................................... [Storage Objects: 1]
    | | o- disk0 ......................................................... [/dev/sdb (20.0GiB) write-thru activated] #磁盤名稱
    | | o- alua ........................................................ [ALUA Groups: 1]
    | | o- default_tg_pt_gp .......................................... [ALUA state: Active/optimized]
    | o- fileio .......................................................... [Storage Objects: 0]
    | o- pscsi ........................................................... [Storage Objects: 0]
    | o- ramdisk ......................................................... [Storage Objects: 0]
    o- iscsi ............................................................. [Targets: 1]
    | o- iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.8c7dcc63aea8 ..... [TPGs: 1] #標簽名稱
    | o- tpg1 .......................................................... [no-gen-acls, no-auth]
    | o- acls ......................................................................... [ACLs: 1]
    | | o- iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.8c7dcc63aea8:client ......... [Mapped LUNs: 1] #自訂標簽
    | | o- mapped_lun0 .............................................................. [lun0 block/disk0 (rw)]
    | o- luns ......................................................................... [LUNs: 1]
    | | o- lun0 ..................................................... [block/disk0 (/dev/sdb) (default_tg_pt_gp)]
    | o- portals ...................................................................... [Portals: 1]
    | o- 192.168.1.20:3260 .......................................................... [OK] #開啟埠
    o- loopback ........................................................................... [Targets: 0]
    /> exit
    Global pref auto_save_on_exit=true
    Last 10 configs saved in /etc/target/backup.
    Configuration saved to /etc/target/saveconfig.json
    [root@localhost ~]#

    9.重新開機SCSI服務,到此伺服器已經配置完畢

    [root@localhost ~]# systemctl restart targetd
    [root@localhost ~]# systemctl enable targetd

    配置Linux客戶端

    1.安裝iSCSI客戶端元件,在RHEL7系統中已經預設整合,如果沒有請執行以下步驟,此處就略過

    [root@localhost ~]# yum install -y iscsi-initiator-utils iscsi-initiator-utils-iscsiuio
    Loaded plugins: product-id, search-disabled-repos, subscription-manager
    This system is not registered with an entitlement server. You can use subscription-manager .
    Package iscsi-initiator-utils-6.2.0.874-7.el7.x86_64 already installed and latest version
    Package iscsi-initiator-utils-iscsiuio-6.2.0.874-7.el7.x86_64 already installed and latest version
    Nothing to do

    2.編輯iSCSI客戶端中的initiator名稱檔,把伺服端的存取控制列表名稱填寫進來,然後重新開機iscsid服務程式,並將其加入到開機自啟動列表

    [root@localhost ~]# vim /etc/iscsi/initiatorname.iscsi
    [root@localhost ~]#
    [root@localhost ~]# cat /etc/iscsi/initiatorname.iscsi
    InitiatorName=iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.8c7dcc63aea8:client
    [root@localhost ~]# systemctl restart iscsid
    [root@localhost ~]# systemctl enable iscsid

    3.發現iSCSI伺服端儲存資源,其中:-m discovery 參數的目的是掃描並行現儲存資源,-t st 參數為執行掃描操作的型別,-p 參數後為iSCSI伺服端的IP地址

    [root@localhost ~]# iscsiadm -m discovery -t st -p 192.168.1.20 #下圖顯示,找到一個標簽地址
    192.168.1.20:3260,1 iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.8c7dcc63aea8
    [root@localhost ~]#

    4.接下來準備登陸iSCSI伺服器,其中:

    -m node 參數為將客戶端主機作為一台節點伺服器,
    -T iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.8c7dcc63aea8 參數為要使用的儲存標簽,
    -p 後面為iSCSI伺服器的IP地址,
    --login 參數為登陸伺服器,如果加 -u參數為解除安裝掛載資源

    [root@localhost ~]# iscsiadm -m node -T iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.8c7dcc63aea8 -p 192.168.1.20 --login
    Logging in to [iface: default, target: iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.8c7dcc63aea8, portal: 192.168.1.20,3260] (multiple)
    Login to [iface: default, target: iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.8c7dcc63aea8, portal: 192.168.1.20,3260] successful.

    5.此時在iSCSI客戶端上會多出一個/dev/sdb磁盤裝置檔,接下來我們直接格式化掛在到/network-disk目錄下

    root@localhost ~]# ll /dev/sd*
    brw-rw----. 1 root disk 8, 0 Nov 4 11:45 /dev/sda
    brw-rw----. 1 root disk 8, 1 Nov 4 11:45 /dev/sda1
    brw-rw----. 1 root disk 8, 2 Nov 4 11:45 /dev/sda2
    brw-rw----. 1 root disk 8, 16 Nov 4 12:06 /dev/sdb #此處就是遠端的磁盤
    [root@localhost ~]# mkfs.xfs /dev/sdb #格式化這個裝置
    meta-data=/dev/sdb isize=512 agcount=4, agsize=1310720 blks
    = sectsz=512 attr=2, projid32bit=1
    = crc=1 finobt=0, sparse=0
    data = bsize=4096 blocks=5242880, imaxpct=25
    = sunit=0 swidth=0 blks
    naming =version 2 bsize=4096 ascii-ci=0 ftype=1
    log =internal log bsize=4096 blocks=2560, version=2
    = sectsz=512 sunit=0 blks, lazy-count=1
    realtime =none extsz=4096 blocks=0, rtextents=0
    [root@localhost ~]# mkdir /network-disk #建立掛載目錄
    [root@localhost ~]# mount /dev/sdb /network-disk/ #掛載裝置
    [root@localhost ~]#
    [root@localhost ~]# df -h
    Filesystem Size Used Avail Use% Mounted on
    /dev/mapper/rhel-root 17G 1.2G 16G 7% /
    devtmpfs 98M 0 98M 0% /dev
    tmpfs 110M 0 110M 0% /dev/shm
    /dev/sda1 1014M 130M 885M 13% /boot
    /dev/sr0 4.4G 4.4G 0 100% /mnt
    /dev/sdb 20G 33M 20G 1% /network-disk


    iSCSI客戶端經過以上步驟之後,這個裝置檔就可以像使用本地磁盤檔一樣的操作啦

    6.接下來配置一下自動掛載功能,需要註意的是,掛載選項必須為_netdev,寫錯的話系統無法開機.

    由於/dev/sdb/是一個網路裝置,而iSCSI是基於TCP/IP網路傳輸數據的,因此在配置自動掛載是應該加入_netdev參數,說明其是一個網路裝置

    [root@localhost /]# ll /dev/disk/by-uuid/
    total 0
    lrwxrwxrwx. 1 root root 10 Nov 4 11:45 12b3708e-7ca4-4911-bfa2-57b85960e8e5 -> ../../dm-0
    lrwxrwxrwx. 1 root root 9 Nov 4 11:45 2018-03-22-19-04-59-00 -> ../../sr0
    lrwxrwxrwx. 1 root root 10 Nov 4 11:45 3d4eea6b-1db9-4d30-9174-bfac6faa4cab -> ../../sda1
    lrwxrwxrwx. 1 root root 10 Nov 4 11:45 e791c0bf-f6e9-4843-b18d-be40cf3964c2 -> ../../dm-1
    lrwxrwxrwx. 1 root root 9 Nov 4 12:08 ff233cc4-2255-4973-a686-9d394384faf6 -> ../../sdb
    [root@localhost /]# vim /etc/fstab
    [root@localhost /]# cat /etc/fstab
    #
    # /etc/fstab
    # Created by anaconda on Sat Oct 13 12:32:13 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 0 0
    UUID=3d4eea6b-1db9-4d30-9174-bfac6faa4cab /boot xfs defaults 0 0
    UUID=ff233cc4-2255-4973-a686-9d394384faf6 /network-disk xfs defaults,_netdev 0 0
    [root@localhost /]# mount -a


    如需配置Windows客戶端只需要執行以下步驟.

  • • 1.單擊控制台 --> 管理工具 --> iSCSI發起程式

  • • 2.在目標索引標籤 --> 輸入伺服器IP地址 --> 單擊快速連線

  • • 3.選擇配置索引標籤 --> 單擊更改 --> 在標簽末尾加上自訂的字元,此處為:client --> 單擊確定

  • • 4.單擊目標索引標籤 --> 單擊下方的連線按鈕

  • • 5.單擊此電腦 --> 右鍵選擇管理 --> 選擇磁盤管理 --> 即可看到磁盤資訊

  • 出處:https://cnblogs.com/LyShark/p/15344714.html

    👍 如果你喜歡這篇文章,請點贊並分享給你的朋友!

    公眾號讀者專屬技術群

    構建高品質的技術交流社群,歡迎從事後端開發、運維技術進群( 備註崗位,已在技術交流群的請勿重復添加微信好友 )。主要以技術交流、內推、行業探討為主,請文明發言。 廣告人士勿入,切勿輕信私聊,防止被騙。

    掃碼加我好友,拉你進群

    PS:因為公眾號平台更改了推播規則,如果不想錯過內容,記得讀完點一下 在看 ,加個 星標 ,這樣每次新文章推播才會第一時間出現在你的訂閱列表裏。 在看 支持我們吧!