NFS server权限设置问题
2015-08-28 01:03
204 查看
http://linux.vbird.org/linux_server/0330nfs.php
13.2.3 /etc/exports 設定檔的語法與參數
在開始 NFS 伺服器的設定之前,你必須要瞭解的是,NFS 會直接使用到核心功能,所以你的核心必須要有支援 NFS 才行。萬一如果你的核心版本小於 2.2 版,或者重新自行編譯過核心的話,那麼就得要很注意啦!因為你可能會忘記選擇 NFS 的核心支援啊!
還好,我們 CentOS 或者是其他版本的 Linux ,預設核心通常是支援 NFS 功能的,所以你只要確認你的核心版本是目前新的 2.6.x 版,並且使用你的 distribution 所提供的核心,那應該就不會有問題啦!
至於 NFS 伺服器的架設實在很簡單,你只要編輯好主要設定檔 /etc/exports 之後,先啟動 rpcbind (若已經啟動了,就不要重新啟動),然後再啟動 nfs ,你的 NFS 就成功了!不過這樣的設定能否對用戶端生效?那就得要考慮你權限方面的設定能力了。廢話少說,我們就直接來看看那個 /etc/exports 應該如何設定吧!某些 distributions 並不會主動提供 /etc/exports 檔案,所以請你自行手動建立它吧。
你看看,這個設定檔有夠簡單吧!每一行最前面是要分享出來的目錄,注意喔!是以目錄為單位啊!然後這個目錄可以依照不同的權限分享給不同的主機,像鳥哥上面的例子說明是:要將 /tmp 分別分享給三個不同的主機或網域的意思。記得主機後面以小括號 () 設計權限參數,若權限參數不止一個時,則以逗號 (,) 分開。且主機名與小括號是連在一起的喔!在這個檔案內也可以利用 # 來註解呢。
至於主機名稱的設定主要有幾個方式:
可以使用完整的 IP 或者是網域,例如 192.168.100.10 或 192.168.100.0/24 ,或192.168.100.0/255.255.255.0 都可以接受!
也可以使用主機名稱,但這個主機名稱必須要在 /etc/hosts 內,或可使用 DNS 找到該名稱才行啊!反正重點是可找到 IP 就是了。如果是主機名稱的話,那麼他可以支援萬用字元,例如 * 或 ? 均可接受。
至於權限方面 (就是小括號內的參數) 常見的參數則有:
這是幾個比較常見的權限參數,如果你有興趣玩其他的參數時,請自行 man exports 可以發現很多有趣的資料。接下來我們利用上述的幾個參數來實際思考一下幾個有趣的小習題:
上面四個案例的權限如果依照13.1.4 存取設定權限來思考的話,那麼權限會是什麼情況呢?讓我們來檢查一下:
用戶端與伺服器端具有相同的 UID 與帳號:
假設我在 192.168.100.10 登入這部 NFS (IP 假設為 192.168.100.254) 伺服器,並且我在 192.168.100.10 的帳號為 dmtsai 這個身份,同時,在這部 NFS 上面也有 dmtsai 這個帳號,並具有相同的 UID ,果真如此的話,那麼:
由於 192.168.100.254 這部 NFS 伺服器的 /tmp 權限為 -rwxrwxrwt ,所以我 (dmtsai 在 192.168.100.10 上面) 在 /tmp 底下具有存取的權限,並且寫入的檔案所有人為 dmtsai ;
在 /home/public 當中,由於我有讀寫的權限,所以如果在 /home/public 這個目錄的權限對於 dmtsai 有開放寫入的話,那麼我就可以讀寫,並且我寫入的檔案所有人是 dmtsai 。但是萬一 /home/public 對於 dmtsai 這個使用者並沒有開放可以寫入的權限時,那麼我還是沒有辦法寫入檔案喔!這點請特別留意!
在 /home/test 當中,我的權限與 /home/public 相同的狀態!還需要 NFS 伺服器的 /home/test 對於 dmtsai 有開放權限;
在 /home/linux 當中就比較麻煩!因為不論你是何種 user ,你的身份一定會被變成 UID=45 這個帳號!所以,這個目錄就必需要針對 UID = 45 的那個帳號名稱,修改他的權限才行!
用戶端與伺服器端的帳號並未相同時:
假如我在 192.168.100.10 的身份為 vbird (uid 為 600),但是 192.168.100.254 這部 NFS 主機卻沒有 uid=600的帳號時,情況會變成怎樣呢?
我在 /tmp 底下還是可以寫入,只是該檔案的權限會保持為 UID=600 ,因此伺服器端看起來就會怪怪的,因為找不到 UID=600 這個帳號的顯示,故檔案擁有者會填上 600 呦!
我在 /home/public 裡面是否可以寫入,還需要視 /home/public 的權限而定,不過,由於沒有加上 all_squash 的參數,因此在該目錄下會保留用戶端的使用者 UID,同上一點所示。
/home/test 的觀點與 /home/public 相同!
/home/linux 底下,我的身份就被變成 UID = 45 那個使用者就是了!
當用戶端的身份為 root 時:
假如我在 192.168.100.10 的身份為 root 呢? root 這個帳號每個系統都會有呀!權限變成怎樣呢?
我在 /tmp 裡面可以寫入,並且由於 no_root_squash 的參數,改變了預設的 root_squash 設定值,所以在 /tmp 寫入的檔案所有人為 root 喔!
我在 /home/public 底下的身份還是被壓縮成為 nobody 了!因為預設屬性裡面都具有 root_squash 呢!所以,如果 /home/public 有針對 nobody 開放寫入權限時,那麼我就可以寫入,但是檔案所有人變成 nobody 就是了!
/home/test 與 /home/public 相同;
/home/linux 的情況中,我 root 的身份也被壓縮成為 UID = 45 的那個使用者了!
這樣的權限講解之後,你可以瞭解了嗎?這裡是最重要的地方,如果這一關通過了,底下的咚咚就沒有問題啦! ^_^!在你將本文讀完後,最好還是回到13.1.4 NFS 的檔案存取權限好好的瞧一瞧,才能解決 NFS 的問題喔!
13.2.3 /etc/exports 設定檔的語法與參數
在開始 NFS 伺服器的設定之前,你必須要瞭解的是,NFS 會直接使用到核心功能,所以你的核心必須要有支援 NFS 才行。萬一如果你的核心版本小於 2.2 版,或者重新自行編譯過核心的話,那麼就得要很注意啦!因為你可能會忘記選擇 NFS 的核心支援啊!
還好,我們 CentOS 或者是其他版本的 Linux ,預設核心通常是支援 NFS 功能的,所以你只要確認你的核心版本是目前新的 2.6.x 版,並且使用你的 distribution 所提供的核心,那應該就不會有問題啦!
Tips: 上面會提醒您這個問題的原因是,以前鳥哥都很喜歡自行編譯一個特別的核心,但是某次編譯核心時,卻忘記加上了 NFS的核心功能,結果 NFS server 無論如何也搞不起來~最後才想到原來俺的核心是非正規的... |
[root@www ~]# vim /etc/exports /tmp 192.168.100.0/24(ro) localhost(rw) *.ev.ncku.edu.tw(ro,sync) [分享目錄] [第一部主機(權限)] [可用主機名] [可用萬用字元] |
至於主機名稱的設定主要有幾個方式:
可以使用完整的 IP 或者是網域,例如 192.168.100.10 或 192.168.100.0/24 ,或192.168.100.0/255.255.255.0 都可以接受!
也可以使用主機名稱,但這個主機名稱必須要在 /etc/hosts 內,或可使用 DNS 找到該名稱才行啊!反正重點是可找到 IP 就是了。如果是主機名稱的話,那麼他可以支援萬用字元,例如 * 或 ? 均可接受。
至於權限方面 (就是小括號內的參數) 常見的參數則有:
參數值 | 內容說明 |
rw ro | 該目錄分享的權限是可讀寫 (read-write) 或唯讀 (read-only),但最終能不能讀寫,還是與檔案系統的 rwx及身份有關。 |
sync async | sync 代表資料會同步寫入到記憶體與硬碟中,async 則代表資料會先暫存於記憶體當中,而非直接寫入硬碟! |
no_root_squash root_squash | 用戶端使用 NFS 檔案系統的帳號若為 root 時,系統該如何判斷這個帳號的身份?預設的情況下,用戶端 root 的身份會由 root_squash 的設定壓縮成 nfsnobody,如此對伺服器的系統會較有保障。但如果你想要開放用戶端使用 root 身份來操作伺服器的檔案系統,那麼這裡就得要開 no_root_squash 才行! |
all_squash | 不論登入 NFS 的使用者身份為何, 他的身份都會被壓縮成為匿名使用者,通常也就是 nobody(nfsnobody) 啦! |
anonuid anongid | anon 意指 anonymous (匿名者) 前面關於 *_squash 提到的匿名使用者的 UID 設定值,通常為 nobody(nfsnobody),但是你可以自行設定這個 UID 的值!當然,這個 UID 必需要存在於你的 /etc/passwd 當中!anonuid 指的是 UID 而 anongid 則是群組的 GID 囉。 |
例題一:讓 root 保有 root 的權限 我想將 /tmp 分享出去給大家使用,由於這個目錄本來就是大家都可以讀寫的,因此想讓所有的人都可以存取。此外,我要讓 root 寫入的檔案還是具有 root 的權限,那如何設計設定檔? 答:
之後,你在該 mount 的目錄當中,將具有『root 的權限!』 |
例題二:同一目錄針對不同範圍開放不同權限 我要將一個公共的目錄 /home/public 公開出去,但是只有限定我的區域網路 192.168.100.0/24 這個網域且加入vbirdgroup (第一章的例題建立的群組) 的用戶才能夠讀寫,其他來源則只能讀取。 答:
需要注意的是,萬用字元僅能用在主機名稱的分辨上面,IP 或網段就只能用 192.168.100.0/24 的狀況,不可以使用 192.168.100.* 喔! |
例題三:僅給某個單一主機使用的目錄設定 我要將一個私人的目錄 /home/test 開放給 192.168.100.10 這個 Client 端的機器來使用時,該如何設定?假設使用者的身份是 dmtsai 才具有完整的權限時。 答:
|
例題四:開放匿名登入的情況 我要讓 *.centos.vbird 網域的主機,登入我的 NFS 主機時,可以存取 /home/linux ,但是他們存資料的時候,我希望他們的 UID 與 GID 都變成 45 這個身份的使用者,假設我 NFS 伺服器上的 UID 45 與 GID 45 的用戶/群組名稱為 nfsanon。 答:
|
用戶端與伺服器端具有相同的 UID 與帳號:
假設我在 192.168.100.10 登入這部 NFS (IP 假設為 192.168.100.254) 伺服器,並且我在 192.168.100.10 的帳號為 dmtsai 這個身份,同時,在這部 NFS 上面也有 dmtsai 這個帳號,並具有相同的 UID ,果真如此的話,那麼:
由於 192.168.100.254 這部 NFS 伺服器的 /tmp 權限為 -rwxrwxrwt ,所以我 (dmtsai 在 192.168.100.10 上面) 在 /tmp 底下具有存取的權限,並且寫入的檔案所有人為 dmtsai ;
在 /home/public 當中,由於我有讀寫的權限,所以如果在 /home/public 這個目錄的權限對於 dmtsai 有開放寫入的話,那麼我就可以讀寫,並且我寫入的檔案所有人是 dmtsai 。但是萬一 /home/public 對於 dmtsai 這個使用者並沒有開放可以寫入的權限時,那麼我還是沒有辦法寫入檔案喔!這點請特別留意!
在 /home/test 當中,我的權限與 /home/public 相同的狀態!還需要 NFS 伺服器的 /home/test 對於 dmtsai 有開放權限;
在 /home/linux 當中就比較麻煩!因為不論你是何種 user ,你的身份一定會被變成 UID=45 這個帳號!所以,這個目錄就必需要針對 UID = 45 的那個帳號名稱,修改他的權限才行!
用戶端與伺服器端的帳號並未相同時:
假如我在 192.168.100.10 的身份為 vbird (uid 為 600),但是 192.168.100.254 這部 NFS 主機卻沒有 uid=600的帳號時,情況會變成怎樣呢?
我在 /tmp 底下還是可以寫入,只是該檔案的權限會保持為 UID=600 ,因此伺服器端看起來就會怪怪的,因為找不到 UID=600 這個帳號的顯示,故檔案擁有者會填上 600 呦!
我在 /home/public 裡面是否可以寫入,還需要視 /home/public 的權限而定,不過,由於沒有加上 all_squash 的參數,因此在該目錄下會保留用戶端的使用者 UID,同上一點所示。
/home/test 的觀點與 /home/public 相同!
/home/linux 底下,我的身份就被變成 UID = 45 那個使用者就是了!
當用戶端的身份為 root 時:
假如我在 192.168.100.10 的身份為 root 呢? root 這個帳號每個系統都會有呀!權限變成怎樣呢?
我在 /tmp 裡面可以寫入,並且由於 no_root_squash 的參數,改變了預設的 root_squash 設定值,所以在 /tmp 寫入的檔案所有人為 root 喔!
我在 /home/public 底下的身份還是被壓縮成為 nobody 了!因為預設屬性裡面都具有 root_squash 呢!所以,如果 /home/public 有針對 nobody 開放寫入權限時,那麼我就可以寫入,但是檔案所有人變成 nobody 就是了!
/home/test 與 /home/public 相同;
/home/linux 的情況中,我 root 的身份也被壓縮成為 UID = 45 的那個使用者了!
這樣的權限講解之後,你可以瞭解了嗎?這裡是最重要的地方,如果這一關通過了,底下的咚咚就沒有問題啦! ^_^!在你將本文讀完後,最好還是回到13.1.4 NFS 的檔案存取權限好好的瞧一瞧,才能解決 NFS 的問題喔!
相关文章推荐
- 助力开发团队
- OpenGL-vs2012-glfw-glew 测试环境搭建
- 迭代器模式
- 【POJ 1584】 A Round Peg in a Ground Hole (判凸包+判圆在凸包内)
- 程序媛开发之路—字符
- 发布/订阅模式
- 69 单例使用宏实现
- HTTP网络协议(二)
- 975 关于521【打表】
- install and use gradle
- 关于View的ScrollTo, getScrollX 和 getScrollY
- 68 MRC单例实现
- Android之发送短信和接收验证码
- VIJOS 1053 Easy sssp 负权最短路
- hdu1588 Gauss Fibonacci(矩阵快速幂+二分求矩阵等比和)
- 67 ARC单例实现
- [Show--Blog]关于博客个性化展示的一点想法
- 安卓系统API的使用
- 剑指Offer面试题:12.在O(1)时间删除链表结点
- poj2398Toy Storage【判断直线与点位置关系+排序+二分查找】