OneFS: NFS'ye yönelik Linux çekirdeği güncelleştirmesi 'erişim' çağrısı hatalarına neden oluyor

摘要: Linux çekirdeğindeki Ağ Dosya Sistemi (NFS) kodunda yapılan bir güncelleştirme, belirli OneFS izin kümeleri için 'WRITE' izinlerini denetleyen 'erişim' çağrılarının davranışını değiştirdi. Bu değişiklik, Linux NFS ve Sunucu İleti Bloğu (SMB) davranışlarını birbiriyle uyumlu hale getirerek, kullandığınız protokolden bağımsız olarak bu denetimin tutarlı olmasını sağlar. ...

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

症状

Bir Linux çekirdeği yükseltmesinden sonra, daha önce başarılı olan erişim denetimleri artık erişen kullanıcının iş akışıyla ilgili bir dizinde "delete_child" izinlerine sahip olmadığı dizinlerde başarısız olur. Bu, Linux kullanılarak doğrulanabilir test komutu ile -w aynı dizine karşı bayrak; Eski çekirdek sürümlerinde, bu komutun dönüş kodu şöyledir 0 oysa daha yeni çekirdeklerde 1.

Bu, sürüm 7'den daha yeni sürümlere geçiş yapan Red Hat ve Centos istemcilerini etkiler.

 

原因

Davranıştaki bu değişiklik, NFS sürücü kodunun yeniden düzenlenmesi sırasında Linux ana hat çekirdeği v4.13-rc2'deBu köprü bağlantı sizi Dell Technologies dışındaki bir web sitesine yönlendirir. kullanıma sunulmuştur. Ancak görünüşe göre kontrol, ana hat çekirdeği v3.7-rc1'denBu köprü bağlantı sizi Dell Technologies dışındaki bir web sitesine yönlendirir. itibaren mevcuttu ve doğru şekilde çağrılmıyordu.

Kapsamlı bir incelemeden sonra, hem yeni Linux çekirdeği davranışının hem de davranışımızın doğru olduğuna inanıyoruz. Linux test komut ve access sistem çağrılarının her ikisi de yalnızca aşağıdakileri kavramsallaştıran POSIX standardına dayanmaktadır:

  • OKUMAK
  • YAZMAK
  • YÜRÜTMEK

rfc1813#bölüm-3.3.4Bu köprü bağlantı sizi Dell Technologies dışındaki bir web sitesine yönlendirir. ve rfc7530#bölüm-16.1'eBu köprü bağlantı sizi Dell Technologies dışındaki bir web sitesine yönlendirir. göre; NFS daha ayrıntılı izinlere izin verir ve bu nedenle şunları kavramsallaştırır:

  • OKUMAK
  • DEĞİŞTİRMEK
  • EKLEME
  • DELETE
  • YÜRÜTMEK

DELETE izni, bir istemcinin şunları yapıp yapamayacağı olarak tanımlanır Delete an existing directory entry. Bu doğrudan şuna eşlenir: delete_child OneFS'de yer alır ve istemcinin bu izne sahip olmadığı durumlarda reddedilmelidir. Ayrıca dikkat edin; POSIX ve NFS izinleri tam olarak eşleşmiyor. POSIX WRITE, ayrı NFS DEĞIŞTIRME, EKLEME ve SİLME izinlerindeki tüm kavramları içerir. Bu nedenle, bir POSIX aracı "YAZMA" izinlerini kontrol etmeye çalıştığında, linux çekirdeği bu "YAZMA" isteğini "DEĞIŞTIR ve EKLE ve SİL" olarak çevirir

Son olarak, yeni davranış, bu izin kümesini destekleyen diğer Linux dosya sistemi sürücüleriyle daha uyumludur. Örneğin, aynı izin kümesine sahip bir SMB dosyalayıcısına karşı test yapmak, POSIX WRITE ile kontrol edilirken de bir hata döndürür. test komutunu kullanarak -w bayrak.
 

# 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

 

解决方案

Bu sorundan etkilenen iş akışlarının sağlaması gerektiğinden bu durumda hem OneFS hem de Linux davranışları doğrudur. delete_child Etkilenen kullanıcılar ve gruplar için izin. Örneğin, bir dizin sahip kullanıcısına ve grubuna tam erişim sağlıyor ancak delete_child herkes izninden, bu izni herkese ekleyebilir veya sorunları gören kullanıcı veya grup için doğrudan Erişim Denetimi Listesine (ACL) ek bir Erişim Denetimi Girişi (ACE) ekleyebilirler.

# 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

Davranışı geri döndürmek için Linux çekirdeğini güncelleştirmek de mümkündür. Bu, güncellemeden sonra Linux çekirdeğinin kaynaktan oluşturulmasını gerektirir fs/nfs/dir.c Kaldırmak için NFS4_ACCESS_DELETE gereksinimi NFS_MAY_WRITE Makro.

Önce:

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

Sonra:

#define NFS_MAY_WRITE (NFS4_ACCESS_MODIFY | \
		NFS4_ACCESS_EXTEND)

 

受影响的产品

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