다른 루트 폴더로 명령 실행(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
는 예상대로 사용자 지정 Debian 루트에만 설치되었습니다.
Reference
이 문제에 관하여(다른 루트 폴더로 명령 실행(Linux)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/tallesl/running-a-command-with-a-different-root-folder-linux-14jd텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)