天天看點

NFS

 1,首先對nfs服務作簡單的配置,修改主配置檔案,

[root@localhost ~]# vim /etc/exports

/tmp    *(rw,no_root_squash,sync)

/public 192.168.0.0/24(rw,sync)      *(ro,sync)

/test   192.168.0.100(rw,sync)

/linux  *.feifan.com(rw,all_squash,anonuid=40,anongid=40,sync)

2,不要忘了建立目錄哦,并做權限修改

[root@localhost ~]# mkdir /public

[root@localhost ~]# mkdir /test

[root@localhost ~]# mkdir /linux

[root@localhost ~]# chmod 757 /public/

[root@localhost ~]# chmod 757 /test/

[root@localhost ~]# chmod 757 /linux/

好了,現在可以啟動了,

[root@localhost ~]# service portmap start

[root@localhost ~]# service nfs start

如果不放心是否真的啟動了,可以查詢一下

[root@localhost ~]# netstat -tulnp

tcp        0      0 0.0.0.0:2049                0.0.0.0:*                   listen     

tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   listen  

[root@localhost ~]# rpcinfo -p localhost

    程式     版本 協定   端口

    100000    2   tcp    111  portmapper

    100000    2   udp    111  portmapper

    100024    1   udp    783  status

    100024    1   tcp    786  status

    100003    2   udp   2049  nfs

    100003    3   udp   2049  nfs

    100003    4   udp   2049  nfs

    100003    2   tcp   2049  nfs

    100003    3   tcp   2049  nfs

    100003    4   tcp   2049  nfs

    100021    1   udp   1026  nlockmgr

    100021    3   udp   1026  nlockmgr

    100021    4   udp   1026  nlockmgr

    100021    1   tcp   3953  nlockmgr

    100021    3   tcp   3953  nlockmgr

    100021    4   tcp   3953  nlockmgr

    100011    1   udp    622  rquotad

    100011    2   udp    622  rquotad

    100011    1   tcp    625  rquotad

    100011    2   tcp    625  rquotad

    100005    1   udp    626  mountd

    100005    1   tcp    629  mountd

    100005    2   udp    626  mountd

    100005    2   tcp    629  mountd

    100005    3   udp    626  mountd

    100005    3   tcp    629  mountd

這裡還可以連線觀察

[root@localhost ~]# showmount -e localhost

[root@localhost ~]# tail /var/lib/nfs/etab

重新挂載設定内容

[root@localhost ~]# exportfs -arv

為了安全,不要忘記設定防火牆哦

[root@localhost ~]# iptables -a input -i eth0 -p tcp -s 192.168.0.0/24 --dport 111 -j accept

[root@localhost ~]# iptables -a input -i eth0 -p udp -s 192.168.0.0/24 --dport 111 -j accept

也可以使用tcp wrappers來限制

[root@localhost ~]# vim /etc/hosts.allow

mountd: 192.168.0.0/255.255.255.0

mountd: 192.168.1.0/255.255.255.0

[root@localhost ~]# vim /etc/hosts.deny

mountd: all

3,client的使用

[root@localhost ~]# showmount -e 192.168.0.2 (nfs ip)

[root@localhost ~]# mount -t nfs 192.168.0.2:/public/ /public

如果是開機就挂載了,就必須修改配置檔案

[root@localhost ~]# vim /etc/fstab

192.168.0.2:/public  /public  nfs nosuid,noexec,nodev,rw,bg,soft,rsize=32768,wsize=32768  0 0

這裡我要說的是,還有一種更好的挂載方法,可以讓client要使用nfs共享的目錄資料時,才去挂載它,當隔了5分鐘沒有使用的時候,就主動的解除安裝它, 要注意的是,那些 /home/nfs/public 是不需要事先建立的。

[root@localhost ~]# vim /etc/auto.master

/home/nfs       /etc/auto.nfs --timeout=60

[root@localhost ~]# mkdir /home/nfs

[root@localhost ~]# vim /etc/auto.nfs

public  -rw,bg,soft,rsize=32768,wrise=32768     192.168.0.2:/public

testing -rw,bg,soft,rsize=32768,wrise=32768     192.168.0.2:/test

temp    -rw,bg,soft,rsize=32768,wrise=32768     192.168.0.2:/tmp

