第十六章 如何讓NFS更安全
前言
NFS(networkfilesystem)是由SUN公司發展,並於1985年推出,NFS的功能在於提供不同機器間的檔案分享與共用,由於NFS規格完全公開,因此現在許多的作業係統都提供NFS的服務。傳統NFS雖然使用UDP來傳遞檔案資料(NFSVersion3以後支援TCP傳送),但由於協定上的設計,大部分的安全問題都獲得了解決。然而除了少數被發現存在不同平台的程序錯誤外,會影響係統安全的往往是管理者錯誤的設定。本文主要為探討NFSServer端的設定,以避免係統被入侵或係統資料被竊取。
NFS相關程序
(1)biod:此程序是用來建立NFSClient端的cache,處理在Client上的讀寫動作。
(2)mountd:此程序是用來回應要求Mount的訊息。
(3)nfsd:此程序是用來處理NFSClient端的要求。
NFSServer設定
(1)限定讀寫的權限
大部分係統的NFS服務並不會限定你新增的分享資源為隻讀,除非你自己設定,否則都是以可讀可寫的模式分享資料。要設讀寫限製請參考下例:
*AIX,FreeBSD,Linux:
於/etc/exports中,使用-ro的參數,如:
/export-ro#將/export以隻讀的模式分享
*Solaris:
於/etc/dfs/dfstab中,使用-oro的參數,如:
share-Fnfs-oro/export#將/export以隻讀的模式分享
當然,假如你的分享資源是隻讀的設備,那是不用考慮這個問題的。
(2)限定分享的機器
讓我們看看以下用"showmount-exxx.xxx.xxx.xxx"得到的結果:
exportlistforxxx.xxx.xxx.xxx:
/home(everyone)
這表示任何一台機器都可以將/home裏的資料掛(mount)在自己的機器上,假如裏麵的資料具有私密性,那就危險了。所以下麵的例子顯示如何設定分享的機器:
*AIX
於/etc/exports中,加入-access=[hostname]:
/export-ro,access=www#允許www用隻讀的模式分享/export
*FreeBSD:
於/etc/exports中,加入hostname:
/export-rowwwbbs#允許www和bbs用隻讀的模式分享/export
/u-network1.2.3-mask255.255.255.0#允許1.2.3.x讀寫/u
*Solaris:
於/etc/dfs/dfstab中,加入hostname:
share-Fnfs-oro=www/export#允許www以隻讀的模式分享/export
事實上我們發現,有部份的管理者用domainname當做限定NFSClient機器的資料,這樣並非不可以,然而卻是不安全的做法,因為NFS是透過Client的IP查出DomainName,故假造DomainName便會騙過NFSServer。所以我們建議你將欲分享的Client端資料寫在/etc/hosts中,並於NFS的設定檔中使用登錄於/etc/hosts中Client的hostname,這是比較安全的做法,如下: