.png)
다른 루트 폴더로 명령 실행(Linux)
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
는 예상대로 사용자 지정 데비안 루트에만 설치되었습니다.