OneFS: Aktualizacja jądra systemu plików NFS powoduje niepowodzenie wywołania dostępu

摘要: Aktualizacja kodu sieciowego systemu plików (NFS) w jądrze systemu Linux zmieniła zachowanie wywołań "access" sprawdzających uprawnienia "WRITE" dla określonych zestawów uprawnień OneFS. Ta zmiana sprawia, że zachowania systemu Linux NFS i bloku komunikatów serwera (SMB) są ze sobą zgodne, dzięki czemu ta kontrola jest spójna niezależnie od używanego protokołu. ...

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

症状

Po uaktualnieniu jądra systemu Linux kontrole dostępu, które wcześniej zakończyły się powodzeniem, teraz kończą się niepowodzeniem w katalogach, w których użytkownik uzyskujący dostęp nie ma uprawnień "delete_child" w katalogu związanym z jego przepływem pracy. Można to sprawdzić za pomocą systemu Linux test polecenie za pomocą polecenia -w flaga dla tego samego katalogu; W starych wersjach jądra kod powrotny z tego polecenia to 0 podczas gdy w nowszych jądrach jest to 1.

Dotyczy to klientów Red Hat i Centos przechodzących z wersji 7 do nowszych wersji.

 

原因

Ta zmiana zachowania została wprowadzona w głównym jądrze systemu Linux w wersji 4.13-rc2Kliknięcie tego hiperłącza powoduje wyświetlenie strony spoza witryny Dell Technologies. podczas refaktoryzacji kodu sterownika NFS. Jednak najwidoczniej check był obecny w głównym jądrze v3.7-rc1Kliknięcie tego hiperłącza powoduje wyświetlenie strony spoza witryny Dell Technologies. i nie był poprawnie wywoływany.

Po szczegółowym przeglądzie uważamy, że zarówno nowe zachowanie jądra Linuksa, jak i nasze zachowanie jest poprawne. Linux test komenda i access Wywołania systemowe są oparte na standardzie POSIX, który konceptualizuje jedynie:

  • CZYTAĆ
  • PISAĆ
  • WYKONAĆ

zgodnie z rfc1813#sekcja-3.3.4Kliknięcie tego hiperłącza powoduje wyświetlenie strony spoza witryny Dell Technologies. i rfc7530#sekcja-16.1Kliknięcie tego hiperłącza powoduje wyświetlenie strony spoza witryny Dell Technologies.; NFS umożliwia bardziej szczegółowe uprawnienia, a zatem konceptualizuje:

  • CZYTAĆ
  • MODYFIKOWAĆ
  • DOŁĄCZYĆ
  • DELETE
  • WYKONAĆ

Uprawnienie DELETE jest definiowane jako określa, czy klient może Delete an existing directory entry. To bezpośrednio odwzorowuje na delete_child w OneFS i powinny zostać odrzucone w okolicznościach, w których klient nie ma takiego uprawnienia. Zauważ również; Uprawnienia POSIX i NFS nie są dokładnie zgodne. POSIX WRITE zawiera wszystkie pojęcia w oddzielnych uprawnieniach NFS MODIFY, APPEND i DELETE. Tak więc, gdy narzędzie POSIX próbuje sprawdzić uprawnienia "WRITE", jądro Linuksa tłumaczy to żądanie "WRITE" na "MODIFY and APPEND and DELETE"

Wreszcie, nowsze zachowanie jest bardziej zgodne z innymi sterownikami systemu plików Linux, które również obsługują ten zestaw uprawnień. Na przykład testowanie na pliku SMB z tym samym zestawem uprawnień również zwraca błąd podczas sprawdzania POSIX WRITE z parametrem test za pomocą polecenia -w flaga.
 

# 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

 

解决方案

Zachowania systemów OneFS i Linux w tej sytuacji są poprawne, ponieważ przepływy pracy, których dotyczy ten problem, muszą zapewniać delete_child Uprawnienia dla użytkowników i grup, których dotyczy problem. Jeśli na przykład katalog zapewnia pełny dostęp do swojego właściciela i grupy, ale usuwa delete_child z poziomu uprawnienia wszyscy mogą dodać to uprawnienie do wszystkich lub dodać dodatkowy wpis kontroli dostępu (ACE) dla użytkownika lub grupy, która widzi problemy bezpośrednio na liście kontroli dostępu (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

Możliwe jest również zaktualizowanie jądra Linuksa, aby odwrócić to zachowanie. Wymaga to zbudowania jądra Linuksa ze źródeł po aktualizacji fs/nfs/dir.c Aby wymontować NFS4_ACCESS_DELETE wymóg wynikający z NFS_MAY_WRITE Makro.

Przed:

#define NFS_MAY_WRITE (NFS4_ACCESS_MODIFY | \
		NFS4_ACCESS_EXTEND | \
		NFS4_ACCESS_DELETE)

Po:

#define NFS_MAY_WRITE (NFS4_ACCESS_MODIFY | \
		NFS4_ACCESS_EXTEND)

 

受影响的产品

PowerScale OneFS
文章属性
文章编号: 000226868
文章类型: Solution
上次修改时间: 16 7月 2024
版本:  1
从其他戴尔用户那里查找问题的答案
支持服务
检查您的设备是否在支持服务涵盖的范围内。