chroot를 사용하여 테스트 시스템에 들어갔습니다.
mount /dev/vg0/vm01.buster-test-disk /media/vm01.buster-test-disk/
mount -t proc none /media/vm01.buster-test-disk/proc
mount --bind /dev /media/vm01.buster-test-disk/dev
mount -t sysfs sysfs /media/vm01.buster-test-disk/sys
chroot /media/vm01.buster-test-disk/ /bin/bash
호스트 이름을 수정하고 종료합니다.
hostname buster-test
echo buster-test > /etc/hostname
echo "127.0.0.1 buster-test" >> /etc/hosts
exit
제거
umount /media/vm01.buster-test-disk/proc
umount /media/vm01.buster-test-disk/dev
umount /media/vm01.buster-test-disk/sys
umount -l /media/vm01.buster-test-disk
질문
buster-test
이제 다른 쉘에 로그인하더라도 호스트의 호스트 이름은 으로 설정됩니다.
호스트 이름이 변경된 이유는 무엇입니까? chroot 내부에서 작업이 수행될 때 chroot 외부에서 변경될 수 있는 다른 사항이 있습니까?
답변1
실행하면 hostname buster-test
실행 중인 커널의 호스트 이름이 변경됩니다(Linux에서는 현재UTS 네임스페이스). chroot
이를 전혀 제어할 수 없으므로 호스트 이름 변경 사항은 외부에서도 볼 수 있습니다.
이를 사용하면 chroot
파일 시스템의 일부에만 액세스가 제한됩니다. 파일 시스템에서 관리되지 않는 항목에는 영향을 미치지 않습니다 chroot
. 여기에는 네트워크 설정, 날짜 및 시간, 사용자 권한 등이 포함됩니다. 이러한 변경을 제한하려면 다음을 사용해야 합니다.네임스페이스(또는 Linux가 아닌 시스템의 유사한 기술) Linux에서는 다음을 실행하여 프로세스를 격리할 수 있습니다.unshare
.
답변2
호스트 이름은 시스템 호출 nodename
의 일부 uname(2)
이며 관련 데이터는 커널에 있습니다.
자체 커널 데이터 구조를 가진 영역과 같은 것을 처리할 수 있는 커널이 없으면 간단한 접근 방식은 chroot
도움이 되지 않습니다.
답변3
systemd-nspawn
chroot
컨테이너화된 chroot를 얻는 대신 사용할 수 있습니다 . 컨테이너는 컨테이너에 비해 호스트와 게스트 시스템 간의 더 나은 격리를 제공합니다 chroot
.
systemd-nspawn
경량 네임스페이스 컨테이너에서 명령이나 운영 체제를 실행하는 데 사용할 수 있습니다. 여러 면에서 와 유사chroot(1)
하지만 파일 시스템 계층, 프로세스 트리, 다양한 IPC 하위 시스템, 호스트 및 도메인 이름을 완전히 가상화한다는 점에서 더욱 강력합니다.