在 Linux 客戶端配置基於 Kerberos 身份驗證的 NFS 服務器


在這篇文章中我們會介紹配置基於 Kerberos 身份驗證的 NFS 共享的整個流程。假設你已經配置好了一個 NFS 服務器和一個客戶端。如果還沒有,可以參考 安裝和配置 NFS 服務器[2] - 它列出了需要安裝的依賴軟件包並解釋了在進行下一步之前如何在服務器上進行初始化配置。

另外,你可能還需要配置 SELinux[3] 和 firewalld[4] 以允許通過 NFS 進行文件共享。

下面的例子假設你的 NFS 共享目錄在 box2 的 /nfs:

# semanage fcontext -a -t public_content_rw_t "/nfs(/.*)?"
# restorecon -R /nfs
# setsebool -P nfs_export_all_rw on
# setsebool -P nfs_export_all_ro on

(其中 -P 標記指示重啟持久有效)。

最后,別忘了:

創建 NFS 組並配置 NFS 共享目錄

1、 新建一個名為 nfs 的組並給它添加用戶 nfsnobody,然后更改 /nfs 目錄的權限為 0770,組屬主為 nfs。於是,nfsnobody(對應請求用戶)在共享目錄有寫的權限,你就不需要在 /etc/exports 文件中使用 norootsquash(LCTT 譯注:設為 root_squash 意味着在訪問 NFS 服務器上的文件時,客戶機上的 root 用戶不會被當作 root 用戶來對待)。

# groupadd nfs
# usermod -a -G nfs nfsnobody
# chmod 0770 /nfs
# chgrp nfs /nfs

2、 像下面那樣更改 export 文件(/etc/exports)只允許從 box1 使用 Kerberos 安全驗證的訪問(sec=krb5)。

注意:anongid 的值設置為之前新建的組 nfs 的 GID:

exports – 添加 NFS 共享

/nfs box1(rw,sec=krb5,anongid=1004)

3、 再次 exprot(-r)所有(-a)NFS 共享。為輸出添加詳情(-v)是個好主意,因為它提供了發生錯誤時解決問題的有用信息:

# exportfs -arv

4、 重啟並啟用 NFS 服務器以及相關服務。注意你不需要啟動 nfs-lock 和 nfs-idmapd,因為系統啟動時其它服務會自動啟動它們:

# systemctl restart rpcbind nfs-server nfs-lock nfs-idmap
# systemctl enable rpcbind nfs-server

測試環境和其它前提要求

在這篇指南中我們使用下面的測試環境:

  • 客戶端機器 [box1: 192.168.0.18]
  • NFS / Kerberos 服務器 [box2: 192.168.0.20] (也稱為密鑰分發中心,簡稱 KDC)。

注意:Kerberos 服務是至關重要的認證方案。

正如你看到的,為了簡便,NFS 服務器和 KDC 在同一台機器上,當然如果你有更多可用機器你也可以把它們安裝在不同的機器上。兩台機器都在 mydomain.com 域。

最后同樣重要的是,Kerberos 要求客戶端和服務器中至少有一個域名解析的基本方式和網絡時間協議[5]服務,因為 Kerberos 身份驗證的安全一部分基於時間戳。

為了配置域名解析,我們在客戶端和服務器中編輯 /etc/hosts 文件:

host 文件 – 為域添加 DNS

192.168.0.18    box1.mydomain.com    box1
192.168.0.20    box2.mydomain.com    box2

在 RHEL 7 中,chrony 是用於 NTP 同步的默認軟件:

# yum install chrony
# systemctl start chronyd
# systemctl enable chronyd

為了確保 chrony 確實在和時間服務器同步你系統的時間,你可能要輸入下面的命令兩到三次,確保時間偏差盡可能接近 0:

# chronyc tracking

用 Chrony 同步服務器時間

用 Chrony 同步服務器時間

安裝和配置 Kerberos

要設置 KDC,首先在客戶端和服務器安裝下面的軟件包(客戶端不需要 server 軟件包):

# yum update && yum install krb5-server krb5-workstation pam_krb5

安裝完成后,編輯配置文件(/etc/krb5.conf 和 /var/kerberos/krb5kdc/kadm5.acl),像下面那樣用 mydomain.com 替換所有 example.com。

下一步,確保 Kerberos 能功過防火牆並啟動/啟用相關服務。

重要:客戶端也必須啟動和啟用 nfs-secure:

# firewall-cmd --permanent --add-service=kerberos
# systemctl start krb5kdc kadmin nfs-secure   
# systemctl enable krb5kdc kadmin nfs-secure       

現在創建 Kerberos 數據庫(請注意這可能會需要一點時間,因為它會和你的系統進行多次交互)。為了加速這個過程,我打開了另一個終端並運行了 ping -f localhost 30 到 45 秒):

# kdb5_util create -s

創建 Kerberos 數據庫

創建 Kerberos 數據庫

下一步,使用 kadmin.local 工具為 root 創建管理權限:

# kadmin.local
# addprinc root/admin

添加 Kerberos 服務器到數據庫:

# addprinc -randkey host/box2.mydomain.com

在客戶端(box1)和服務器(box2)上對 NFS 服務同樣操作。請注意下面的截圖中在退出前我忘了在 box1 上進行操作:

# addprinc -randkey nfs/box2.mydomain.com
# addprinc -randkey nfs/box1.mydomain.com

輸入 quit 和回車鍵退出:

添加 Kerberos 到 NFS 服務器

添加 Kerberos 到 NFS 服務器

為 root/admin 獲取和緩存票據授權票據ticket-granting ticket:

# kinit root/admin
# klist

緩存 Kerberos

緩存 Kerberos

真正使用 Kerberos 之前的最后一步是保存被授權使用 Kerberos 身份驗證的規則到一個密鑰表文件(在服務器中):

# kdadmin.local
# ktadd host/box2.mydomain.com
# ktadd nfs/box2.mydomain.com
# ktadd nfs/box1.mydomain.com

最后,掛載共享目錄並進行一個寫測試:

# mount -t nfs4 -o sec=krb5 box2:/nfs /mnt
# echo "Hello from Tecmint.com" > /mnt/greeting.txt

掛載 NFS 共享

掛載 NFS 共享

現在讓我們卸載共享,在客戶端中重命名密鑰表文件(模擬它不存在)然后試着再次掛載共享目錄:

# umount /mnt
# mv /etc/krb5.keytab /etc/krb5.keytab.orig

掛載/卸載 Kerberos NFS 共享

掛載/卸載 Kerberos NFS 共享

現在你可以使用基於 Kerberos 身份驗證的 NFS 共享了。

總結

在這篇文章中我們介紹了如何設置帶 Kerberos 身份驗證的 NFS。和我們在這篇指南中介紹的相比,該主題還有很多相關內容,可以在 Kerberos 手冊[6] 查看

 

閱讀原文


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM