OneFS: Uppdatering av Linux-kerneln till NFS orsakar fel vid åtkomstanrop

Riepilogo: En uppdatering av NFS-kod (Network File System) i Linux-kärnan har ändrat beteendet för åtkomstanrop som kontrollerar skrivbehörigheter för specifika OneFS-behörighetsuppsättningar. Den här ändringen gör att Linux NFS- och SMB-beteenden (Server Message Block) överensstämmer med varandra, vilket gör den här kontrollen konsekvent oavsett vilket protokoll du använder. ...

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

Efter en uppgradering av Linux-kerneln misslyckas nu åtkomstkontroller som tidigare lyckades på kataloger där den anropande användaren inte har "delete_child"-behörighet för en katalog som ingår i arbetsflödet. Detta kan valideras med hjälp av Linux-programmet. test kommandot med -w flagga mot samma katalog. På gamla kernelversioner är returkoden från det kommandot 0 I nyare kärnor är det 1.

Detta påverkar Red Hat- och Centos-klienter som flyttar från version 7 till nyare versioner.

 

Causa

Den här beteendeändringen introducerades i Linux mainline kernel v4.13-rc2Den här hyperlänken tar dig till en webbplats utanför Dell Technologies. under en omarbetning av NFS-drivrutinskoden. Tydligen fanns dock kontrollen från huvudkärnan v3.7-rc1Den här hyperlänken tar dig till en webbplats utanför Dell Technologies., och anropades inte korrekt.

Efter omfattande granskning anser vi att både den nya Linuxkärnans beteende och vårt beteende är korrekta. Linux test Kommando och access systemanrop baseras båda på POSIX-standarden, som endast konceptualiserar:

  • LÄSA
  • SKRIVA
  • UTFÖRA

Enligt rfc1813#section-3.3.4Den här hyperlänken tar dig till en webbplats utanför Dell Technologies. och rfc7530#section-16.1Den här hyperlänken tar dig till en webbplats utanför Dell Technologies.; NFS tillåter mer detaljerade behörigheter och konceptualiserar därför:

  • LÄSA
  • MODIFIERA
  • BIFOGA
  • TA BORT
  • UTFÖRA

Där DELETE-behörigheten definieras som om en klient kan Delete an existing directory entry. Detta mappar direkt till delete_child i OneFS, och bör nekas under omständigheter där klienten inte har den behörigheten. Lägg också märke till; POSIX- och NFS-behörigheter matchar inte exakt. POSIX WRITE innehåller alla begrepp i de separata behörigheterna NFS MODIFY, ADD och DELETE. Så när ett POSIX-verktyg försöker kontrollera "WRITE"-behörigheter, översätter Linux-kärnan denna begäran om "WRITE" till "MODIFY and APPEND and DELETE"

Slutligen är det nyare beteendet mer i linje med andra Linux-filsystemdrivrutiner som också stöder den här behörighetsuppsättningen. Om du till exempel testar mot en SMB-filer med samma behörighetsuppsättning returneras även ett fel när du kontrollerar POSIX WRITE med test kommandot med hjälp av -w flagga.
 

# 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

Både OneFS- och Linux-beteenden under dessa omständigheter är korrekta, eftersom sådana arbetsflöden som påverkas av det här problemet måste tillhandahålla delete_child Behörighet till berörda användare och grupper. Om en katalog till exempel ger fullständig åtkomst till dess ägare, användare och grupp, men tar bort delete_child från behörigheten Alla kan de antingen lägga till den behörigheten till Alla, eller så kan de lägga till ytterligare en Access Control Entry (ACE) för den användare eller grupp som ser problem i åtkomstkontrollistan (ACL) för direkten.

# 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

Det är också möjligt att uppdatera Linux-kärnan för att återställa beteendet. Detta kräver att Linux-kärnan byggs från källan efter uppdatering fs/nfs/dir.c för att ta bort NFS4_ACCESS_DELETE krav från NFS_MAY_WRITE makro.

Före:

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

Efter:

#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.