내 NFS 서버에는 다음 내보내기가 정의되어 있습니다.
#NFS exports Database
/shared -alldirs -network=192.168.1 -mask=255.255.255.0
내 NFS 클라이언트에서:
192.168.1.7:/shared /shared nfs rw 0 0
분명히 서버의 루트로서 내가 원하는 것은 무엇이든 할 수 있습니다. 그러나 클라이언트에서는 일반 사용자 "gabe"가 nfs 마운트를 변경할 수 있지만(권한이 있다고 가정) 루트는 변경할 수 없습니다.
내 일반 사용자로서 :
gabe@client$ cd /shared
gabe@client$ ls -l
total 8
drwxrwxrwx 4 gabe wheel 512 Mar 20 19:20 tmp
gabe@client$ cd tmp
gabe@client$ touch test.txt
gabe@client$ rm test.txt
루트 사용자로서:
# cd /shared/tmp
# touch test.txt
touch: test.txt: Permission denied
다시 말하지만, 이 모든 것은 NFS에 있습니다.고객그런 측면에서는 -maproot 옵션과 관련이 있을 수 있다고 생각됩니다. NFS를 처음 설정했는데 이 기능을 발견했습니다. 나는 이것을 알아낼 수 있는지 알아보기 위해 지금 좀 읽어 볼 것입니다. 그러나 누군가 통찰력을 가지고 있다면 감사하겠습니다.
답변1
NFS는 사용자 및 그룹 ID가 네트워크의 모든 컴퓨터에서 동일하다는 아이디어로 설계되었습니다. 일반 사용자에게는 괜찮습니다. 그러나 루트의 UID는 항상 0이며, 한 컴퓨터에 루트 액세스 권한이 있다고 해서 네트워크의 모든 컴퓨터에 루트 액세스 권한이 있어야 한다는 의미는 아닙니다.
따라서 NFS에는 루트에 대한 특별한 처리가 있습니다. 기본적으로 루트는 nobody
일반적으로 쓰기 권한이 없는 사용자에게 매핑됩니다. 이 -maproot
옵션을 사용하면 루트 처리 방법을 변경할 수 있습니다. BSD 옵션은 -maproot=root
Linux no_root_squash
옵션에 해당합니다.
답변2
이는 기존 NFS 구현의 일반적인 동작입니다. NFS 사용자 매핑은 컨텍스트 없이 수행되므로 클라이언트 루트의 모든 액세스는 특정 사용자에게 매핑되어야 합니다(일반적 nobody
으로 기본적으로). 따라서 클라이언트 루트가 파일에 직접 액세스할 수 없지만 su gabe
액세스할 수 있는 이상한 동작이 발생합니다.
(NFSv4 또는 NFSv3일 수도 있는 NFS의 "최신" 버전은 양쪽에서 지원하는 경우 더 합리적인 동작을 허용하지만 자세한 내용은 모르겠습니다.)