Cloud/Docker

Docker) chroot (Change Root) 실습해보기

Adım Kim 2022. 9. 27. 21:13
실습 환경 : AWS Console (2022/09), Visual Studio Code
실습 목적 : 리눅스 컨테이너 기술기반인 chroot 명령을 익혀보기

chroot

  • Linux시스템의 root 디렉토리 위치를 변경한다.


디렉토리 생성

1. root user로 사용자 전환
# root 사용자로 전환 방법 1
su-
# root 사용자로 전환 방법 2
sudo su

2. /(root) 디렉토리로 위치 이동
3. chroot 명령으로 root디렉토리를 설정할 디렉토리 생성
mkdir tomato​


4. 생성한 디렉토리 위치로 이동


디렉토리 환경 맞추기

  • chroot 명령을 실행할 설정사용  shell에대한 바이너리가 root로 설정할 디렉토리에 존재하지 않다면, root로 설정할 디렉토리에 해당 shell 바이너리와 공유 라이브러리를 복사해야 한다.
 1. /bin/bash를 root 디렉토리로 만들려 하는 디렉토리에 복사한다.
cp /bin/bash /tomato/bin​

2. ldd 명령으로 /bin/bash의 공유 라이브러리를 확인한다.

    -  linux-vdso.so.l : 가상 라이브러리, 복사할 필요가 없다.
    -  libtinfo.so.6 : bash가 동작할 때 필요한 라이브러리
    -  
libc.so.6 : Linux 공통 라이브러리
    -  /lib64/ld-linux-x86-64.so.2 : 공유 라이브러리를 메모리에 로드하는 역할

ldd /bin/bash​

3. 공유 라이브러리를 복사할 디렉토리를 생성한다.

mkdir -p /tomato/lib/x86_64-linux-gnu/
mkdir -p /tomato/lib64/

4. 공유 라이브러리를 복사한다.

cp /lib/x86_64-linux-gnu/libtinfo.so.6 /tomato/lib/x86_64-linux-gnu/libtinfo.so.6
cp /lib/x86_64-linux-gnu/libc.so.6 /tomato/lib/x86_64-linux-gnu/libc.so.6
cp /lib64/ld-linux-x86-64.so.2 /tomato/lib64/ld-linux-x86-64.so.2

5. chroot 명령을 사용하여 정상 실행되는지 확인

chroot /tomato /bin/bash

디렉토리 환경 맞추기 (+ ls 명령 추가)

  • 위 공유 라이브러리만으로는 chroot로 root 디렉토리를 변경한 환경에서 많은 명령을 실행할 수 없다.
    추가로 bin/ls 의 공유라이브러리를 추가해본다.
1. ldd 명령으로 /bin/lib 의 공유 라이브러리를 확인한다.

    -  /bin/bash에서 복사한 라이브러리와 중복되는 라이브러리는 복사하지 않아도 된다.

ldd /bin/ls​

2. 공유 라이브러리를 복사할 디렉토리를 생성한다.

cp /bin/ls /tomato/bin

3. 공유 라이브러리를 복사한다.

cp /lib/x86_64-linux-gnu/libselinux.so.1 /tomato/lib/x86_64-linux-gnu/libselinux.so.1
cp /lib/x86_64-linux-gnu/libpcre2-8.so.0 /tomato/lib/x86_64-linux-gnu/libpcre2-8.so.0

4. chroot 명령을 사용하여 ls명령이 잘 실행되는지 확인