chroot Jail을 사용하여 uname -n의 결과 변경

chroot Jail을 사용하여 uname -n의 결과 변경

방금 chroot 감옥이 무엇인지 배웠으므로 이 질문이 별로 이해가 되지 않는다면 양해해 주시기 바랍니다.

기본적으로 내 컴퓨터에서 로컬로 실행되는 두 개의 프로세스가 있고 "uname -n"의 결과가 각 프로세스(및 모든 하위 프로세스)마다 다르기를 원합니다. 이 작업을 수행하기 위해 chroot 감옥을 어떻게 사용할 수 있습니까?

답변1

chroot로는 이 작업을 수행할 수 없습니다. 하지만 변경하면 그렇게 할 수 있습니다.UTS 네임스페이스, 예를 들어 다음을 사용하여공유 취소.

mysystem# unshare --uts sh -c 'hostname test; uname -n'; uname -n
test
mysystem

마찬가지로, 대화식으로:

첫 번째 터미널:

mysystem# unshare --uts bash
mysystem# hostname test
mysystem# exec bash # to refresh prompt
test# uname -n
test
test# strace uname -n 2>&1|tail
brk(NULL)                               = 0x5592a93f6000
brk(0x5592a9417000)                     = 0x5592a9417000
uname({sysname="Linux", nodename="test", ...}) = 0
fstat(1, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0
write(1, "test\n", 5test
)                   = 5
close(1)                                = 0
close(2)                                = 0
exit_group(0)                           = ?
+++ exited with 0 +++
test# 

두 번째 터미널, 영향을 받지 않음:

mysystem# uname -n
mysystem
mysystem# 

첫 번째 터미널에서 셸을 종료하고 네임스페이스가 변경되지 않은 호출 터미널로 돌아갑니다.

test# exit
mysystem# 

알아채다오직호스트 이름이 변경됩니다. 유사한 것이 있다네임스페이스다양한 기능(네트워크, 장착 지점...)에 사용됩니다. 이것이 컨테이너의 초석입니다. 모든 컨테이너가 사용됩니다(컨테이너의 또 다른 주요 초석은 다음과 같습니다).cgroup).

관련 정보