idmap を使用した NFSv4

idmap を使用した NFSv4

NFS サーバーに次のエラーが表示されます。これを修正する方法を教えていただけますか?

詳細:

システム: CentOS リリース 6.4、NFS: nfs-utils-1.2.3-36

# cat /etc/idmapd.conf

[General]
Domain = domain.com

[Mapping]
Nobody-User = nobody
Nobody-Group = nobody

[Translation]
Method = nsswitch

Sep  3 08:25:28 snode1 rpc.idmapd[1382]: nss_getpwnam: name '0' does not map into domain 'domain.com'
Sep  3 08:25:29 snode1 rpc.idmapd[1382]: nss_getpwnam: name '500' does not map into domain 'domain.com'

編集: 2013年9月3日 10:41

私が使用しているのは NFSv4 であり、これらのエラーは NFS サーバーのみ (NFS クライアントではない) に表示されることに注意してください。

サーバ:

# cat /etc/sysconfig/nfs

MOUNTD_NFS_V2="no"
MOUNTD_NFS_V3="no"
...
RPCNFSDARGS="-N 2 -N 3"

クライアント:

# cat /etc/fstab

server:/     /data  nfs4    defaults,hard,intr,timeo=15,_netdev,noatime,nodiratime,nosuid    0 0

編集: 2014年6月11日水曜日 14:52:50 BST

# getent passwd "0" | cut -d: -f1
root
# getent passwd "500" | cut -d: -f1
user1

-

# grep "^passwd" /etc/nsswitch.conf 
passwd:     files

答え1

ちょっと推測してみます。NFS サーバーで UID '0' または '500' を解決すると、何が得られますか? ひょっとして、それらはローカル アカウントでしょうか?

私がこれを提案する理由は、NFSv4 は設計上、ドメイン内のアカウント名を参照し、以前のバージョンの NFS の「ローカル認証」を回避しようとするからです。そのため、NFS パケットで渡されるアカウント名を変換する idmapd を使用して、ユーザー名を UID/GID に変換します。

あなたが正しく判断したように、それがここで壊れているもののようです。そこで私の質問は、どの認証ドメインを使用しているか、そしてそれを照会すると、UID 0 と 500 の回答が得られるかということです。

たとえば、サーバーがクライアントと比較して LDAP (アクティブ ディレクトリ) ディレクトリの間違ったブランチを参照していたときに、同様の現象が発生したことがあります。UID/ユーザー名の関係を解決できなかったため、関係が壊れ、結果としてこれらのユーザーが「nobody」に変換されました。

nsswitch 経由で解像度が設定されています。nsswitch は 'passwd' に対して何と言っていますか? (主にサーバー上で、問題が発生しているようです)。

編集: OK、あなたの「passwd」によると、ローカルデータベースとして「files」があるようです/etc/passwd。つまり、UID/GIDをローカルアカウント経由でマッピングしているということです。すべきではないNFSv4 では UID を使用しないでください。ユーザー名を使用する必要があります。

しかし、グーグルでちょっと検索してみると、次のような結果が出てきます。 http://www.spinics.net/lists/linux-nfs/msg38598.html

したがって、次の質問は、「sys」認証を使用しているかどうかです。 fstab に基づいて推測すると、使用していると思われます。その時点で、クライアントは「sys」を使用しており、UID/GID を渡しているという想定どおりの動作です。idmapd は、それらが有効なユーザーではない (UID である) ためにエラーを報告しています。

クライアントで、UID 500 または 0 としてファイルを「タッチ」した場合、クライアントとサーバーではどのように見えるでしょうか (ユーザー名を取得するには ls -l、uid を取得するには ls -ln)? これが正しく動作している場合、これは NFSv3 Auth sys と NFSv4 間の下位互換性のアーティファクトであるように思われ、メッセージは無害です。

Kerberos 認証または類似の認証にアップグレードすることを検討することもできますが、経験上、これは簡単な作業ではありません。(ただし、かなり便利な利点もあります)。私がリンクしたメッセージ (トレイル) は、このエラー メッセージがそれ以降のカーネル バージョンで表示されなくなることを示しています。

答え2

ネットワーク経由で数値のユーザーおよびグループ識別子のみを送信する NFSv3 を使用しているようです。

idmapd を動作させるには、idmapper が理解し、ローカル アカウントにマップされる user@domain 識別子を送信する NFSv4 を使用する必要があります (したがって、サーバーとクライアントの両方で同じ uid/gid は必要ありません)。

-t オプションを使用してその共有をマウントしてみてください:

mount -t nfs4 server:/path /mountpoint

答え3

以下のソリューションがgentoo フォーラム助けます:

 1. On the NFS server, /etc/hostname did not contain the FQDN, just the local hostname.
 2. This particular client had an unconfigured /etc/idmapd.conf. It had Domain = localdomain instead of Domain = FQDN-minus-hostname. 

あなたの設定では、これは 2 番目のオプションのように見えます。

正確なエラー メッセージ「nss_getpwnam: name '0' does not map into domain」を Google で検索すると、役立つ結果がたくさん見つかります (最も有望なものを指摘しただけです)

関連情報