LDAP + KERBEROS + NFS。為什麼我需要 idmapd?
我想要做什麼
我有一個 freeIPA 域,有幾個客戶端和一個 Synology NAS(也註冊了 freeIPA)。
我在 NAS 上創建了一個共享文件夾,支持 NFSv4 + krb5。從客戶端,我獲得了 LDAP 使用者的票證
user1@mydomain.com
並掛載了這個文件夾。最初,在此文件夾中創建的文件將歸
nobody
使用者所有。我終於讓它工作了,通過
/etc/idmapd.conf
將 NAS 更改為
- 正確設置域
user1@mydomain.com
與本地使用者之間有靜態映射問題
我確實了解
idmapd
一般前 NFS 的作用。然而,在這種情況下:
- 為什麼我需要顯式映射?自己搞不定嗎?
- 為什麼我需要一個映射?NAS 也在同一個 freeIPA 域中,是一個 LDAP 客戶端,並且具有正確的 kerberos 主體。它完全知道是誰
user1@mydomain.com
,為什麼不能只使用該 uid 來獲得該文件夾的文件所有權,而不是本地的 uid使用者?我可以避免創建本地使用者嗎?我現在的
idmapd.conf
樣子是這樣的:[General] Domain=hq.example.com [Mapping] Nobody-User=guest Nobody-Group=users [Translation] Method=nsswitch GSS-Methods=static,synomap [Static] user1@HQ.EXAMPLE.COM=user1
我想要實現的是我不需要那個靜態映射
user1@HQ.EXAMPLE.COM=user1
,如果可能的話,我什至不需要user1
在 NAS 上創建本地使用者。
簡而言之,NFSv4 協議依賴於在伺服器和客戶端之間共享的使用者名,而不是 UID/GID****編號(在早期版本中使用)和 UID <==> 使用者名映射實際上可以不同在客戶端和伺服器上。
作為 NFSv4 協議的一部分,伺服器都需要將公共安全上下文/權限、所有者和所有者組映射到對本地文件系統操作有意義的東西。該映射由 IDMAPD 在 Linux 系統上完成。
在 Linux 系統上,許多本地文件系統操作都是基於 UID/GID 的,但這些操作需要先轉換為共享的 NFSv4 上下文,然後才能傳輸到 NFS 伺服器。
也許RFC 3530可以更好地解釋它:
§ 5.8。解釋所有者和所有者組
推薦的屬性
"owner"
和"owner_group"
(以及“acl”屬性中的使用者和組)以 UTF-8 字元串表示。為了避免與客戶端或伺服器上的特定底層實現相關聯的表示,已選擇使用 UTF-8 字元串。請注意,第 6.1 節$$ RFC2624 $$ 提供了額外的理由。預計客戶端和伺服器將擁有自己的所有者和所有者組的本地表示,用於本地儲存或呈現給最終使用者。因此,預計當這些屬性在客戶端和伺服器之間傳輸時,本地表示被轉換為形式的語法
"user@dns_domain"
。這將允許不使用相同本地表示的客戶端和伺服器能夠轉換為兩者都可以解釋的通用語法。編輯以響應您的 imapd.conf。
您使用到本地使用者的靜態映射。您可能希望將 NFSv4 身份映射到 LDAP 使用者,這可能應該通過
nsswitch
選項發生,但顯然不是。您可以嘗試通過增加 NFS 伺服器上 idmapd 的詳細程度來查看發生了什麼。或者將 idmapd 配置為直接查詢您的 LDAP 伺服器。確切的語法可能取決於您使用的版本,但手冊頁顯示了以下內容:
[General] Verbosity = 0 Domain = domain.org Local-Realms = DOMAIN.ORG,MY.DOMAIN.ORG,YOUR.DOMAIN.ORG [Mapping] Nobody-User = nfsnobody Nobody-Group = nfsnobody [Translation] Method = umich_ldap,nsswitch GSS-Methods = umich_ldap,static [Static] johndoe@OTHER.DOMAIN.ORG = johnny [UMICH_SCHEMA] LDAP_server = ldap.domain.org LDAP_base = dc=org,dc=domain