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

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

Questo articolo si applica a Questo articolo non si applica a Questo articolo non è legato a un prodotto specifico. Non tutte le versioni del prodotto sono identificate in questo articolo.

Sintomi

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

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

 

Causa

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

 

Risoluzione

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

 

Prodotti interessati

PowerScale OneFS
Proprietà dell'articolo
Numero articolo: 000226868
Tipo di articolo: Solution
Ultima modifica: 16 lug 2024
Versione:  1
Trova risposta alle tue domande dagli altri utenti Dell
Support Services
Verifica che il dispositivo sia coperto dai Servizi di supporto.