NFS ID 對映器

ID 對映器被 NFS 用來將使用者和組 ID 翻譯成名稱,並將使用者和組名稱翻譯成 ID。此翻譯過程的一部分涉及向上呼叫使用者空間以請求資訊。NFS 可以透過兩種方式獲取此資訊:呼叫 `/sbin/request-key` 或呼叫 `rpc.idmap` 守護程序。

NFS 將首先嚐試呼叫 `/sbin/request-key`。如果成功,結果將使用通用 `request-key` 快取進行快取。只有當 `/etc/request-key.conf` 未配置 `id_resolver` 金鑰型別時,此呼叫才會失敗;如果您希望使用 `request-key` 方法,請參閱下面的“配置”部分。

如果呼叫 `/sbin/request-key` 失敗(即 `/etc/request-key.conf` 未配置 `id_resolver` 金鑰型別),則 ID 對映器將向舊版 `rpc.idmap` 守護程序請求 ID 對映。此結果將儲存在自定義的 NFS ID 對映快取中。

配置

需要修改檔案 `/etc/request-key.conf`,以便 `/sbin/request-key` 可以導向向上呼叫。應新增以下行:

#OP   TYPE    DESCRIPTION     CALLOUT INFO    PROGRAM ARG1 ARG2 ARG3 ... #======       ======= =============== =============== =============================== create        id_resolver     *       *               /usr/sbin/nfs.idmap %k %d 600

這將把所有 `id_resolver` 請求導向程式 `/usr/sbin/nfs.idmap`。最後一個引數 `600` 定義了金鑰將在未來多少秒後過期。此引數對於 `/usr/sbin/nfs.idmap` 是可選的。當未指定超時時,`nfs.idmap` 將預設為 `600` 秒。

ID 對映器用於金鑰描述

  uid:  Find the UID for the given user
  gid:  Find the GID for the given group
 user:  Find the user  name for the given UID
group:  Find the group name for the given GID

您可以單獨處理這些請求,而不是使用通用向上呼叫程式。如果您想使用自己的程式進行 UID 查詢,那麼您需要編輯您的 `request-key.conf`,使其看起來類似於此:

#OP   TYPE    DESCRIPTION     CALLOUT INFO    PROGRAM ARG1 ARG2 ARG3 ... #======       ======= =============== =============== =============================== create        id_resolver     uid:*   *               /some/other/program %k %d 600 create        id_resolver     *       *               /usr/sbin/nfs.idmap %k %d 600

請注意,新行已新增到通用程式行之上。`request-key` 將找到第一個匹配的行和相應的程式。在這種情況下,`/some/other/program` 將處理所有 UID 查詢,而 `/usr/sbin/nfs.idmap` 將處理 GID、使用者和組查詢。

有關 `request-key` 函式的更多資訊,請參閱金鑰請求服務

nfs.idmap

`nfs.idmap` 旨在由 `request-key` 呼叫,不應“手動”執行。此程式接受兩個引數:一個序列化金鑰和一個金鑰描述。序列化金鑰首先轉換為 `key_serial_t`,然後作為引數傳遞給 `keyctl_instantiate`(兩者都是 `keyutils.h` 的一部分)。

實際的查詢由 `nfsidmap.h` 中找到的函式執行。`nfs.idmap` 透過檢視描述字串的第一部分來確定要呼叫的正確函式。例如,UID 查詢描述將顯示為“`uid:user@domain`”。

如果金鑰已例項化,`nfs.idmap` 將返回 `0`,否則返回非零值。