NFS伺服器(第二版)

NFS(Network FileSystem)的功能就是可以透過網路,讓不同的機器、不同的作業系統、可以彼此分享個別的檔案 (share files) 並進行操作。


NFS Server(10.10.10.160)
NFS 需要遠端程序呼叫 (RPC) 的服務,因此安裝 rpcbind 套件。
RPC服務啟動後,會開啟應用程式portmapper(111 port),這支應用程式的功能有2個:
  1. NFS或NIS服務啟動時,會先portmapper註冊,由portmapper動態分配port number。
  2. 讓客戶端提出NFS服務要求時,必須透過portmapper得到正確的NFS資訊。
# yum install -y nfs-utils rpcbind
開機時啟動
# chkconfig nfs on
# chkconfig rpcbind on

啟動服務
# service rpcbind start  // 先啟動
# service nfs start  // NFS服務向portmapper註冊,要求mountd的port number。

註:NFS啟動後會提供2個服務程式rpc.mountd(/etc/exports)及rpc.nfsd。

新增1GB容量的分割區供客戶端掛載 # palimpsest &  // 新分割代號/dev/sda4,使用palimpsest的好處是不用重開機。
# mkfs.ext4 /dev/sda4
# mkdir /mnt/nfs  // 建立掛載點
# chmod 1775 /mnt/nfs
# mount /dev/sda4 /mnt/nfs

固定mountd的port number,因為開機或重啟服務時port number是隨機產生的,如果沒有固定,無法進行防火牆的設定。 # cp /etc/sysconfig/nfs /etc/sysconfig/nfs.bak
# sed 's/#MOUNTD_PORT=892/MOUNTD_PORT=12345/g' /etc/sysconfig/nfs
# sed -i 's/#MOUNTD_PORT=892/MOUNTD_PORT=12345/g' /etc/sysconfig/nfs  // 參數-i:直接修改讀取的檔案內容,而不是由螢幕輸出。
# service nfs restart  // 固定port number之後必須重啟服務才會生效

防火牆設定:請注意先後順序
# iptables -F
# service iptables save
# iptables -I INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
# iptables -I INPUT -i eth0 -m state --state NEW,INVALID -j DROP
# iptables -I INPUT -i eth0 -p tcp --dport 111 -m state --state NEW -j ACCEPT  // 沒開111port,客戶端rpcinfo和showmount會卡住
# iptables -I INPUT -i eth0 -p tcp --dport 111 -m state --state NEW -j ACCEPT
# iptables -I INPUT -i eth0 -p tcp --dport 12345 -m state --state NEW -j ACCEPT
# iptables -I INPUT -i eth0 -p tcp --dport 12345 -m state --state NEW -j ACCEPT
# iptables -I INPUT -i eth0 -p tcp --dport 2049 -m state --state NEW -j ACCEPT

NFS 伺服器端分享資料夾設定
# vim /etc/exports
 /mnt/nfs *(rw,sync)
# exportfs -r

補充:
  • NFS真正的設定檔在/var/lib/nfs/etab
  • # cat /var/lib/nfs/etab
     /mnt/nfs *(ro,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,anonuid=65534,anongid=65534)

  • 修改 /etc/exports 內容後,重啟 NFS 服務套用更新,但會使得在線上的使用者斷線,使用以下指令可避免此情況發生。
  • # exportfs -rv  // 參數『v』代表詳細模式,可以不用加
  • 以下四個參數,讓 NFS 客戶端使用者登入 NFS 伺服端時,轉換身份(以 UID 為主)並取得相對應的權限操作。


  • NFS Client(10.10.10.129) # rpcinfo -p 10.10.10.160  // 查看NFS伺服器是否有提供NFS服務
    # showmount -e 10.10.10.160
     Export list for 10.10.10.160:
     /mnt/nfs *
    # mkdir /mnt/nfsclient
    # mount 10.10.10.160:/mnt/nfs /mnt/nfsclient
    # df -h
     檔案系統 1K- 區段 已用 可用 已用 % 掛載點
     10.10.10.160:/mnt/nfs 996M 18M 929M 2% /mnt/nfsclient

    注意:無法對資料夾/mnt/nfsclient進行新增刪除的操作。
    NFS客戶端的身份為管理者root,但登入NFS伺服端後,系統會變更成使用者nfsnobody,而nfsnobody的權限對資料夾只有讀的權限。
    有2種方法可以解決這個問題,都是在NFS伺服器端上設定
    1. 將共享資料夾的使用者權限變更成xx7
    2. 在/etc/exports組態檔中加入no_root_squash參數,讓客戶端的管理者登入後亦維持管理者身份但此舉會降低系統安全性的風險
    開機時掛載
    # vim /etc/fstab
     10.10.10.160:/mnt/nfs /mnt/nfsclient/ nfs ro 0 0

    Troubleshooting


  • 無法掛載:若出現被 NFS Server 拒絶的訊息,請先檢查是否有權限存取。假設 NFS Server 設定只有 10.10.10.128 可以存取,但目前的 NFS Client 的 IP 是 10.10.10.129,因此會被拒絕。
  • client # mount nfs_server_ip:/var/ftp /mnt/nfsclient
       mount.nfs: access denied by server while mounting nfs_server_ip:/var/ftp
    client # showmount -e nfs_server_ip
       Export list for nfs_server_ip:
       /var/ftp 10.10.10.128

    沒有留言:

    張貼留言