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 で検索すると、役立つ結果がたくさん見つかります (最も有望なものを指摘しただけです)