OneFS: L'aggiornamento del kernel Linux a NFS causa errori di chiamata di "accesso"

Summary: Un aggiornamento al codice NFS (Network File System) nel kernel Linux ha modificato il comportamento delle chiamate di accesso che controllano le autorizzazioni "WRITE" attive per set di autorizzazioni OneFS specifici. Questa modifica allinea i comportamenti NFS e SMB (Server Message Block) di Linux l'uno con l'altro, rendendo questo controllo coerente indipendentemente dal protocollo in uso. ...

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

Dopo un aggiornamento del kernel Linux, i controlli di accesso che avevano avuto esito positivo ora hanno esito negativo nelle directory in cui l'utente che accede non dispone delle autorizzazioni "delete_child" per una directory coinvolta nel flusso di lavoro. Questa operazione può essere convalidata utilizzando Linux test comando con il comando -w flag sulla stessa directory; Nelle vecchie versioni del kernel, il codice restituito da quel comando è 0 mentre nei kernel più recenti è 1.

Ciò influisce sui client Red Hat e Centos che passano dalla versione 7 alle versioni più recenti.

 

Cause

Questa modifica del comportamento è stata introdotta nel kernel principale Linux v4.13-rc2Questo link ipertestuale indirizza a un sito web esterno a Dell Technologies. durante un refactoring del codice del driver NFS. Tuttavia, a quanto pare il controllo era presente a partire dal kernel principale v3.7-rc1Questo link ipertestuale indirizza a un sito web esterno a Dell Technologies., e non veniva chiamato correttamente.

Dopo un'ampia revisione, riteniamo che sia il nuovo comportamento del kernel Linux che il nostro comportamento siano corretti. Il linux test comando e access le chiamate di sistema sono entrambe basate sullo standard POSIX, che concettualizza solo:

  • LEGGERE
  • SCRIVERE
  • ESEGUIRE

Considerando che per rfc1813#section-3.3.4Questo link ipertestuale indirizza a un sito web esterno a Dell Technologies. e rfc7530#section-16.1Questo link ipertestuale indirizza a un sito web esterno a Dell Technologies.; NFS consente autorizzazioni più granulari e pertanto concettualizza:

  • LEGGERE
  • MODIFICARE
  • AGGIUNGERE
  • CANC
  • ESEGUIRE

Con l'autorizzazione DELETE definita come se un client potesse Delete an existing directory entry. Viene eseguito direttamente il mapping a delete_child in OneFS e deve essere negata nei casi in cui il client non disponga di tale autorizzazione. Si noti anche; Le autorizzazioni POSIX e NFS non corrispondono esattamente. POSIX WRITE include tutti i concetti nelle autorizzazioni NFS MODIFY, APPEND e DELETE separate. Quindi, quando uno strumento POSIX tenta di controllare i permessi "WRITE", il kernel Linux sta traducendo quella richiesta di "WRITE" in "MODIFY and APPEND and DELETE"

Infine, il comportamento più recente è più in linea con altri driver del file system Linux che supportano anch'essi questo set di autorizzazioni. Ad esempio, il test su un filer SMB con lo stesso set di autorizzazioni restituisce anche un errore durante il controllo di POSIX WRITE con il test utilizzando il comando -w bandiera.
 

# 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

Entrambi i comportamenti OneFS e Linux in questa circostanza sono corretti, in quanto tali flussi di lavoro interessati da questo problema devono fornire delete_child Autorizzazione agli utenti e ai gruppi interessati. Ad esempio, se una directory fornisce l'accesso completo all'utente proprietario e al gruppo, ma rimuove delete_child Dall'autorizzazione Everyone, è possibile aggiungere tale autorizzazione a tutti oppure è possibile aggiungere un'ulteriore voce di controllo degli accessi (ACE) per l'utente o il gruppo che riscontra problemi all'elenco di controllo degli accessi (ACL) di direttamente.

# 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

È anche possibile aggiornare il kernel Linux per invertire il comportamento. Ciò richiede la compilazione del kernel Linux dai sorgenti dopo l'aggiornamento fs/nfs/dir.c per rimuovere il NFS4_ACCESS_DELETE requisito derivante dal NFS_MAY_WRITE macro.

Prima:

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

Dopo:

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