LAN에서 Linux NFS 파일 서버(srv)와 세 개의 Linux 클라이언트(A, B, C) 시나리오를 상상해 보십시오. srv의 파일/디렉토리에는 루트 소유권이 있으며 루트가 아닌 사용자에게는 액세스 권한이 부여되지 않습니다. 이 질문과 관련된 파일입니다. 나는 이것을 "루트 제한 파일"이라고 부릅니다.
ㅏ로컬 시스템 관리자가 되어야 합니다. 그 또는 그녀는 srv의 루트 제한 파일에 대한 무료 액세스가 필요합니다.
두번째자신의 컴퓨터에 sudo 권한이 있는 로컬 개발자입니다. 그러나 B는 해야 한다.아니요서버에서 루트 제한 파일/디렉터리를 읽거나 쓰거나 탐색하는 기능. 실제로 B에게 sudo 권한이 있더라도 B는 자신이 속한 그룹에 속하지 않은 srv의 파일에 액세스할 수 없어야 합니다.
씨sudo 권한이 없는 로컬 사용자입니다. C는 srv의 일반 파일에 액세스할 수 있어야 하지만 로컬 또는 서버 루트에 의해 제한된 파일에는 액세스할 수 없습니다.
반면:
srv는 192.168.1.1에 있습니다.
A는 192.168.1.2에 있습니다.
B는 192.168.1.3에 있습니다.
C는 192.168.1.4에 있습니다.
/etc/exports가 목표를 달성합니까?
/srv/nfs 192.168.1.2(rw,no_root_squash)
/srv/nfs 192.168.1.3(rw,root_squash)
/srv/nfs 192.168.1.4(rw,root_squash)
다른 어떤 NFS 옵션이 권장됩니까? 그러나 가장 중요한 것은 IP 주소가 스푸핑될 수 없다고 가정할 경우 root_squash가 이 솔루션을 구현할 수 있습니까?
다음으로, 자신의 컴퓨터에 sudo 권한이 있는 개발자가 no_root_squah 없이 IP 주소를 192.168.1.2처럼 스푸핑할 수 있다고 가정해 보겠습니다. 어떤 솔루션이 필요합니까? LDAP + Kerberos? 다른 건 없나요?
NFS로 우리의 목표를 달성할 수 있습니까? SSHFS 또는 Samba 4와 같은 솔루션이 더 나은 솔루션입니까?
("루트 제한 파일"이 가장 적합한 용어가 아닌 경우 편집 제안을 환영합니다.)
답변1
NFS는 클라이언트가 제공한 UID/GID만 사용합니다. squash_root
옵션 사용exports
공유의 경우 루트 사용자를 익명 사용자( nobody/nogroup
)에 매핑합니다. 이는 악의적이거나 손상된 클라이언트가 다른 파일에 대한 액세스를 허용할 수 있는 다른 UID/GID를 제공하는 것을 방지하지 못합니다.
NFS 서버를 스푸핑 사용자로부터 보호하려면 Kerberos를 사용하여 NFS 사용자를 인증해야 합니다. Kerberos를 사용하는 NFS는 선택적 데이터 무결성 및 암호화도 제공합니다. 관련 내용을 빠르게 이해하려면 다음 빠른 방법을 참조하세요.우분투 위키.
답변2
NFS는 UID 및 GID를 통해 권한을 설정하므로 서버와 클라이언트의 권한이 동일하다면 괜찮습니다. root_squash
B는 원하지 않고 sudo 권한도 없는 파일이나 디렉터리를 읽거나 쓰는 것을 방지하지만 C에는 sudo 권한이 없습니다.
IP 스푸핑이 걱정된다면 다른 도구와 방법을 사용할 수 있습니다. 당신은 그것들을 모두 찾아보고 조사를 통해 어느 것이 가장 좋은지 결정할 수 있습니다.
답변3
NFS를 사용하여 공유 문서를 보호하는 가장 좋은 방법은 모든 사람에게 동일한 공유 루트를 제공하지 않는 것입니다. 이 예에서는 다음과 유사한 로컬 디렉터리 구조를 만듭니다.
/srv/nfs admin-machine(rw,no_root_squash)
/srv/nfs/developer dev-machine(rw,no_root_squash)
/srv/nfs/shared 192.168.1.0/24(rw,root_squash)
/srv/nfs/protected acct-machine(rw,root_squash)
NFS 클라이언트의 무단 액세스로부터 폴더를 보호할 때의 문제점은 루트 액세스 권한이 있는 사람은 누구나 사용자를 생성할 수 있다는 것입니다.방금 일어난 일이야
답변4
목표가 "로컬 sudo 권한이 있는 사용자가 NFS 파일 서버에서 sudo 권한을 갖는 것을 방지"하는 것이라면 루트 스쿼시를 비활성화할 수 없습니다.
절대적으로하지.
이것/etc/exports
/srv/nfs 192.168.1.2(rw,no_root_squash)
/srv/nfs 192.168.1.3(rw,root_squash)
/srv/nfs 192.168.1.4(rw,root_squash)
/srv/nfs
192.168.1.2에 대한 루트 액세스 권한이 있는 사람은 누구나 NFS 서버 자체에 액세스하는 데 사용할 수 있는 SUID 실행 파일을 생성할 수 있으며 , 192.168.1.3 및 192.168.1.4에 대한 루트가 아닌 모든 사용자는root
이는 NFS 서버에 있으며 이는 명시된 목표와 직접적으로 모순됩니다.192.168.1.3 및 192.168.1.4의 모든 사용자가 sudo
액세스할 수 있나요? 그렇다면 sudo
192.168.1.2에 대한 액세스 권한이 있는 사람은 누구나 해당 서버에 대한 액세스 권한을 활용하고 거의 전체 네트워크에 대한 루트 액세스 권한을 얻을 수 있습니다.
루트 호박은 무엇이든 비활성화합니다.위험한전체 네트워크의 보안을 위해.
이는 @ErikF가 답변에서 언급한 IP 주소 스푸핑 문제도 해결하지 않습니다.
적어도 당신은 와 함께 있지 않습니다 anon=0
. 예, 본 적이 있습니다.