2008年9月30日 星期二

Debian NFS設定

  • 安裝NFS

    debian:~# apt-get install nfs-common nfs-kernel-server portmap

  • Server端設定

    debian:~# vi /etc/exports

    add

    /mnt/sahre 140.134.1xx.1xx(rw,sync,subtree_check) hostname(ro,sync,subtree_check)

    參數設定

    ro 只允許讀取
    rw 允寫讀寫
    sync 檔案同步
    async 同步前回應
    subtree_check 如果共享/usr/bin之類的子目錄時,強制NFS檢查父目錄的權限
    no_subtree_check 不檢查
    all_squash 所有用戶皆為匿名者身份
    anonuid 匿名者使用哪一個帳號的 UID
    anongid 匿名者使用哪一個帳號的 GID

  • 重新載入設定的方式

    debian:~# /etc/init.d/nfs-kernel-server restart

    或是執行指令

    debian:~# exportfs -r

  • 遠端掛載

    debian:~# mount -t nfs 140.134.1xx.1xx:/mnt/share remote

  • 卸載

    server

    debian:~# exports -au

    client

    debian:~# umount remote

  • 開機自動掛載設定

    debian:~# vi /etc/fstab
    add

    /mnt/sahre ip_hostname(rw,async,all_squash,anonuid=1000,anongid=1000)

  • 防火牆的設定

    nfs使用到的port為2049(nfs-kernel-server)、111(portmap)及一個1024以下的隨選port(rpc.mountd),要做到防火牆設定必需把rpc.mountd的port固定住

    debian:~# vi /etc/default/nfs-kernel-server

    fix

    RPCMOUNTDOPTS="--port 32767" #指定port

    save & exit

    設定iptables

    iptables -A INPUT -i $nic_output -p tcp -s source_ip --dport 111 -j ACCEPT
    iptables -A INPUT -i $nic_output -p udp -s source_ip --dport 111 -j ACCEPT
    iptables -A INPUT -i $nic_output -p tcp --dport 2049 -j ACCEPT
    iptables -A INPUT -i $nic_output -p tcp --dport 32767 -j ACCEPT

  • 安裝autofs

    debian:~# apt-get install autofs

    要掛載遠端機器 hostname 上的 /directory 目錄到您機器的 /mnt/nfs/share 掛載點

    debian:~# vi auto.master

    add

    /mnt/nfs   /etc/auto.nfs --timeout 60

    save&exit

    debian:~# vi /etc/auto.nfs

    add

    share -rw,soft,intr,rsize=8192,wsize=8192 hostname:/directory

    save&exit

    debian:~# /etc/init.d/autofs restart

    之後只要你嘗試進入 /mnt/nfs/share 目錄,autofs 即會自動幫你掛載該 nfs 目錄

  • 除錯參考

    當/etc/exports設定的權限,不符合client端的來源時,則會出現錯誤訊息如下

    mount: hostname:/dir failed, reason given by server: Permission denied

    然而必須注意的是,若在nfs server的/etc/hosts內有設定IP與hostname的對照,則nfs會先把來源IP轉換成hostname,再與/etc/exports內的設定作對照,若此時/etc/exports的設定使用IP而非hostname,則會產生無法匹配的情況,因此而出現,雖然來源IP在/etc/exports已正確設定,卻仍然發生Permission denied的怪異現象

    解決方案是在/etc/exports內採用hostname,避免使用IP

  • 老師上課的資料

    NFS

    NFS,Network File System 網路檔案系統,是 UNIX/Linux 與 UNIX/Linux 之間檔案分享的一種服務。

    設定前,請先檢查通訊協定 RPC(Remote Procedure Call)中的 portmapper 是否正常運作?

    查詢 RPC 服務,請使用 rpcinfo 指令。# rpcinfo -p

    安裝

    portmapper 安裝 # apt-get install portmap

    NFS 安裝 # apt-get install nfs-kernel-server

    設定

    NFS 主要設定檔為 /etc/exports 檔案,內容格式相當簡單,檔案內各欄位如下說明:

    • 欄位#1 → 要分享的檔案目錄實際路徑。
    • 欄位#2→ 分享的對象,後面緊接著括號內為對象可用權限)。多對象則使用空格分開。

    範例:

    /tmp *(rw,sync)

    啟動

    # /etc/init.d/nfs-kernel-server start

    權限說明

    • ro 唯讀
    • rw 可讀可寫入
    • no_root_squash 如果為 root 用戶,則具有該目錄的 root 權限。(不建議使用)
    • root_squash 如果 root 用戶,則將身份變成匿名者身份。
    • all_squash 所有用戶皆為匿名者身份。
    • anonuid 匿名者使用哪一個帳號的 UID。
    • anongid 匿名者使用哪一個帳號的 GID。
    • sync 資料同步寫入。
    • async 資料先寫入記憶體中。

    相關指令

    • showmount 列出指定主機分享出來的資源清單
      # showmount -e
      # showmount -e Teacher
      # showmount -e 140.134.210.131
    • exportfs 匯出 /etc/ports 內容給 NFS Server
      # exportfs -r

沒有留言: