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

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

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.

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

 

Cause

Ця зміна в поведінці була внесена в основне ядро 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

 

Resolution

Поведінка 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)

 

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.