사람들이 Docker 내에서 NFS 공유에 액세스할 수 있기를 바랍니다. 문제는 Docker 내부에서 루트가 될 수 있고 해당 사용자가 되어 모든 사람의 파일에 대한 쓰기 액세스 권한을 가질 수 있다는 것입니다. 해결책이 있나요?
답변1
가능한 해결책 중 하나는 컨테이너 내부가 아닌 Docker 노드에 NFS 공유를 마운트하는 것입니다. 이렇게 하면 컨테이너는 전체 공유 자체가 아닌 작성 파일에 지정한 공유 내의 볼륨에만 액세스할 수 있습니다. 이것이 제가 회사에서 취하는 접근 방식이며 소규모 배포에 적합한 것 같습니다. 또 다른 이점은 공유가 마운트되는 서버 수가 크게 줄어들기 때문에 stunnel을 통해 보안을 유지하는 것이 더 쉽다는 것입니다.
답변2
사용자가 컨테이너에서 루트 권한을 얻고 다른 사용자의 파일을 볼 수 있는 경우 해당 사용자가 해당 파일을 변경하는 것을 실제로 막을 수는 없습니다.
따라서 이러한 일이 발생하지 않도록 방지해야 합니다. 컨테이너가 쓰기가 허용될 수 있는 "볼" 수 있는 파일을 제한하거나 컨테이너가 루트 권한을 얻지 못하도록 방지해야 합니다.
Jason의 제안은 좋습니다. 컨테이너 "보기"를 공유로 제한하여 쓰기가 허용되어야 하는 파일에만 액세스할 수 있도록 합니다.
그러나 컨테이너가 다음을 수행할 수 있도록 하려는 경우읽다다른 사람의 파일을 사용하려면 루트를 차단해야 합니다.
또는 SELinux, CGroups 및 기타 세부적인 제어 기능에 익숙해지세요.
나는 이것이 당신이 바라던 대답이 아니라고 생각합니다. 누군가 당신에게 이 작업을 수행할 수 있는 방법을 제공한다면 나는 그렇게 할 것입니다.좋다들어보세요.
답변3
당신은 "신뢰할 수 있는 공식 출처로부터" 답변을 원하지만 문제는 그럴 수도 있다는 것입니다.일부솔루션, "최상의" 솔루션은 전체 구성에 따라 달라집니다.그리고원하는 결과를 얻기 위해 기꺼이 견딜 수 있는 복잡성의 수준입니다.
그러므로 당신은 설명해야적어도 개요를 가지고귀하의 현재 설정에 대한 포괄적인 답변을 제공해 드릴 수 있습니다.
지금까지 제가 말할 수 있는 최선의 방법은 일반적인 아이디어로서 첫 번째 단계는 컨테이너가 아닌 Docker 시스템에서 NFS 공유를 마운트한 다음 사용 가능한 일반적인 방법을 통해 해당 공유의 일부를 해당 컨테이너에 배포하는 것입니다. 도커에서. 컨테이너를 호스팅하는 Docker 머신 세트가 있는 경우 이는 간단한 작업이 아닐 수 있습니다.
어떤 경우든 컨테이너의 루트 사용자가 해당 섹션의 파일에 자유롭게 액세스하는 것을 방지하는 것만으로는 충분하지 않으며, 보다 세밀하게 제어하려면 NFS 수준 또는 NFS 수준에서 ACL(액세스 제어 목록)을 구성해야 합니다. 서버의 파일 시스템 수준에서. 이 두 가지 옵션 중 하나를 사용하려면 NFS 서버의 시스템 관리자여야 하며 다음 개념(적어도일부컨테이너별로 각 사용자에게 할당되는 사용자 ID 개념입니다. 모든 사용자 ID가 아닌 경우 최소한 사용자 ID 집합을 지정한 다음 각 사용자 집합에 대해 ACL을 설정합니다.
NFS 수준에서 수행할 수 있는 작업(상당히 많음)을 알아보려면 NFS-acls(NFSv4가 더 좋음)를 찾아보고, 파일 시스템 수준에 대해 알아보려면 POSIX-acls를 찾아보세요. 명령 프롬프트에서 및 명령을 사용하여 setfacl
후자를 쉽게 시험해 볼 수 있습니다. getfacl
이러한 명령을 사용하려면 운영 체제에 맞는 관련 패키지를 설치해야 할 수도 있습니다.
답변4
호스트에 NFS 퓨즈 설치를 살펴보셨나요? 퓨즈를 사용하여 SSH(sshfs)를 통해 설치할 때. 그것은 나로 설치되었으며 루트에는 이 파일에 대한 특별한 권한이 없습니다. (sudo는 효과가 없습니다).