另一篇較好的NFS參考資源: http://wenku.baidu.com/view/394e852ded630b1c59eeb5a3.html
1 NFS(Network File System)網路檔案系統,是一種Distributed File System,允許網路中不同作業系統的電腦之間共用外設、
檔案等,NFS在檔案傳送和通訊過程中依賴與RPC(Remote Procedure Call)
2 RPC 遠端程序呼叫,能使得用戶端執行其他系統程式的一種機制
3 NFS安裝配置及使用(Debian)
(1) 環境描述
1>:網路環境
NFS server: 192.168.102.47
NFS client: 192.168.102.15
NFS client: 192.168.102.61
2>:軟體版本
nfs-common 5-20
nfs-kernel-server 1.0.9-5
portmap 1.0.9-5
(2) 安裝
1>:服務端 aptitude install nfs-common nfs-kernel-server portmap
2>:用戶端 aptitude install nfs-common nfs-kernel-server portmap
-
(3) 啟動停止 /etc/init.d/nfs-kernel-server start/stop/restart
(4) 服務端配置
1>:建立共用目錄 mkdir /home/share chown nobody.nogroup /home/share
2>:建立或修改 /etc/exports 設定檔
這個檔案的內容非常簡單,每一行由拋出路徑,客戶名列表以及每個客戶名後緊跟的訪問選項構成:
[共用的目錄] [主機名稱或IP(參數,參數)]
其中參數是可選的,當不指定參數時,nfs將使用預設選項。預設的共用選項是 sync,ro,root_squash,no_delay。
當主機名稱或IP地址為空白時,則代表共用給任意客戶機提供服務。
當將同一目錄共用給多個客戶機,但對每個客戶機提供的許可權不同時,可以這樣:
[共用的目錄] [主機名稱1或IP1(參數1,參數2)] [主機名稱2或IP2(參數3,參數4)]
下面是一些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內容如下:
$ cat /etc/exports
/home/share 192.168.102.15(rw,sync) *(ro)
配置說明: 對192.168.102.15賦予讀寫權限,其他機器僅有唯讀許可權。
3>:重啟nfs服務
4>:在客戶機上查看nfs資源共用情況
showmount -e 192.168.102.47
5>:使用mount命令掛載共用資源
mount 192.168.102.47:/home/share /mnt
6>:是不是我們每次修改了設定檔都需要重啟nfs服務呢? 這個時候我們就可以用exportfs命令重新掃描/etc/exports檔案,來使改動立刻生效。比如:
# exportfs -au 卸載所有共用目錄
# exportfs -rv 重新共用所有目錄並輸出詳細資料
exportfs 命令有軟體包 nfs-kernel-server 提供,詳細的 exportfs 命令說明請查看:
man exportfs
當完成資源共用, 我們如何知道發布了哪些許可權呢?這時我們可以查看 /var/lib/nfs/etab 檔案,它是有 exportfs 命令根據 /etc/exports 產生的。
# cat /var/lib/nfs/etab
/home/share 192.168.102.15(rw,sync,wdelay,hide,nocrossmnt,secure,
root_squash,no_all_squash,subtree_check,secure_locks,acl,mapping=identity,
anonuid=65534,anongid=65534)
/home/share *(ro,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,
subtree_check,secure_locks,acl,mapping=identity,anonuid=65534,anongid=65534)
(5) 安全問題
1>: Iptables防火牆
如果我們的NFS伺服器在防火牆後邊,則需要在防火強策略中加入如下策略:
-A INPUT -p tcp -m state --state NEW -m multiport --dport 111,2049,4001,
32764:32767 -j ACCEPT
-A INPUT -p udp -m state --state NEW -m multiport --dport 111,2049,4001,
32764:32767 -j ACCEPT
2>
:使用/etc/host.allow和/etc/host.deny 控制用戶端的訪問
/etc/hosts.allow和/etc/hosts.deny這兩個檔案是tcpd伺服器的設定檔,tcpd伺服器可以控制外部IP對本機服務的訪問。這兩個設定檔的格式如下:
#服務進程名:主機列表:當規則匹配時可選的命令操作
server_name:hosts-list[:command]
/etc/hosts.allow控制可以訪問原生IP地址,/etc/hosts.deny控制禁止訪問原生IP。如果兩個檔案的配置有衝突,以
/etc/hosts.deny為準。下面是一個/etc/hosts.allow的樣本:
ALL:127.0.0.1 #允許本機訪問本機所有服務進程
smbd:192.168.0.0/255.255.255.0 #允許192.168.0.網段的IP訪問smbd服務
ALL關鍵字匹配所有情況,EXCEPT匹配除了某些項之外的情況,PARANOID匹配你想控制的IP地址和它的網域名稱不匹配時(網域名稱偽裝)的情況。
比如,在伺服器的 /etc/hosts.deny 檔案作如下設定:
# cat /etc/hosts.deny
portmap:192.168.102.15
然後在客戶機192.168.102.15上載入共用目錄
# mount 192.168.102.47:/home/share /mnt
mount to NFS server '192.168.102.47' failed.
我們發現現在已經無法載入共用目錄的。
(6) 資源使用
1>:啟動時自動掛載
修改客戶機的 /etc/fstab檔案,加入類似如下行:
192.168.102.47:/home/share /mnt nfs rsize=8192,wsize=8192,timeo=14,intr
重啟客戶機,即可實現系統啟動時自動掛栽共用資源
2>:使用autofs實現資源掛在
autofs 使用 automount 守護進程來管理你的掛載點,它只在檔案系統被訪問時才動態地掛載它們。
autofs 查詢主設定檔 /etc/auto.master 來決定要定義哪些掛載點。然後,它使用適用於各個掛載點的參數來啟動 automount 進程。主配置中的每一行都定義一個掛載點,然後用單獨的設定檔定義在該掛載點下要掛載的檔案系統。
安裝 autofs
# aptitude install autofs
修改/etc/auto.master檔案, 加入如下內容:
/mnt /etc/auto.nfs
建立 /etc/auto.nfs 檔案內容如下:
nfs -rw,soft,intr,rsize=8192,wsize=8192 192.168.102.47:/home/share
這樣,每當您進入 /mnt/nfs 目錄時,系統都會嘗試將伺服器的共用資源掛栽到該目錄上。應當注意nfs目錄是由 automount 動態地建立的,它不應該在客戶機器上實際存在。
tonybox2:/# cd /mnt
tonybox2:/mnt# ls
tonybox2:/mnt# cd nfs
tonybox2:/mnt/nfs# ls
123
tonybox2:/mnt/nfs# ls -l
total 4
-rw-r--r-- 1 nobody nogroup 6 2006-08-22 07:50 123
tonybox2:/mnt/nfs#
如果修改了/etc/auto.master主設定檔,則需要運行
#/etc/init.d/autofs reload
對其進行重新載入