예를 들어 환경("chrootenv")이 상위 환경("parentenv")과 다른 포트에서 수신하도록 할 수도 있지만 sshd
환경에 추가 IP 및 호스트 이름이 있고 수신 대기하도록 하는 것이 chroot
더 편리할 것입니다.sshd
저것IP 포트 22. 그래서 기본적으로 chroot
네트워크에서 별도의 호스트처럼 작동하도록 환경을 설정하고 싶습니다 . 이것이 어떻게 달성될 수 있습니까? 아니면 이게 뭐야?LXC아니면 사용자 모드 Linux(저의 경험 부족)가 더 적합합니까?
답변1
일반적으로 chroot는 사용자에게 자신의 IF를 부여하는 대신 "권한을 제한"하는 것입니다.
하지만 어쨌든, 어떤 작업을 하고 싶다면 새로운 네트워크 네임스페이스에서 chroot 환경을 시작할 수 있습니다. 소개 찾기여기. 그런 다음 위 가이드에서 새 네트워크 네임스페이스에 배치하는 마지막 명령은 다음과 같습니다.
ip netns exec NAME_OF_THE_NET_NS /bin/bash
일반적인 명령 세트를 따를 수 있습니다.
sudo mount -o bind /proc /pathtochroot/proc
sudo mount -o bind /dev /pathtochroot/dev
sudo mount -o bind /dev/pts /pathtochroot/dev/pts
sudo mount -o bind /sys /pathtochroot/sys
sudo chroot /pathtochroot /bin/bash
이제 IF를 사용하는 chroot가 생겼습니다.
그러나 제기되는 질문은 다음과 같습니다. Linux 컨테이너(LXC, OpenVZ, VServer)를 사용하는 것이 더 빠르고 간단할 것이라고 생각하지 않습니까? 인터페이스가 있는 chroot는 Linux 컨테이너와 동일하지 않습니까? 일반적으로 이는 보안이 문제가 되지 않을 때 수행하는 작업입니다.
편집하다:
좋아요, 당신의 딜레마를 알겠습니다. 그래도 가능성은 있습니다. 동일한 카드에 두 개의 가상 인터페이스를 생성하고 둘 다 DHCP에서 IP 주소를 가져오는지 확인하십시오. 이제 그중 하나에 바인딩하도록 ssh를 구성하십시오. SSH 클라이언트와 SSH 서버 모두에 대해 이 작업을 수행할 수 있습니다. 클라이언트의 경우 지침은 다음과 같습니다.
ssh -b ip.address.tobin.to
그리고 서버의 경우 지시문을 사용해야 합니다.
ListenAddress ip.address.tobind.to
/etc/ssh/sshd_config 파일에 있습니다. 이렇게 하면 호스트가 하나의 인터페이스만 사용하도록 강제할 수 있습니다. 그런 다음 chroot 감옥에 들어가서 사용하십시오.다른상호 작용. 나는 busybox의 기능에 대해 잘 모르기 때문에 이것이 작동할 것이라고 확실히 말할 수는 없습니다. 그러나 이것이 일반 컴퓨터의 chroot 감옥이라면 작동할 것입니다.
답변2
이 도구다음을 수행하는 것이 편리할 수 있습니다.
chname은 새 시스템 호스트 이름을 사용하여 명령 또는 대화형 쉘을 실행합니다.
요약
chname 호스트 이름 [명령어...] 설명
새 시스템 호스트 이름을 사용하여 새 utsname 네임스페이스를 생성하고 명령을 실행합니다. 이는 시스템의 나머지 부분과 독립적인 호스트 이름으로 chroot를 생성하는 데 특히 유용합니다.
이 기능을 사용하려면 Linux 2.6.19 이상 및 CONFIG_UTS_NS=y가 필요합니다.
기적적으로 작동합니다. @MariusMatutiae가 제안한 답변의 레시피에 비해 장점은 설정 namespace
(veth 추가 등)이 필요하지 않다는 것입니다. 단점 - chrooted
환경에 개별 IP 주소 할당을 허용하지 않습니다.