NFS(Network File System)是由Sun開發的用於網絡上文件共享的協議.NFS使用起來很方便,所以得到了廣泛的應用.但由於它的認證機制是基於IP地址的,因而容易被攻擊. 注意NFS是基於rpc機制的,所以portmap服務一定要打開. 在RedHat中: /etc/rc.d/init.d/nfs ... [ -f /usr/sbin/rpc.nfsd ] exit 0 [ -f /usr/sbin/rpc.mountd ] exit 0 [ -f /etc/eXPorts ] exit 0 # See how we were called. case "$1" in start) # Start daemons. echo -n "Starting NFS services: " daemon rpc.mountd daemon rpc.nfsd echo toUCh /var/lock/subsys/nfs ;; ... 可以看出由三個重要文件,rpc.mountd,rpc.nfsd,/etc/exports. rpc.nfsd 用於處理客戶文件系統的請求. rpc.mountd 但從一個NFS客戶受到一個mount請求,根據/etc/exports來決 定是否提供服務,如果被允許,rpc.mountd創建一個文件句柄並在 /etc/rmtab中加上一條紀錄.該記錄在umount時被刪除. /etc/exports NFS的配置文件. 例如: 這裡有四台機器:192.168.1.1 192.168.1.2 192.168.1.3 192.168.1.4 在192.168.1.1上: /etc/exports包含下面一條: /home/FTP/pub 192.168.1.0/255.255.255.0(ro) 在192.168.1.2上: showmount -e 192.168.1.1 /home/ftp/pub ro mount 192.168.1.1:/home/ftp/pub /mnt 這樣在192.168.1.2上就可以自由的訪問192.168.1.1的 /home/ftp/pub下的文件,仿佛它們就存在/mnt下. /etc/exports的配置規則: 每一條都有下面的形式: Directory machine_name(option) directory就是本地的一個目錄. machine_name描述那些及其有權利訪問該目錄. option描述了提供了什麼樣的服務,或者說客戶有什麼樣的權利. machine_name的格式: single host: 一個機器名或一個ip地址. /tmp friday(ro) /tmp 192.168.1.3(ro) wildcard:使用了通配符,* 或 ?. /tmp *.cs.foo.edu(ro) IP 子網: 如: 192.168.1.0/255.255.255.0 =public: 所有機器都有權利. option: ro 只讀 rw 讀寫 noAccess 無權 link_relative/link_absolute 對符號連接的處理,前者是 加上"./",後者是保持不便. 在NFS中存在一個anonymous用戶用於處理用戶的訪問權限. root_squash/no_root_squash:是否將root映射到anonymous. squash_uid/squash_gid/all_squash: 如何處理用戶的uid和gid. map_static:啟動靜態映射. 如: map_static=/etc/nfs/Foobar.map /etc/nfs/foobar.map # remote local uid 0-99 - #squash uid 100-500 1000 gid 0-49 - #squash gid 50-100 700 一個復雜的例子: / master(rw) trusty(rw,no_root_squash) /usr *.local.domain(ro) /project proj*.local.domain(rw) /pub =public(ro) /pub/private (noaccess) 由於它的認證機制是基於IP地址的,因而容易被ip-spoofing攻擊. 一般除非必要不要打開這項服務.