OneFS. Обновление ядра Linux до NFS приводит к сбоям вызова 'access'

Summary: Обновление кода сетевой файловой системы (NFS) в ядре Linux изменило поведение вызовов access, проверяющих разрешения WRITE для определенных наборов разрешений OneFS. Это изменение приводит поведение 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» для каталога, связанного с его рабочим процессом. Это можно проверить с помощью test с помощью команды -w флаг напротив того же каталога; В старых версиях ядра код возврата из этой команды выглядит следующим образом: 0 в то время как в более новых ядрах он 1.

Это влияет на клиентов Red Hat и Centos, переходящих с версии 7 на более новые выпуски.

 

Cause

Это изменение поведения было внесено в основное ядро Linux версии 4.13-rc2Эта гиперссылка позволяет перейти на сайт за пределами Dell Technologies. во время рефакторинга кода драйвера NFS. Однако, по-видимому, проверка присутствовала в основном ядре v3.7-rc1Эта гиперссылка позволяет перейти на сайт за пределами Dell Technologies. и вызывалась неправильно.

После тщательного анализа мы пришли к выводу, что и поведение нового ядра Linux, и наше поведение являются правильными. Линукс test command и access Оба системных вызова основаны на стандарте POSIX, который концептуализирует только:

  • ЧИТАТЬ
  • ПИСАТЬ
  • ИСПОЛНЯТЬ

Принимая во внимание, что согласно rfc1813#section-3.3.4Эта гиперссылка позволяет перейти на сайт за пределами Dell Technologies. и rfc7530#section-16.1Эта гиперссылка позволяет перейти на сайт за пределами Dell Technologies.; NFS предоставляет более детализированные разрешения и поэтому концептуализирует:

  • ЧИТАТЬ
  • МОДИФИЦИРОВАТЬ
  • ПРИБАВЛЯТЬ
  • DELETE
  • ИСПОЛНЯТЬ

При этом разрешение DELETE определяется как то, может ли клиент Delete an existing directory entry. Это напрямую связано с delete_child в OneFS и должен быть запрещен в обстоятельствах, когда у клиента нет такого разрешения. Также обратите внимание; Разрешения POSIX и NFS не совпадают. POSIX WRITE включает в себя все концепции в отдельных разрешениях NFS MODIFY, APPEND и DELETE. Поэтому, когда инструмент 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.