OneFS:LinuxカーネルをNFSにアップデートすると「アクセス」コールが失敗する

Summary: LinuxカーネルのNetwork File System (NFS)コードの更新により、特定のOneFS権限セットの「WRITE」権限をチェックする「access」コールの動作が変更されました。この変更により、Linux NFSとSMB(Server Message Block)の動作が一致し、使用しているプロトコルに関係なく、このチェックの一貫性が保たれます。

This article applies to This article does not apply to This article is not tied to any specific product. Not all product versions are identified in this article.

Symptoms

Linuxカーネルのアップグレード後、以前は成功していたアクセス チェックが、アクセスするユーザーがワークフローに関連するディレクトリーに対する「delete_child」権限を持っていないディレクトリーで失敗するようになりました。これは、Linux test コマンドを -w その同じディレクトリに対するフラグ。古いカーネル バージョンでは、このコマンドからのリターン コードは 0 一方、新しいカーネルでは 1が連携しない場合があります。

これは、バージョン7からそれ以降のリリースに移行しているRed HatおよびCentosクライアントに影響します。

 

Cause

この動作の変更は、NFSドライバー コードのリファクター中にLinuxメインライン カーネル v4.13-rc2このハイパーリンクをクリックすると、デル・テクノロジーズ以外のWebサイトにアクセスします。 で導入されました。しかし、どうやらこのチェックはメインラインカーネル v3.7-rc1このハイパーリンクをクリックすると、デル・テクノロジーズ以外のWebサイトにアクセスします。の時点で存在しており、正しく呼び出されていませんでした。

広範囲にわたるレビューの結果、新しいLinuxカーネルの動作と私たちの動作の両方が正しいと考えています。ザ・リナックス test command と access システムコールはどちらもPOSIX標準に基づいており、POSIX標準は以下を概念化しているだけです。

  • 読む
  • 書く
  • 実行する

一方、rfc1813#section-3.3.4このハイパーリンクをクリックすると、デル・テクノロジーズ以外のWebサイトにアクセスします。およびrfc7530#section-16.1このハイパーリンクをクリックすると、デル・テクノロジーズ以外のWebサイトにアクセスします。;NFSでは、より細分化された権限が許可されるため、次の概念が提供されます。

  • 読む
  • 修飾する
  • 追加
  • DELETE
  • 実行する

DELETE権限が定義されている場合は、クライアントが Delete an existing directory entryが連携しない場合があります。これは、以下に直接マッピングされます。 delete_child クライアントにその権限がない状況では拒否されるべきです。また、注意してください。POSIXとNFSの権限が完全には一致しません。POSIX WRITEには、個別のNFSのMODIFY、APPEND、DELETE権限のすべての概念が含まれています。したがって、POSIXツールが「WRITE」権限をチェックしようとすると、Linuxカーネルは「WRITE」の要求を「MODIFYとAPPENDとDELETE」に変換します

最後に、新しい動作は、このアクセス許可セットもサポートする他の Linux ファイル システム ドライバーとより一致しています。たとえば、同じ権限セットを持つSMBファイラーに対してテストすると、POSIX WRITEを test コマンドを -w 旗。
 

# Old kernel
ancons@ubuntu:~$ uname -r
4.13.0-041300rc1-generic
ancons@ubuntu:~$ sudo mount -o vers=4,proto=tcp 10.20.0.181:/ifs /mnt/nfs
ancons@ubuntu:~$ sudo mount -o user=admin,pass=a //10.20.0.181/ifs /mnt/smb
ancons@ubuntu:~$ test -w /mnt/nfs/posix; echo "$?"
0
ancons@ubuntu:~$ test -w /mnt/smb/posix; echo "$?"
1

# New kernel
ancons@ubuntu:~$ uname -r
4.14.0-041400rc4-generic
ancons@ubuntu:~$ sudo mount -o vers=4,proto=tcp 10.20.0.181:/ifs /mnt/nfs
ancons@ubuntu:~$ sudo mount -o user=admin,pass=a //10.20.0.181/ifs /mnt/smb
ancons@ubuntu:~$ test -w /mnt/nfs/posix; echo "$?"
1
ancons@ubuntu:~$ test -w /mnt/smb/posix; echo "$?"
1

 

Resolution

この状況でのOneFSとLinuxの両方の動作は正しいです。この問題の影響を受けるワークフローでは、 delete_child 影響を受けるユーザーとグループへのアクセス許可。たとえば、ディレクトリーが所有者のユーザーとグループにフル アクセスを提供するが、 delete_child Everyone権限から、その権限をすべてのユーザーに追加するか、問題が発生しているユーザーまたはグループのアクセス制御エントリー(ACE)をのアクセス制御リスト(ACL)に直接追加できます。

# ACL that only allows root to delete child items
p980-1-1# ls -led /ifs/posix-delete_child
drwxrwxrwx +   2 root  wheel  0 Jun 18 14:20 /ifs/posix-delete_child
 OWNER: user:root
 GROUP: group:wheel
 0: user:root allow dir_gen_read,dir_gen_write,dir_gen_execute,std_write_dac,delete_child
 1: group:wheel allow dir_gen_read,dir_gen_write,dir_gen_execute,delete_child
 2: everyone allow dir_gen_read,dir_gen_write,dir_gen_execute

# ACL that allows a specific additional group to delete child items
p980-1-1# ls -led /ifs/posix-delete_child
drwxrwxrwx +   2 root  wheel  0 Jun 18 14:20 /ifs/posix-delete_child
 OWNER: user:root
 GROUP: group:wheel
 0: group:admin allow dir_gen_read,dir_gen_write,dir_gen_execute,delete_child
 1: user:root allow dir_gen_read,dir_gen_write,dir_gen_execute,std_write_dac,delete_child
 2: group:wheel allow dir_gen_read,dir_gen_write,dir_gen_execute,delete_child
 3: everyone allow dir_gen_read,dir_gen_write,dir_gen_execute

# ACL that allows everyone to delete child items
p980-1-1# ls -led /ifs/posix-delete_child
drwxrwxrwx +   2 root  wheel  0 Jun 18 14:20 /ifs/posix-delete_child
 OWNER: user:root
 GROUP: group:wheel
 0: user:root allow dir_gen_read,dir_gen_write,dir_gen_execute,std_write_dac,delete_child
 1: group:wheel allow dir_gen_read,dir_gen_write,dir_gen_execute,delete_child
 2: everyone allow dir_gen_read,dir_gen_write,dir_gen_execute,delete_child

Linuxカーネルを更新して、動作を元に戻すこともできます。これには、更新後にソースからLinuxカーネルをビルドする必要があります fs/nfs/dir.c 削除するには NFS4_ACCESS_DELETE 要件を NFS_MAY_WRITE マクロ。

処理前:

#define NFS_MAY_WRITE (NFS4_ACCESS_MODIFY | \
		NFS4_ACCESS_EXTEND | \
		NFS4_ACCESS_DELETE)

処理後:

#define NFS_MAY_WRITE (NFS4_ACCESS_MODIFY | \
		NFS4_ACCESS_EXTEND)

 

Affected Products

PowerScale OneFS
Article Properties
Article Number: 000226868
Article Type: Solution
Last Modified: 16 July 2024
Version:  1
Find answers to your questions from other Dell users
Support Services
Check if your device is covered by Support Services.