여러 사용자가 사용하고 제어할 수 없는 NFS 서버에서 호스팅되는 NFS 디렉터리가 있습니다.
내 클라이언트 시스템에서 NFS 디렉터리의 내용을 백업하고 싶습니다. 나의 첫 번째 시도는 클라이언트 컴퓨터에 루트로 로그인하여 모든 파일을 압축해 보는 것이었습니다. 그러나 NFS 서버가 루트를 익명 사용자(서버의 root_squash 옵션)에 매핑하여 일부 파일을 읽을 수 없기 때문에 권한 오류로 인해 실패합니다.
그렇다면 해당 NFS 디렉터리의 모든 파일을 어떻게 백업합니까? 즉, 이 공유 NFS 디렉터리에 있는 모든 파일을 어떻게 읽을 수 있습니까? 나는 NFS 서버를 제어할 수 없으며 no_root_squash를 사용하도록 구성할 수도 없습니다.
이제 이 보안 제한을 우회할 수 있다는 것을 알고 있습니다. 내 클라이언트 컴퓨터에서 올바른 uid를 가진 새 사용자를 생성하려면 해당 사용자에게 su를 보낸 다음 이 파일을 읽을 수 있습니다. 클라이언트 시스템에 대한 루트 권한이 있으므로 이 작업을 쉽게 수행할 수 있습니다. NFS 서버는 내 클라이언트 시스템을 신뢰합니다. 내 클라이언트 시스템에 여러 개의 가짜 사용자 ID를 생성하고 그 사이를 왔다 갔다 해야 하기 때문에 이는 짜증나고 번거로운 작업이 될 것입니다. 그러나 이는 원칙적으로 루트가 NFS 디렉토리에 있는 모든 파일을 읽을 수 있다는 것을 증명합니다.
내 질문은: 클라이언트 컴퓨터에 대한 루트 액세스 권한이 있지만 NFS 서버나 해당 구성을 제어할 수 없기 때문에 이 NFS 디렉터리의 모든 항목을 백업할 수 있도록 정리하는 더 깔끔하고 쉬운 방법이 있습니까? 통제할 수 있어?
제한사항: 다른 NFS 서버로 전환할 수 없습니다. 나는 현재 NFS 서버 구성을 제어하지 않습니다. 모든 사용자의 구성 변경이나 다른 모든 사용자의 추가 노력이 필요한 솔루션은 실용적이지 않습니다. 필요하지 않은 솔루션을 찾고 있습니다.또한내 입장에서는 많은 노력이 필요했습니다(모든 관련 사용자를 찾고, 가짜 uid를 만들고, 각 사용자를 고소하고, 여러 개의 타르볼을 만들고, 어떻게든 타르볼을 병합하기 위해 복잡한 스크립트를 작성해야 하는 것은 고통스러운 것처럼 들립니다) .
답변1
모든 사용자에게 "root" 계정이 읽을 수 있도록 기본 권한을 "others=read(file)" 및 "others=read+execute(directory)"로 설정하도록 요구할 수 있습니다.
NFS 서버 공급자를 허용된 위치로 변경할 수 있습니다 no_root_squash
.
클라이언트 시스템에서 "가짜" 사용자 ID 세트를 생성한 다음 이를 반복하여 find /mnt/NFS -user "$FAKE_USERID" ... | tar --no-recursion --files-from=-
각 계정에 대해 유사한 작업을 실행할 수 있습니다. 이렇게 하면 여러 개의 타르볼이 생성되지만 중복되는 백업을 피할 수 있습니다( find
파일을 소유자별로 분할하여 각 파일이 해당 파일을 소유한 사용자의 타르볼에만 표시되도록 함).