rhce 系列:第七部分 - 設定使用 kerberos 進行身份驗證的 nfs 伺服器
下面的例子假設你的 nfs 共享目錄在 box2 的 /nfs:
<code># semanage fcontext -a -t public_content_rw_t "/nfs(/.*)?"</code>
<code># restorecon -r /nfs</code>
<code># setsebool -p nfs_export_all_rw on</code>
<code># setsebool -p nfs_export_all_ro on</code>
(其中 -p 标記訓示重新開機持久有效)。
最後,别忘了:
1、 建立一個名為 nfs 的組并給它添加使用者 nfsnobody,然後更改 /nfs 目錄的權限為 0770,組屬主為 nfs。于是,nfsnobody(對應請求使用者)在共享目錄有寫的權限,你就不需要在 /etc/exports 檔案中使用 norootsquash(lctt 譯注:設為 root_squash 意味着在通路 nfs 伺服器上的檔案時,客戶機上的 root 使用者不會被當作 root 使用者來對待)。
<code># groupadd nfs</code>
<code># usermod -a -g nfs nfsnobody</code>
<code># chmod 0770 /nfs</code>
<code># chgrp nfs /nfs</code>
2、 像下面那樣更改 export 檔案(/etc/exports)隻允許從 box1 使用 kerberos 安全驗證的通路(sec=krb5)。
注意:anongid 的值設定為之前建立的組 nfs 的 gid:
exports – 添加 nfs 共享
<code>/nfs box1(rw,sec=krb5,anongid=1004)</code>
3、 再次 exprot(-r)所有(-a)nfs 共享。為輸出添加詳情(-v)是個好主意,因為它提供了發生錯誤時解決問題的有用資訊:
<code># exportfs -arv</code>
4、 重新開機并啟用 nfs 伺服器以及相關服務。注意你不需要啟動 nfs-lock 和 nfs-idmapd,因為系統啟動時其它服務會自動啟動它們:
<code># systemctl restart rpcbind nfs-server nfs-lock nfs-idmap</code>
<code># systemctl enable rpcbind nfs-server</code>
在這篇指南中我們使用下面的測試環境:
用戶端機器 [box1: 192.168.0.18]
nfs / kerberos 伺服器 [box2: 192.168.0.20] (也稱為密鑰分發中心,簡稱 kdc)。
注意:kerberos 服務是至關重要的認證方案。
正如你看到的,為了簡便,nfs 伺服器和 kdc 在同一台機器上,當然如果你有更多可用機器你也可以把它們安裝在不同的機器上。兩台機器都在 <code>mydomain.com</code> 域。
為了配置域名解析,我們在用戶端和伺服器中編輯 /etc/hosts 檔案:
host 檔案 – 為域添加 dns
<code>192.168.0.18 box1.mydomain.com box1</code>
<code>192.168.0.20 box2.mydomain.com box2</code>
在 rhel 7 中,chrony 是用于 ntp 同步的預設軟體:
<code># yum install chrony</code>
<code># systemctl start chronyd</code>
<code># systemctl enable chronyd</code>
為了確定 chrony 确實在和時間伺服器同步你系統的時間,你可能要輸入下面的指令兩到三次,確定時間偏差盡可能接近 0:
<code># chronyc tracking</code>
用 chrony 同步伺服器時間
<a></a>
要設定 kdc,首先在用戶端和伺服器安裝下面的軟體包(用戶端不需要 server 軟體包):
<code># yum update && yum install krb5-server krb5-workstation pam_krb5</code>
安裝完成後,編輯配置檔案(/etc/krb5.conf 和 /var/kerberos/krb5kdc/kadm5.acl),像下面那樣用<code>mydomain.com</code> 替換所有 example.com。
下一步,確定 kerberos 能功過防火牆并啟動/啟用相關服務。
重要:用戶端也必須啟動和啟用 nfs-secure:
<code># firewall-cmd --permanent --add-service=kerberos</code>
<code># systemctl start krb5kdc kadmin nfs-secure</code>
<code># systemctl enable krb5kdc kadmin nfs-secure</code>
現在建立 kerberos 資料庫(請注意這可能會需要一點時間,因為它會和你的系統進行多次互動)。為了加速這個過程,我打開了另一個終端并運作了 <code>ping -f localhost</code> 30 到 45 秒):
<code># kdb5_util create -s</code>
建立 kerberos 資料庫
下一步,使用 kadmin.local 工具為 root 建立管理權限:
<code># kadmin.local</code>
<code># addprinc root/admin</code>
添加 kerberos 伺服器到資料庫:
<code># addprinc -randkey host/box2.mydomain.com</code>
在用戶端(box1)和伺服器(box2)上對 nfs 服務同樣操作。請注意下面的截圖中在退出前我忘了在 box1 上進行操作:
<code># addprinc -randkey nfs/box2.mydomain.com</code>
<code># addprinc -randkey nfs/box1.mydomain.com</code>
輸入 quit 和Enter鍵退出:
添加 kerberos 到 nfs 伺服器
為 root/admin 擷取和緩存票據授權票據ticket-granting ticket:
<code># kinit root/admin</code>
<code># klist</code>
緩存 kerberos
真正使用 kerberos 之前的最後一步是儲存被授權使用 kerberos 身份驗證的規則到一個密鑰表檔案(在伺服器中):
<code># kdadmin.local</code>
<code># ktadd host/box2.mydomain.com</code>
<code># ktadd nfs/box2.mydomain.com</code>
<code># ktadd nfs/box1.mydomain.com</code>
最後,挂載共享目錄并進行一個寫測試:
<code># mount -t nfs4 -o sec=krb5 box2:/nfs /mnt</code>
<code># echo "hello from tecmint.com" > /mnt/greeting.txt</code>
挂載 nfs 共享
現在讓我們解除安裝共享,在用戶端中重命名密鑰表檔案(模拟它不存在)然後試着再次挂載共享目錄:
<code># umount /mnt</code>
<code># mv /etc/krb5.keytab /etc/krb5.keytab.orig</code>
挂載/解除安裝 kerberos nfs 共享
現在你可以使用基于 kerberos 身份驗證的 nfs 共享了。
本文來自雲栖社群合作夥伴“linux中國”,原文發表于2013-04-02.