NFS server权限设置问题
来源:互联网 发布:mean it 编辑:程序博客网 时间:2024/05/22 03:32
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的核心功能,結果 NFS server 無論如何也搞不起來~最後才想到原來俺的核心是非正規的...
至於 NFS 伺服器的架設實在很簡單,你只要編輯好主要設定檔 /etc/exports 之後,先啟動 rpcbind (若已經啟動了,就不要重新啟動),然後再啟動 nfs ,你的 NFS 就成功了!不過這樣的設定能否對用戶端生效?那就得要考慮你權限方面的設定能力了。廢話少說,我們就直接來看看那個 /etc/exports 應該如何設定吧!某些 distributions 並不會主動提供 /etc/exports 檔案,所以請你自行手動建立它吧。
[root@www ~]# vim /etc/exports/tmp 192.168.100.0/24(ro) localhost(rw) *.ev.ncku.edu.tw(ro,sync)[分享目錄] [第一部主機(權限)] [可用主機名] [可用萬用字元]
你看看,這個設定檔有夠簡單吧!每一行最前面是要分享出來的目錄,注意喔!是以目錄為單位啊!然後這個目錄可以依照不同的權限分享給不同的主機,像鳥哥上面的例子說明是:要將 /tmp 分別分享給三個不同的主機或網域的意思。記得主機後面以小括號 () 設計權限參數,若權限參數不止一個時,則以逗號 (,) 分開。且主機名與小括號是連在一起的喔!在這個檔案內也可以利用 # 來註解呢。
至於主機名稱的設定主要有幾個方式:
- 可以使用完整的 IP 或者是網域,例如 192.168.100.10 或 192.168.100.0/24 ,或192.168.100.0/255.255.255.0 都可以接受!
- 也可以使用主機名稱,但這個主機名稱必須要在 /etc/hosts 內,或可使用 DNS 找到該名稱才行啊!反正重點是可找到 IP 就是了。如果是主機名稱的話,那麼他可以支援萬用字元,例如 * 或 ? 均可接受。
至於權限方面 (就是小括號內的參數) 常見的參數則有:
參數值內容說明rwro該目錄分享的權限是可讀寫 (read-write) 或唯讀 (read-only),但最終能不能讀寫,還是與檔案系統的 rwx及身份有關。sync
asyncsync 代表資料會同步寫入到記憶體與硬碟中,async 則代表資料會先暫存於記憶體當中,而非直接寫入硬碟!no_root_squash
root_squash用戶端使用 NFS 檔案系統的帳號若為 root 時,系統該如何判斷這個帳號的身份?預設的情況下,用戶端 root 的身份會由 root_squash 的設定壓縮成 nfsnobody,如此對伺服器的系統會較有保障。但如果你想要開放用戶端使用 root 身份來操作伺服器的檔案系統,那麼這裡就得要開 no_root_squash 才行!all_squash不論登入 NFS 的使用者身份為何, 他的身份都會被壓縮成為匿名使用者,通常也就是 nobody(nfsnobody) 啦!anonuid
anongidanon 意指 anonymous (匿名者) 前面關於 *_squash 提到的匿名使用者的 UID 設定值,通常為 nobody(nfsnobody),但是你可以自行設定這個 UID 的值!當然,這個 UID 必需要存在於你的 /etc/passwd 當中!anonuid 指的是 UID 而 anongid 則是群組的 GID 囉。
這是幾個比較常見的權限參數,如果你有興趣玩其他的參數時,請自行 man exports 可以發現很多有趣的資料。接下來我們利用上述的幾個參數來實際思考一下幾個有趣的小習題:
例題一:讓 root 保有 root 的權限[root@www ~]# vim /etc/exports# 任何人都可以用我的 /tmp ,用萬用字元來處理主機名稱,重點在 no_root_squash/tmp *(rw,no_root_squash)主機名稱可以使用萬用字元,上頭表示無論來自哪裡都可以使用我的 /tmp 這個目錄。再次提醒,『 *(rw,no_root_squash) 』這一串設定值中間是沒有空白字元的喔!而 /tmp 與 *(rw,no_root_squash) 則是有空白字元來隔開的!特別注意到那個 no_root_squash 的功能!在這個例子中,如果你是用戶端,而且你是以 root 的身份登入你的 Linux 主機,那麼當你 mount 上我這部主機的 /tmp 之後,你在該 mount 的目錄當中,將具有『root 的權限!』
例題二:同一目錄針對不同範圍開放不同權限
[root@www ~]# mkdir /home/public[root@www ~]# setfacl -m g:vbirdgroup:rwx /home/public[root@www ~]# vim /etc/exports/tmp *(rw,no_root_squash)/home/public 192.168.100.0/24(rw) *(ro)# 繼續累加在後面,注意,我有將主機與網域分為兩段 (用空白隔開) 喔!上面的例子說的是,當我的 IP 是在 192.168.100.0/24 這個網段的時候,那麼當我在 Client 端掛載了 Server 端的 /home/public 後,針對這個被我掛載的目錄我就具有可以讀寫的權限~至於如果我不是在這個網段之內,那麼這個目錄的資料我就僅能讀取而已,亦即為唯讀的屬性啦!
需要注意的是,萬用字元僅能用在主機名稱的分辨上面,IP 或網段就只能用 192.168.100.0/24 的狀況,不可以使用 192.168.100.* 喔!
例題三:僅給某個單一主機使用的目錄設定
[root@www ~]# mkdir /home/test[root@www ~]# setfacl -m u:dmtsai:rwx /home/test[root@www ~]# vim /etc/exports/tmp *(rw,no_root_squash)/home/public 192.168.100.0/24(rw) *(ro)/home/test 192.168.100.10(rw)# 只要設定 IP 正確即可!這樣就設定完成了!而且,只有 192.168.100.10 這部機器才能對 /home/test 這個目錄進行存取喔!
例題四:開放匿名登入的情況
[root@www ~]# groupadd -g 45 nfsanon[root@www ~]# useradd -u 45 -g nfsanon nfsanon[root@www ~]# mkdir /home/linux[root@www ~]# setfacl -m u:nfsanon:rwx /home/linux[root@www ~]# vim /etc/exports/tmp *(rw,no_root_squash)/home/public 192.168.100.0/24(rw) *(ro)/home/test 192.168.100.10(rw)/home/linux *.centos.vbird(rw,all_squash,anonuid=45,anongid=45)# 如果要開放匿名,那麼重點是 all_squash,並且要配合 anonuid 喔!特別注意到那個 all_squash 與 anonuid, anongid 的功能!如此一來,當 clientlinux.centos.vbird 登入這部 NFS 主機,並且在 /home/linux 寫入檔案時,該檔案的所有人與所有群組,就會變成 /etc/passwd 裡面對應的 UID 為 45 的那個身份的使用者了!
上面四個案例的權限如果依照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 的問題喔!
- nfs server权限设置问题
- NFS server权限设置问题
- centos7 安装nfs和设置权限问题
- nfs权限设置
- ubuntu server 10.04 NFS设置
- mount.nfs: access denied by server while mounting解决由权限引发的问题
- 关于Windows Server 2008 文件夹共享权限设置问题
- NFS服务器防火墙设置问题
- NFS 设置方法及问题
- Ubuntu Server 12.04 NFS 文件共享设置
- Ubuntu Server 12.04 NFS 文件共享设置
- NFS文件无法写入的权限问题
- SQL server 权限问题
- ubuntu12.04的NFS配置及linux NFS介绍 nfs挂载权限问题
- ubuntu12.04的NFS配置及linux NFS介绍 nfs挂载权限问题
- 权限设置的问题
- Android设置权限问题
- Android设置权限问题
- 程序媛开发之路—字符
- GitHub优秀的 Android 开源项目整理-经典版
- org.springframework.dao.DataIntegrityViolationException: Could not execute JDBC batch update
- 69 单例使用宏实现
- zoj 3362 Beer Problem 【最大费用最大流 需要判断最长路值是否为负】
- NFS server权限设置问题
- 助力开发团队
- OpenGL-vs2012-glfw-glew 测试环境搭建
- 新的征程
- 8.27总结
- 领英的kafka安装和配置
- Class.getResource和ClassLoader.getResource区别与分析
- 例题3.13 周期 LA3026
- ZOJ1745 解题报告