NFSv4 fsid 옵션 및 루트 내보내기의 목적

NFSv4 fsid 옵션 및 루트 내보내기의 목적

내 파일 서버에는 /exports 아래에 정보를 공유하는 하나의 큰 파티션이 있습니다. 따라서 이전 스타일 NFSv3 내보내기를 사용하여 다음을 수행했습니다.

/exports/home     192.168.1.0/24(rw,sync,no_subtree_check)
/exports/root     192.168.1.0/24(rw,sync,no_subtree_check,no_root_squash)

그래서 NFSv4 스타일로 전환하기로 결정하고 다음과 같이 변경했습니다.

/exports          192.168.1.0/24(ro,fsid=0,no_subtree_check)
/exports/home     192.168.1.0/24(rw,sync,no_subtree_check)
/exports/root     192.168.1.0/24(rw,sync,no_subtree_check,no_root_squash)
#/etc              192.168.1.0/24(ro,no_subtree_check) # Test entry to check export root is working.

그런 다음 마운트 명령을 제외하도록 변경했습니다 /exports. 물론 /etc마운트 해제가 가능했습니다(오류는 아니었지만 중단될 때까지 잠겼습니다). 그러나 예상한 대로 /exports의 ACL은 여전히 ​​아래쪽으로 상속되었으며 모든 공유는 읽기 전용이었고 루트는 모든 곳에서 압축되었습니다.

또한 ACL을 /exports/root단일 시스템으로 변경하려고 시도했지만 아무런 차이가 없었습니다.

따라서 식별자를 확인할 수 없는 파일 시스템에 대해 고유 식별자를 제공할 수 있는 것 외에 다음을 사용하여 내보내기 루트를 정의하는 요점은 무엇입니까 fsid=0?

  • 그렇게 하면 공유 설정 방법 측면에서 유연성이 감소합니다(즉, 다른 파일 시스템에서 nocrossmount?를 사용하지 않는 한 상속 문제).
  • 이전 스타일 NFSv3 설정을 가정하면 여전히 마운트할 수 없습니다. /etc그러면 어떤 추가 보안이 제공됩니까?

마운트되어 다른 ACL로 내보내지는 별도의 파일 시스템에 대한 마운트 영역인 fsid=0경우에만 의미가 있습니까 ?/exports

NFS 서버 설정이 뒤바뀐 것 같습니다. 과거 솔라리스에서는 모든 공유 항목을 직접 마운트 /export하고 공유했습니다. 서버는 /home/user바인드를 에 마운트 했을 것입니다 /export/home/user. 그러나 지금은 /home실제 파일 시스템 마운트 위치이며 /exports.

이 올바른지?

참고하세요: 위의 예는 설명을 위한 것일 뿐이므로 사용하지 않는 것이 지혜롭다는 의견은 삼가해 주시기 바랍니다 no_squash_root.

많은 감사를 드립니다.

답변1

이는 NFS "마운트" 프로토콜 작동 방식의 아키텍처 변경입니다.

NFSv2/v3에는 클라이언트가 경로를 통해 내보낸 파일 시스템의 파일 핸들을 가져올 수 있도록 하는 완전히 별도의 'MOUNT' RPC 프로토콜이 있었습니다. 그러나 후속 WebNFS(및 이후 NFSv4)에서는 마운팅이 대역 내 NFS 작업으로 변경되었으며 동시에 모든 경로 조회가 내려오는 단일 "루트" 파일 핸들을 반환하도록 작업이 변경되었습니다. (실제로 WebNFS에는 이러한 루트가 두 개 있었고, 다른 하나는 nfs:// URL에 대한 "공개" 루트로 NFSv4에는 적용되지 않았습니다.)

따라서 'PUTROOTFH' 작업이 작동하려면 다음이 필요합니다.BE더 이상 단계를 건너뛸 수 없기 때문에 일종의 루트 파일 시스템입니다. 모든 경로 탐색은 일련의 [PUTROOTFH, LOOKUP, LOOKUP, ..., LOOKUP, OPEN] 복합 작업입니다. 이는 Plan9의 9p와 SMBv2/3을 미러링합니다.

(이 모든 것은 이 스타일에서 내보낸 파일 시스템 경로가 루트에 상대적이라는 것을 의미합니다. 예를 들어 /exports/home은 "foo:/home"으로 마운트됩니다.~ 아니다"foo:/exports/home"으로.)

MOUNT(path) 작업이 없기 때문에 "crossmnt"가 암시됩니다.그렇지 않다더 이상 마운트할 것이 남아 있으면 모두 루트에서 'LOOKUP' 아래로 내려가면 됩니다.

실제로 NFSv4는 두 스타일 중 하나를 사용할 수 있습니다. "fsid=0" 내보내기가 정의되지 않은 경우 Linux 커널(2.6.33 이상)자동으로 가상 /루트를 생성합니다일반 내보내기 위치에 대한 마운트 외에는 아무것도 포함되어 있지 않습니다. (이는 NFSv3과 NFSv4 간에 동일한 마운트 경로를 유지한다는 장점도 있습니다.) 즉, 원래 v3 스타일 구성을 계속 사용할 수 있습니다.

관련 정보