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

摘要: Обновление кода сетевой файловой системы (NFS) в ядре Linux изменило поведение вызовов access, проверяющих разрешения WRITE для определенных наборов разрешений OneFS. Это изменение приводит поведение Linux NFS и SMB (Server Message Block) в соответствие друг с другом, что делает эту проверку согласованной независимо от используемого протокола. ...

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

症状

После модернизации ядра Linux проверки доступа, которые ранее были успешными, теперь завершаются сбоем в каталогах, в которых пользователь, получающий доступ, не имеет разрешений «delete_child» для каталога, связанного с его рабочим процессом. Это можно проверить с помощью test с помощью команды -w флаг напротив того же каталога; В старых версиях ядра код возврата из этой команды выглядит следующим образом: 0 в то время как в более новых ядрах он 1.

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

 

原因

Это изменение поведения было внесено в основное ядро 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

 

解决方案

Поведение 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
从其他戴尔用户那里查找问题的答案
支持服务
检查您的设备是否在支持服务涵盖的范围内。