web-dev-qa-db-ja.com

FreeBSDのKerberisedNFSv4では権限が有効になりません

私は現在、FreeBSDでNFSv4サーバーをセットアップしようとしています。私は他のUnices(SolarisおよびLinux)でこれを行った豊富な経験がありますが、FreeBSDにはかなり慣れていません。

私の目標は、次のことを達成することです。

  • FreeBSDシステムから提供されるファイル
  • 唯一のセキュリティモデルはkrb5pである必要があります
  • クライアントはLinux(Ubuntu)とOSXです

現在、ファイルシステムにアクセスするために有効なTGTが必要になるように設定することができました。これらのファイルにアクセスしようとした後、クライアントでklistを実行すると、nfs/domainnameプリンシパルが取得されたことがわかります。これは、NFSマウントのKerberos部分が正しいことを示しています。

私の問題は、すべてのクライアントアクセスがまだnobodyユーザーを使用して実行されていることです。ls -lを実行するとアクセス許可が表示されます。ユーザーマッピングも正しく機能しますが、nobodyにファイルを処理する権限がない限り、権限が拒否されます。

これはクライアントからのインタラクションの例です(この場合はUbuntuですが、OSXでも同じことが起こります)。この例では、/export/shared/testshareはFreeBSDサーバーからの共有ディレクトリです。

(実際のドメイン名をdomainに変更し、Kerberosレルム名をREALMに変更しました)

$ kinit
Password for elias@REALM:
$ klist
Ticket cache: FILE:/tmp/krb5cc_1000_GBjtDP
Default principal: elias@REALM

Valid starting       Expires              Service principal
09/02/2013 09:40:47  10/02/2013 09:40:44  krbtgt/REALM@REALM
$ Sudo mount -t nfs4 -osec=krb5p,vers=4 lion:/export/shared/testshare /mnt
$ ls -l /mnt
total 4
-rw-r--r-- 1 nobody nogroup   5 Feb  7 18:17 bar.txt
-rw------- 1 elias  nogroup   4 Feb  5 23:09 foo.txt
$ cat /mnt/bar.txt
blah
$ echo foo >>/mnt/bar.txt
bash: /mnt/bar.txt: Permission denied
$ cat /mnt/foo.txt
cat: /mnt/foo.txt: Permission denied
$ klist
Ticket cache: FILE:/tmp/krb5cc_1000_GBjtDP
Default principal: elias@REALM

Valid starting       Expires              Service principal
09/02/2013 09:40:47  10/02/2013 09:40:44  krbtgt/REALM@REALM
09/02/2013 09:41:56  10/02/2013 09:40:44  nfs/lion.domain@REALM

サーバー構成

FreeBSDでNFSv4をセットアップするための包括的なガイドを見つけるのにかなりの問題がありました。 FreeBSDで物事を行う方法に関する情報が非常に優れていることがわかったので、これ自体はやや驚くべきことです。

/etc/rc.confの関連する行は次のとおりです。

rpcbind_enable="YES"
nfs_server_enable="YES"
nfsv4_server_enable="YES"
nfsuserd_enable="YES"
nfscbd_enable="YES"
mountd_enable="YES"
gssd_enable="YES"
rpc_lockd_enable="YES"
rpc_statd_enable="YES"
zfs_enable="YES"

/etc/exportsの内容は次のとおりです。

/export/shared/testshare -sec=krb5p
V4: / -sec=krb5p

もう1つの興味深い側面は、tcpdumpを使用してクライアントとサーバー間のNFSネットワークトラフィックを記録したときに、NFS​​パケットとNFS4パケットが表示されたことです。 。これらのパケットタイプは両方とも暗号化されたデータを含んでいたので、Kerberosが使用されたと思いますが、上記の構成を考えると、NFS4トラフィックしかないと予想していました。

7

私は問題を解決しました。コードを調べたところ、原因はGSSライブラリのバグであることがわかりました。この問題は、getpwnam_rに送信されたバッファが小さすぎることが原因で発生しました。

すべての詳細は メーリングリスト の議論で見つけることができます

0
  1. vfs.nfsd.server_min_nfsvers=4でnfs3を無効にする必要があります。
  2. 「誰も」を避けるために、NFSv4クライアントとサーバーは同じにある必要があります ドメイン レルム。
0
igelkott

簡単に言えば、システム間でユーザー名をマッピングする方法が必要です。サーバーとクライアントの両方でidmapdを実行していますか? LDAP?

少なくともテストとして、少なくとも最初は、ルート以外の名前の間で特定のマッピングを作成してみてください。

0
igelkott