OneFS: NFS에 대한 Linux 커널 업데이트로 인해 '액세스' 호출 실패가 발생함

Summary: Linux 커널의 NFS(Network File System) 코드 업데이트로 인해 특정 OneFS 사용 권한 집합에 대한 'WRITE' 사용 권한을 확인하는 'access' 호출 동작이 변경되었습니다. 이 변경으로 Linux NFS 및 SMB(Server Message Block) 동작이 서로 일치하므로 사용 중인 프로토콜에 관계없이 이 검사의 일관성이 보장됩니다. ...

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

Linux 커널 업그레이드 후 이전에 성공한 액세스 확인은 액세스하는 사용자에게 워크플로와 관련된 디렉토리에 대한 "delete_child" 권한이 없는 디렉토리에서 실패합니다. 이는 Linux를 사용하여 검증할 수 있습니다. test 명령을 -w 동일한 디렉토리에 대한 플래그; 이전 커널 버전에서 해당 명령의 반환 코드는 다음과 같습니다. 0 반면 최신 커널에서는 1명령을 사용합니다.

이는 Red Hat 및 Centos 클라이언트가 버전 7에서 최신 릴리스로 이동하는 데 영향을 미칩니다.

 

Cause

이러한 동작 변경은 NFS 드라이버 코드를 리팩터링하는 동안 Linux 메인라인 커널 v4.13-rc2이 하이퍼링크는 Dell Technologies 외부의 웹사이트로 연결됩니다. 에 도입되었습니다. 그러나 분명히 검사는 메인라인 커널 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 an existing directory entry명령을 사용합니다. 이는 다음에 직접 매핑됩니다. delete_child 즉, 클라이언트에 해당 권한이 없는 상황에서는 거부되어야 합니다. 또한 알아 차리십시오. POSIX와 NFS 사용 권한이 정확히 일치하지 않습니다. POSIX WRITE에는 별도의 NFS MODIFY, APPEND 및 DELETE 권한의 모든 개념이 포함됩니다. 따라서 POSIX 도구가 "WRITE" 권한을 확인하려고 할 때 Linux 커널은 "WRITE"에 대한 요청을 "MODIFY 및 APPEND 및 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

 

Resolution

이 문제의 영향을 받는 워크플로는 다음을 제공해야 하므로 이 상황에서 OneFS 및 Linux 동작은 모두 올바릅니다. delete_child 영향을 받는 사용자 및 그룹에 대한 사용 권한입니다. 예를 들어 디렉토리가 소유자 사용자 및 그룹에 전체 액세스 권한을 제공하지만 delete_child everyone 권한에서 해당 권한을 모든 사람에게 추가하거나 문제가 발생하는 사용자 또는 그룹에 대한 ACE(Access Control Entry)를 의 ACL(Access Control List)에 직접 추가할 수 있습니다.

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

 

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.