web-dev-qa-db-ja.com

ユーザーIDが一致しない場合(idmapが機能している場合でも)、NFS4権限が拒否されました

Idmapdが正しく機能するNFS4セットアップがあります。クライアントからの_ls -l_は、ユーザーIDがマシン間で異なっていても、正しいユーザー名を表示します。

ただし、ユーザーIDが一致しない場合、_ls -l_に正しいユーザー名が表示されていても、ファイルにアクセスしようとすると「許可が拒否されました」というエラーが発生します。ユーザーIDが偶然に一致した場合、すべてが正常に機能します。

_Sudo sysctl -w sunrpc.nfsd_debug=1023_は、失敗したファイルアクセスのサーバーsyslogに次の出力を提供します。

_nfsd_dispatch: vers 4 proc 1
nfsv4 compound op #1/3: 22 (OP_PUTFH)
nfsd: fh_verify(28: 00070001 015c0001 00000000 9853d400 2a4892a5 4918a0ba)
nfsv4 compound op ffff88003d0f5078 opcnt 3 #1: 22: status 0
nfsv4 compound op #2/3: 3 (OP_ACCESS)
nfsd: fh_verify(28: 00070001 015c0001 00000000 9853d400 2a4892a5 4918a0ba)
nfsd: fh_verify - just checking
nfsv4 compound op ffff88003d0f5078 opcnt 3 #2: 3: status 0
nfsv4 compound op #3/3: 9 (OP_GETATTR)
nfsd: fh_verify(28: 00070001 015c0001 00000000 9853d400 2a4892a5 4918a0ba)
nfsd: fh_verify - just checking
nfsv4 compound op ffff88003d0f5078 opcnt 3 #3: 9: status 0
nfsv4 compound returned 0
nfsd_dispatch: vers 4 proc 1
nfsv4 compound op #1/7: 22 (OP_PUTFH)
nfsd: fh_verify(28: 00070001 015c0001 00000000 9853d400 2a4892a5 4918a0ba)
nfsv4 compound op ffff88003d0f5078 opcnt 7 #1: 22: status 0
nfsv4 compound op #2/7: 32 (OP_SAVEFH)
nfsv4 compound op ffff88003d0f5078 opcnt 7 #2: 32: status 0
nfsv4 compound op #3/7: 18 (OP_OPEN)
NFSD: nfsd4_open filename dom_file op_stateowner (null)
renewing client (clientid 4f96587d/0000000e)
nfsd: nfsd_lookup(fh 28: 00070001 015c0001 00000000 9853d400 2a4892a5 4918a0ba, dom_file)
nfsd: fh_verify(28: 00070001 015c0001 00000000 9853d400 2a4892a5 4918a0ba)
nfsd: fh_verify - just checking
nfsd: fh_lock(28: 00070001 015c0001 00000000 9853d400 2a4892a5 4918a0ba) locked = 0 
nfsd: fh_compose(exp 08:01/22806529 srv/dom_file, ino=22809724)
nfsd: fh_verify(36: 01070001 015c0001 00000000 9853d400 2a4892a5 4918a0ba)
nfsd: fh_verify - just checking
fh_verify: srv/dom_file permission failure, acc=804, error=13
nfsv4 compound op ffff88003d0f5078 opcnt 7 #3: 18: status 13
nfsv4 compound returned 13
_

それは誰にとっても役に立ちますか?これをデバッグするためのヒントをいただければ幸いです。

_Server kernel: 2.6.32-40-server (Ubuntu 10.04)
Client kernel: 3.2.0-27-generic (Ubuntu 12.04)
_

3.2.0-27-generic (Ubuntu 12.04)を実行している新しいサーバーでも同じ問題が発生します。

ありがとう。

2
SystemParadox

NFSv4は、クライアントとサーバー間でutf8文字列プリンシパルを使用します。その結果、クライアントとサーバーで同じユーザー名とnfs4ドメインを使用するだけで十分です。 uidは異なる場合があります。ただし、AUTH_SYS(デフォルトではsec = sysでマウント)を使用する場合、Kerberosプリンシパルの代わりにRPC要求は、クライアントホストからのuidとgidsを使用します。この場合、クライアントとサーバーのuidが異なると、アクセスが拒否されます。 RPCGSS_SECの場合、Kerberosプリンシパルが送信され、サーバー上で同じidmapdを使用してローカルのuidとgidにマップします。 ls -lは、idmapdを使用してファイルの所有者とグループのIDをプリンシパルにマップし、後でクライアントに送信するため、期待どおりに機能します。

1
kofemann