FreeBSD 자동 마운터를 작은 조각으로 자르고 기름으로 끓일 것입니다. 감옥에서 자동

홈 디렉토리의 계층 구조를 여러 FreeBSD 감옥에 노출하려고합니다. 홈 디렉토리는 각각 고유 한 ZFS 데이터 세트가되도록 구성됩니다. 교도소는 개발 작업에 사용되므로 정기적으로 만들어지고 파괴됩니다.

내 첫 번째 생각은 단순히 nullfs 를 사용 /home하여 감옥 에 마운트 하는 것이었지만 nullfs 는 하위 파일 시스템에 액세스하는 방법을 제공하지 않습니다.

두 번째 생각은 NFS를 통해 디렉토리를 내 보낸 다음 각 감옥에서 자동 마운터 데몬 (amd)을 실행하는 것입니다. 감옥에서 NFS 마운트를 수행 할 수 있다면 방금 작동했을 것입니다. 그러나 그렇지 않습니다.

세 번째 생각은 호스트에서 amd를 실행하고 nullfs 마운트를 감옥에 제공하는 것이지만 nullfs에 대한 amd 지원은 존재하지 않습니다.

네 번째 생각은 NFS를 사용하여 디렉토리를 내보내는 것으로 돌아가는 것이 었습니다. 물론 amd는 NFS와 함께 작동하기 때문입니다. 불행히도, amd는 대상 마운트 지점에 디렉토리를 마운트하는 대신 임시 위치 ( /.amd_mnt/...)에 항목을 마운트 하고 심볼릭 링크를 만드는 것을 좋아합니다. 물론 감옥 환경에서는 쓸모가 없습니다.

그렇다면 nullfs 를 사용 하여 하위 디렉토리를 /.amd_mnt감옥 에 노출시킬 수 있습니까? 아니! 이를 통해 우리는 첫 번째 시도로 돌아 가게되는데 여기서 nullfs를 사용하여 하위 파일 시스템에 액세스 할 수있는 방법이 없다는 것을 알게 되었습니다 .

그리고 내 머리가 폭발했다.

내가하려는 일에 대한 좋은 해결책이 있습니까? 나쁜 솔루션은 여러 만들 것 감옥 부팅 후 스크립트를 실행하는 것입니다 nullfs의 각 홈 디렉토리에 대한 마운트 포인트를하지만,이 꽤 투박 – 그것은 계정에 새로운 디렉토리 나 제거 디렉토리을 주기적으로 실행해야합니다. 따라서 기본적으로 잘못된 자동 마운터를 작성해야합니다.

더 좋은 방법이 있어야합니다. 도와주세요, Serverfault, 당신은 나의 유일한 희망입니다!

업데이트 1 :이 문제의 일부를 해결할 수는 pam_mount있었지만 이것이 불완전 할 수도 있습니다. 또한 pam_mount대상 마운트 지점을 자동으로 만들 수 있는지 여부는 설명서에서 명확하지 않습니다 . 마운트 포인트가 선험적으로 존재 해야하는 경우이 솔루션은 이미 제안한 나쁜 자동 마운트 장치보다 나을 것입니다.

업데이트 2 : 아래 답변에서 설명한 것처럼 VFCF_JAILNFS 파일 시스템의 설정 으로 감옥에서 NFS 마운트를 수행 할 수 있습니다. 불행히도, 자동 마운터는 도움이되지 않는 방식으로 계속 작동하며, 감옥에서 실행될 때 프로세스 항목을 제거하기 위해 시스템을 재부팅해야하는 방식으로 쐐기가 잘 잡히는 것처럼 보입니다.



답변

왜 안녕, 라스! 그것은 당신이 요구 한 매혹적인 질문이며, 조사한 후에 당신에게 답을 찾았을 것입니다.

이것
과 다른 게시물 에 따르면
VFCF_JAIL
NFS 파일 시스템 공급자 에서 속성 을 설정하는 것이 가능할 수 있습니다 . 이론 상으로는 감옥에서 NFS 마운트를 수행 할 수 있습니다. 이것은 차례로 감옥에서 amd를 실행할 수있게합니다 …이 문제를 깔끔하게 해결할 수 있습니다.

오늘 저녁 커널을 재 구축하여 어떻게 작동하는지 살펴 보겠습니다. 반드시 가장 큰 솔루션은 아니지만 (이 변경 사항이 향후 커널 업데이트에서 계속 유지되도록해야하기 때문에) 그것이 작동하면 흥미로울 것입니다.

그리고 기억해 …

           ___________    ____
    ______/   \__//   \__/____\
  _/   \_/  :           //____\\
 /|      :  :  ..      /        \
| |     ::     ::      \        /
| |     :|     ||     \ \______/     Don't try to rebuild the
| |     ||     ||      |\  /  |        kernel remotely because
 \|     ||     ||      |   / | \         you know you're just
  |     ||     ||      |  / /_\ \        going to hose the server.
  | ___ || ___ ||      | /  /    \
   \_-_/  \_-_/ | ____ |/__/      \
                _\_--_/    \      /
               /____             /
              /     \           /
              \______\_________/


답변