chrooted tar를 만드는 방법은 무엇입니까?

chrooted tar를 만드는 방법은 무엇입니까?

chroot의 모든 것을 캡처하고 싶지만 전체 파일 시스템/보호자 권한 등을 보려면 먼저 chroot에 들어가야 하는지 잘 모르겠습니다. chroot 외부에서 보면 루트의 홈 디렉터리를 놓칠 것 같습니다 /root. VM을 완전히 캡처하는 것처럼 chroot를 완전히 캡처하는 방법은 무엇입니까? :

cd ~/mychroot
# Un-mount any previously mounted filesystems first?
# umount /proc
tar -cpzf /tmp/mychroot.tar.gz --one-file-system --exclude=/tmp --exclude=/proc --exclude=/lost+found --exclude=/sys --exclude=/mnt --exclude=/media --exclude=/dev /    cp ~/mychroot/mychoort.tar.gz /path/to/somewhere/safe

sudo chroot ~/mychroot
# Un-mount any previously mounted filesystems first?
tar -cpzf /tmp/mychroot.tar.gz --one-file-system --exclude=/tmp --exclude=/proc --exclude=/lost+found --exclude=/sys --exclude=/mnt --exclude=/media --exclude=/dev /    # Exit the chroot
exit
cp ~/mychroot/mychroot.tar.gz /path/to/somewhere/safe

답변1

tar 작업을 하기 위해 chroot할 필요는 없습니다. 대신 이 옵션을 사용할 수 있습니다 --numeric-owner. Chroot는 tar 아카이브에 (올바른) 소유자/그룹 이름을 기록하려는 경우에만 필요합니다. 이 경우( /etc/passwd등이 tar의 일부인 경우) 꼭 필요한 것은 아닙니다.

또한 실제로 chroot를 하지 않고 먼저 마운트 등을 할 필요가 없으므로 /dev골치 아픈 일이 사라집니다./proc/sys

옵션 --one-file-system은 가짜 친구입니다. 모든 마운트 지점을 건너뛰기 때문에 불완전한 tar가 생성됩니다. 예를 들어, 일부 시스템에는 /devudev가 마운트되기 전에도 존재하는 정적 장치 노드가 있으며 시스템이 부팅되지 않을 수 있습니다.

--one-file-system따라서 불완전한 결과를 절대적으로 원하지 않는 한 사용하지 마십시오.

또 다른 방법은 예를 들어 루트 파티션에 대해 마운트를 바인딩하는 것입니다.

mkdir /mnt/root
mount --bind / /mnt/root

바인드 마운트는 하위 마운트와 함께 제공되지 않으므로 정적 노드 및 기타 콘텐츠(있는 경우)를 /mnt/root포함하여 루트 파일 시스템에 대한 전체 보기를 제공합니다 . /dev/번거로움 --one-file-system과 수십 가지 --exclude옵션 없이 이 모든 것을 하나의 패키지에 담을 수 있습니다.

답변2

모두 보기 chroot(2)(사용자 명령은 chroot(1)시스템 호출을 둘러싼 얇은 래퍼일 뿐입니다): 영향을 받는 프로세스가 보는 위치를 변경하므로 /대상 디렉터리 외부의 파일을 (쉽게) 이스케이프/액세스할 수 없습니다.

"chroot" 디렉토리는 단순한 표준 디렉토리이므로(아마도 친숙한 시스템 관리자가 특별한 내용으로 설정했을 것입니다), 다른 것과 마찬가지로 조작할 수 있습니다.

관련 정보