다른 루트 폴더로 명령 실행(Linux)

다른 루트 폴더로 명령 실행(Linux)

2022-10-19 last update

6 minutes reading docker linux bash
chroot 명령을 사용하여 다른 루트 폴더로 명령을 실행할 수 있습니다. 시도해 봅시다.

종속성 나열



먼저 sh , echo , cat , pwd 의 라이브러리 종속성을 가져오겠습니다.

$ ldd /bin/sh /bin/echo /bin/cat /bin/pwd
/bin/sh:
        linux-vdso.so.1 (0x00007ffd8b764000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f415d09f000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f415d2d4000)
/bin/echo:
        linux-vdso.so.1 (0x00007ffd04383000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f3120c73000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f3120e90000)
/bin/cat:
        linux-vdso.so.1 (0x00007fffe1d7a000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fcf49a42000)
        /lib64/ld-linux-x86-64.so.2 (0x00007fcf49c60000)
/bin/pwd:
        linux-vdso.so.1 (0x00007fffdbfad000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f60ec35c000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f60ec57a000)



새 사용자 지정 루트 만들기



이제 해당 명령이 작동하는 베어본 루트 파일 시스템을 해당 라이브러리와 함께 생성해 보겠습니다.

$ mkdir customroot/
$ mkdir customroot/bin/ customroot/lib/ customroot/lib64/

$ cp /bin/sh /bin/echo /bin/cat /bin/pwd customroot/bin/

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


사용자 정의 루트로 새 셸 실행



이제 customroot 폴더를 루트로 사용하여 셸을 실행합니다.

$ sudo chroot customroot/ sh

# echo "Hello World!" > hello.txt
# cat hello.txt
Hello World!

# pwd
/

# ls
sh: 4: ls: not found

# exit


예상대로 pwd /를 출력하고 ls 이 바이너리(및 종속성)를 복사하지 않았기 때문에 실행되지 않습니다.

사용자 정의 데비안 루트 만들기



위에서 수행한 대로 각 바이너리 파일과 종속성을 복사하는 것은 번거롭습니다. 더 쉬운 방법으로 완전한 기본 루트 파일 시스템을 생성할 수 있다면 어떨까요? debootstrap 구출!

$ sudo apt install debootstrap
$ sudo debootstrap bionic customdebroot


이제 새 루트로 새 셸을 실행해 보겠습니다.

$ sudo chroot customdebroot/ bash

# pwd
/

# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var


일부 패키지를 설치해 보겠습니다.

# apt install dict

# which dict
/usr/bin/dict

# dict nintendo
1 definition found

From The Free On-line Dictionary of Computing (30 December 2018) [foldoc]:

  Nintendo

     <company, games> A Japanese {video game} hardware manufacturer
     and software publisher.  Nintendo started by making playing
     cards, but was later dominant in video games throughout the
     1980s and early 1990s worldwide.  They make lots of games
     consoles including the Gameboy, Gameboy Advance SP, DS, DS
     Lite and the Wii.

     {Nintendo home (http://nintendo.com/)}.

     (2008-03-08)


'실제' 루트가 있는 원래 셸로 돌아갑니다.

# exit

$ file customdebroot/usr/bin/dict
customdebroot/usr/bin/dict: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=1ae2d6542c13f51dcaaf6510a18e1b4bf49cf7c8, stripped

dict는 예상대로 사용자 지정 데비안 루트에만 설치되었습니다.