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

3525 단어 dockerlinuxbash
chroot 명령을 사용하여 다른 루트 폴더에서 명령을 실행할 수 있습니다. 시도해 봅시다.

종속 항목 나열



먼저 sh , echo , catpwd 의 라이브러리 종속성을 가져옵니다.

$ 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 루트에만 설치되었습니다.

좋은 웹페이지 즐겨찾기