OneFS: Оновлення ядра Linux до NFS спричиняє збої викликів «доступу»

摘要: Оновлення коду мережевої файлової системи (NFS) у ядрі Linux змінило поведінку викликів «доступу», які перевіряють дозволи «WRITE» для певних наборів дозволів OneFS. Ця зміна приводить поведінку Linux NFS і блоку повідомлень сервера (SMB) у відповідність одна до одної, роблячи цю перевірку узгодженою незалежно від того, який протокол ви використовуєте. ...

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

症状

Після оновлення ядра Linux перевірки доступу, які раніше були успішними, тепер зазнають невдачі в каталогах, у яких користувач, що має доступ, не має прав «delete_child» на каталог, пов'язаний з їхнім робочим процесом. Це можна перевірити за допомогою Linux test за допомогою команди -w прапор проти тієї ж директорії; У старих версіях ядра код повернення цієї команди виглядає наступним чином 0 тоді як у нових ядрах це 1.

Це впливає на перехід клієнтів Red Hat і Centos з версії 7 на новіші.

 

原因

Ця зміна в поведінці була внесена в основне ядро Linux v4.13-rc2За цим гіперпосиланням ви переходите на веб-сайт за межами Dell Technologies. під час рефакторингу коду драйвера NFS. Однак, судячи з усього, перевірка була присутня станом на версію основного ядра v3.7-rc1За цим гіперпосиланням ви переходите на веб-сайт за межами Dell Technologies., і її неправильно називали.

Після детального розгляду ми вважаємо, що як нова поведінка ядра Linux, так і наша поведінка є правильними. Компанія linux test command і access Обидва системні виклики базуються на стандарті POSIX, який лише концептуалізує:

  • ЧИТАТИ
  • НАПИСАТИ
  • ВИКОНАТИ

Беручи до уваги, що відповідно до rfc1813#section-3.3.4За цим гіперпосиланням ви переходите на веб-сайт за межами Dell Technologies. та rfc7530#section-16.1За цим гіперпосиланням ви переходите на веб-сайт за межами Dell Technologies.; NFS надає більш детальні дозволи, а отже, концептуалізує:

  • ЧИТАТИ
  • ЗМІНИТИ
  • ДОДАТИ
  • ВИДАЛИТИ
  • ВИКОНАТИ

При цьому дозвіл DELETE визначається як те, чи може клієнт Delete an existing directory entry. Це безпосередньо пов'язано з delete_child в OneFS, і повинні бути відхилені в обставинах, коли клієнт не має такого дозволу. Також зверніть увагу; Дозволи POSIX і NFS не зовсім збігаються. POSIX WRITE включає всі концепції в окремих дозволах на зміну, додавання та видалення NFS. Отже, коли інструмент POSIX намагається перевірити права доступу "WRITE", ядро Linux перетворює цей запит на "WRITE" у "MODIFY and APPEND and 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 з дозволу для всіх вони можуть додати цей дозвіл для всіх або додати додатковий запис керування доступом (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
从其他戴尔用户那里查找问题的答案
支持服务
检查您的设备是否在支持服务涵盖的范围内。