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

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

本文适用于 本文不适用于 本文并非针对某种特定的产品。 本文并非包含所有产品版本。

症状

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

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

 

原因

この動作の変更は、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

 

解决方案

この状況での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)

 

受影响的产品

PowerScale OneFS
文章属性
文章编号: 000226868
文章类型: Solution
上次修改时间: 16 7月 2024
版本:  1
从其他戴尔用户那里查找问题的答案
支持服务
检查您的设备是否在支持服务涵盖的范围内。