아래 링크된 기사에서는 "chroot" /tmp 디렉토리를 생성하는 방법을 설명합니다. 나는 그들이 무엇을 하고 있는지 조금 혼란스러워요. 다음 명령의 기능을 설명할 수 있는 사람이 있습니까?
1. # mkdir -p /root/chroot /root/tmp
2. # mount --bind / /root/chroot
3. # mount --bind /root/tmp /root/chroot/tmp
4. # chroot /root/chroot
첫 번째 단계, 왜 만들었을까?/루트/tmp설마/루트/chroot/tmp?
첫 번째 설치 명령이 두 번째 설치 명령에 영향을 줍니까? 두 번째 단계에서는 새 디렉터리를 바인딩합니다./루트/chroot루트 디렉토리로. 이것은 세 번째 단계에서/루트/tmp실제로 다음을 가리킨다/루트/chroot/루트/tmp? 어디/루트/chroot/tmp에서? 이것이 나를 혼란스럽게 하는 부분이다.
이것의 논리는 무엇입니까?
답변1
mkdir -p /root/chroot /root/tmp
chroot 환경을 위한 디렉터리를 만듭니다. /root/chroot
chroot 환경의 루트 디렉터리가 됩니다. chroot 환경 /root/tmp
역할을 할 디렉터리입니다./tmp
mount --bind / /root/chroot
/
그러면 디렉터리가 를 통해 표시 됩니다 /root/chroot
. 디렉터리를 /
미러 디렉터리 처럼 취급합니다 /root/chroot
(실제로는 미러가 아니지만 해당 디렉터리에 대한 포인터입니다 /
).
mount --bind /root/tmp /root/chroot/tmp
이렇게 하면 chroot 환경의 디렉토리를 통해 사용자 정의 /root/tmp
디렉토리 에 액세스할 수 있습니다. /tmp
이렇게 하면 chroot 환경의 디렉터리 가 시스템 /tmp
의 /tmp
./tmp
/tmp
chroot /root/chroot
여기에서 chroot 환경을 입력합니다.
이제 귀하의 질문:
첫 번째 설치 명령이 두 번째 설치 명령에 영향을 줍니까?
예. 디렉토리
/root/chroot
를 바인드하기 전에 chroot 환경의 루트 디렉토리( )를 바인드 마운트해야 합니다/tmp
. 에 바인딩될 때까지는 존재하지 않습니다/root/chroot/tmp
./
/root/chroot
두 번째 단계에서는 새 디렉터리를
/root/chroot
루트 디렉터리에 바인딩합니다. 이것은 3단계가/root/tmp
실제로 그것을 가리킨다는 것을 의미합니까/root/chroot/root/tmp
?예. 의 모든 콘텐츠는
/
를 통해 액세스할 수 있습니다/root/chroot
.그거 어디서 났어
/root/chroot/tmp
?/root/chroot/tmp
2단계에서 바인딩한/
후에는 존재하게 됩니다 ./root/chroot
답변2
2단계 에서는 /
./root/chroot
2.5단계를 생성하면 시스템 디렉터리를 포함하여 ls /root/chroot
나열된 모든 디렉터리를 찾을 수 있습니다 ./
/tmp
출력에서도 touch /root/chroot/test
이 내용을 볼 수 있습니다 . 아시다시피 그것은 또한 에서 나온 것입니다 . 과 은 정확히 같은 장소입니다.test
ls /
rm /test
/root/chroot/
/
/root/chroot/
더 자세히 보려면 실행 stat /
하면 stat /root/chroot
둘 다 동일한 것을 반환하는 것을 볼 수 있습니다 Inode
. An은 Inode
디스크의 특정 파일/디렉토리를 참조하는 데이터 구조입니다. 둘 다 동일한 콘텐츠를 반환하므로 Inode
두 경로 모두 정확히 동일한 디렉터리를 가리킵니다.
따라서 3단계에서는 바인드 마운트된 시스템 디렉토리에 디렉토리를 마운트합니다 /root/tmp
./tmp
/root/chroot
chroot
4단계를 수행 하면 /
시스템 전체 디렉터리 대신 in 디렉터리를 사용하여 /tmp
chroot 상태로 들어갑니다. 이런 방식으로 chroot는 시스템의 다른 모든 사용자와 공유되지 않습니다./root
/tmp
/tmp