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


40

홈 디렉토리의 계층 구조를 여러 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 마운트를 수행 할 수 있습니다. 불행히도, 자동 마운터는 도움이되지 않는 방식으로 계속 작동하며, 감옥에서 실행될 때 프로세스 항목을 제거하기 위해 시스템을 재부팅해야하는 방식으로 쐐기가 잘 잡히는 것처럼 보입니다.


1
그리고 이러한 기능을 FreeBSD로 포팅하려는 경우에는 정말 좋습니다. 심각하게도 표준 Linux 자동 마운터의 동작은 심볼 링크를 사용하지 않고 실제로 대상 마운트 지점에 파일 시스템을 마운트하기 때문에 완벽합니다.
larsks

4
나는 시간이 부족하다고 비난합니다. 그리고 아마도 약간의 동기 부여가있을 것입니다 ...>.>
Ignacio Vazquez-Abrams

15
멋진 타이틀을 위해 +1. :)
Shauna 2016 년

4
그것은 당신의 특정한 실행 방법이 얼마나 구체적인지에 관한 것입니다
Mark Henderson

2
오, @ 윌셔, 당신은 재미 없어요.
larsks

답변:


26

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

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

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

그리고 기억해 ...

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

6
고마워, Lars; 나는 당신의 조언을 받아 들였으면 좋겠다. 왜냐하면 지금은 서버에 접근 할 수 없기 때문에 이것을 시도하기 위해 집에 돌아올 때까지 기다려야 할 것이다.
larsks

10
LOL의 경우 +1 또한 한밤중에 KERNEL.OLD (또는 KERNEL.GENERIC)를 부팅하기 위해 서버로 나가는 것이 좋습니다. 그렇지 않은 경우 시스템에 최신 GENERIC을 유지합니까 시작해야합니다.) 많은 교훈을 가르치고 있습니다.
voretaq7 2016 년

mfsbsd 의 net-bootable 사본 도 편리하게 유지하여 여러 부트 로더 관련 문제로부터 나를 구했습니다.
larsks

1
VFCF_JAILNFS 마운트를 설정하면 작동하지만 자동 마운터는 계속 나에게 악의적입니다.
larsks

1
Eh, 다양한 환경에서 10 년 이상 홈 디렉토리에 자동 마운트를 사용하고 있으며 그 결과에 만족했습니다. 이것은 amd가 아니라 Linux (및 Solaris) 자동 마운터입니다.
larsks
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.