[root@localhost ~]# /etc/init.d/autofs restart

[root@localhost ~]# cd /home/nfs/public

[root@localhost public]#

竟然進來了,是不是很奇怪啊呵呵

4,執行個體示範完了,下面詳細分析檔案權限

情況一:client 端與 server 端具有相同的 uid 與帳号

    假設我在 192.168.0.100 登入 nfs server (ip 假設為 192.168.0.2) 主機,并且192.168.0.100 的帳号為 tom 這個身份,同時,在這部 nfs 上面也有 tom 這個帳号,并具有相同的 uid,那麼,

    ①. 由于 192.168.0.2 這部 nfs 主機的 /tmp 權限為 -rwxrwxrwt ,是以 192.168.0.100 上面的使用者在 nfs 的/tmp 底下具有存取的權限,并且寫入的檔案所有人為 tom ;

   ②. 在 /public 當中,由于我有讀寫的權限,是以如果在 /public 這個目錄的權限對于 tom 有開放寫入的話,那麼我就可以讀寫,并且我寫入的檔案所有人是 tom,但是如果 /public 對于 tom 這個使用者并沒有開放可以寫入的權限時, 那麼我還是沒有辦法寫入檔案,這點請特别注意!

    ③. 在 /test 當中,我的權限與 /public 相同,但是還需要 nfs 主機的 /test 對于tom 有讀寫限;

    ④. 在 /linux 當中,由于使用者身份一定都會被變成 uid=40 這個帳号,是以,這個目錄就必需要針對 uid = 40 的那個帳号名稱,修改他的權限才行。

情況二:client 端與 server 端的帳号不同

    假如我在 192.168.0.100 的身份為 tom ,但是 192.168.0.2 這部 nfs 主機卻沒有 tom 這個帳号時,情況會變成怎樣呢?

    ①. 我在 /tmp 底下還是可以寫入,但是寫入的檔案所有人變成 nobody 了;

    ②. 我在 /public 裡面是否可以寫入,還需要視 /public 的權限而定,不過,我的身份被變成 nobody ;

    ③. /test 與 /public 相同;

    ④. /linux 底下,我的身份被變成 uid = 40 那個使用者。

情況三:client 端的身份為 root

    假如我在 192.168.0.100 的身份為 root,權限變成怎樣

    ①. 我在 /tmp 裡面可以寫入,并且由于 no_root_squash 的參數,改變了預設的 root_squash 設定值,是以在 /tmp 寫入的檔案所有者為 root ;

    ②. 我在 /public 底下的身份還是被壓縮成為 nobody ,因為預設屬性裡面都具有 root_squash ,是以,如果 /public 有針對 nobody 開放寫入權限時,那麼我就可以寫入,但是檔案所有人變成 nobody ;

    ③. /test 與 /home/public 相同;

    ④. /linux 的情況中,root 的身份也被壓縮成為 uid = 40 的那個使用者。

在我講解執行個體以及權限之後,您應該了解了很多,如果這一關通過了,那麼你的 nfs 服務掌握的非常好了,在這裡還希望大家提出寶貴意見,給我留言,我的qq: 303247761

有興趣的朋友可以做這樣一個執行個體:

假設環境∶

   1. 假設我的 linux 主機為 192.168.0.100 這一部;

   2. 預計将 /tmp 以可讀寫,并且不限制使用者身份的方式分享給所有 192.168.0.0/24 這個網域中的所有 linux 工作站;

   3. 預計開放 /home/nfs 這個目錄,使用的屬性為唯讀,可提供除了網域内的工作站外,向外亦提供資料内容;

   4. 預計開放 /home/upload 做為 192.168.0.0/24 這個網域的資料上傳目錄,其中,這個 /home/upload 的使用者及所屬群組為 nfs-upload 這個名字,他的 uid 與 gid 均為 210;

   5. 預計将 /home/andy 這個目錄僅分享給 192.168.0.50 這部 linux 主機,以提供該主機上面 andy 這個使用者來使用,也就是說, andy 在 192.168.0.50 及 192.168.0.100 均有帳号,且帳号均為 andy ,是以預計開放 /home/andy 給 andy 使用他的家目錄啦!

NFS

繼續閱讀