NTFS アクセス権と NFS アクセスについて

こんにちは。Windows プラットフォーム サポートの松岡です。

今回は NTFS アクセス権と NFS アクセス時のアクセス権の動作についてご紹介します。

Windows サーバー上に作成された NFS 共有フォルダに UNIX クライアントからアクセスしファイルを作成した際に UNIX クライアントからは該当ユーザーにフル コントロールのアクセス権が付与されていることが確認できます。
しかしながら、該当ファイルを Windows サーバー上で削除しようとするとアクセス拒否が発生し削除できない場合があります。
この現象について以下のように検証を行いました。

- Windows サーバー: ユーザー "user1" とグループ "grp1" を作成し、grp1 に user1 を追加しプライマリー グループに設定する。
- Unix クライアント: ユーザー "user1" とグループ "grp1" を作成する。
- 作成したユーザーとグループのマッピングを行い、Windows サーバー上に NFS 共有フォルダ (NTFS-NFS) を作成する。

この際、以下のようなアクセス権が設定されたと仮定します。

> Cacles C:\NTFS-NFS
  C:\NTFS-NFS <machine_name>\grp1:(OI)(CI)(特殊なアクセス :)

                                                      READ_CONTROL

                                                      WRITE_DAC

                                                      WRITE_OWNER

                                                      SYNCHRONIZE

                                                      FILE_GENERIC_READ

                                                      FILE_GENERIC_WRITE

                                                      FILE_GENERIC_EXECUTE

                                                      FILE_READ_DATA

                                                      FILE_WRITE_DATA

                                                      FILE_APPEND_DATA

                                                      FILE_READ_EA

                                                      FILE_WRITE_EA

                                                      FILE_EXECUTE

                                                      FILE_READ_ATTRIBUTES

                                                      FILE_WRITE_ATTRIBUTES

                               NT AUTHORITY\SYSTEM:(OI)(CI)(ID)F

                               BUILTIN\Administrators:(OI)(CI)(ID)F

grp1 のアクセス権は以下の画像のハイライト部分以外はすべて許可されています。

※画像の C:\NTFS は C:\NTFS-NFS に読み替えてください。

※ 上記設定により user1 のアクセス権は grp1 に設定されたアクセス権を基に継承されます。

UNIX クライアントから以下の操作を実施します。

- NFS 共有を root 権限でマウントします。
- user1 でログオンします。( UNIX クライアント上の user1 は windows サーバー上の user1 にマップされています)
- NFS 共有配下に "user1_unix" フォルダを作成します。

この際に "user1_unix" フォルダを Windows 上で確認すると NTFS アクセス権は継承されておりません。
(同様に Windows サーバー上でフォルダを作成した場合には NFS アクセス権が継承されます。)

※画像の /TestNFS/ は /user1_unix/ に読み替えてください。

UNIX クライアントからは以下のアクセス権が設定されていることを確認できます。

- user1 が "user1_unix" のオーナーに設定されている。
- user1 には RWX のアクセス権が設定されている。
- grp1 には親フォルダと同様のアクセス権が設定されている。

上述の通り、UNX クライアント側からは RWX が設定されており、且つ、オーナーにもかかわらず "user1_unix" フォルダを削除することができません。
ネットワーク キャプチャを取得してみると、rmdir コールが正しい UID、GID で送られていますが "err_access" (アクセス拒否) が返されています。

//Access call

//Access reply call

//delete call (RMDIR)

この時 Windows サーバー上で User1 でログオンし、NFS 共有配下にフォルダを作成すると user1 が当該フォルダのオーナーであり、フル コントロールの NTFS アクセス権が設定されていることが確認できます。 また当該フォルダの削除も行えます。

------------------------

まとめ

UNIX クライアントからファイル/フォルダを削除するには以下の条件を満たしている必要があります。

1. grp1 に対して親フォルダ (nfstest) に "サブフォルダーとファイルの削除" のアクセス権が設定されている。
2. user1 に対して親フォルダ (nfstest) に "削除" のアクセス権が設定されている。

検証の結果からは以下ののことがわかりました。

- "サブフォルダーとファイルの削除" のアクセス権を削除すると、UNIX クライアント側からは RWX のアクセス権が設定されていても対象ファイル/フォルダを削除することができない。
- Windows 側では、NFS 共有配下にフォルダを作成すると、該当ユーザーがオーナーに設定され、フル コントロールの NTFS アクセス権が設定されるため、対象ファイル/フォルダの削除が行える。

このように NFS 経由の操作では UNIX 標準に準拠するため NTFS アクセス権の継承は無視されます。
そのため、NFS 共有上のファイル/フォルダに UNIX と Windows の両方のユーザーからアクセスする場合には KeepInheritance を設定することをお勧めします。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ServerforNFS\CurrentVersion\Mapping\KeepInheritance

既定では 0 が設定されており、NTFS アクセス権の継承は行われません。
こちらの値を 1 に設定することで NTFS アクセス権の継承が行われるようになります。

※ この記事は以下の英語ブログを基に作成しました。
How NFS access works over NTFS permissions
 https://blogs.technet.com/b/sfu/archive/2009/08/27/how-nfs-access-works-over-ntfs-permissions.aspx