Linux NFS典型例項及許可權詳解

season0891發表於2013-12-22

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 使用他的家目錄啦!
http://blog.sina.com.cn/s/blog_5f7d4fe60100dt4k.html

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/90618/viewspace-1063991/,如需轉載,請註明出處,否則將追究法律責任。

相關文章