chroot 實踐

chroot - run command or interactive shell with special root directory
以製作一個只有 bash 和 ls 兩條命令的隔離環境爲例。實踐環境 Aliyun ubuntu18.04

製作一個 chroot 隔離環境

創建一個 new root, 並切換到 jail 目錄

  1. mkdir jail
  2. cd jail

在 jail 下創建 bin 目錄

mkdir bin

複製 bin 和 bash 到 jail/bin

cp -v /bin/{bash,ls} ./bin

將 /bin/bash 和 /bin/ls 的依賴複製到 jail 對應的目錄

  1. ldd /bin/bash
root@aliyun:bin# ldd /bin/bash
        linux-vdso.so.1 (0x00007ffd9b6b8000)
        libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007feb160d5000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007feb15ed1000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007feb15ae0000)
        /lib64/ld-linux-x86-64.so.2 (0x00007feb16619000)
  1. 在 jail 這個 new root 目錄下創建 lib/x86_64-linux-gnulib64 目錄
    mkdir -p lib/x86_64-linux-gnu
    mkdir lib64
  2. 複製 /bin/bash 的依賴庫
    cp /lib/x86_64-linux-gnu/libtinfo.so.5 .lib/x86_64-linux-gnu/
    cp /lib/x86_64-linux-gnu/libdl.so.2 .lib/x86_64-linux-gnu/
    cp /lib/x86_64-linux-gnu/libc.so.6 .lib/x86_64-linux-gnu/
    cp /lib64/ld-linux-x86-64.so.2 .lib64
  3. 複製 /bin/ls 的依賴庫
root@aliyun:bin# ldd /bin/ls
        linux-vdso.so.1 (0x00007ffe6f32b000)
        libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007ff1e7296000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ff1e6ea5000)
        libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007ff1e6c33000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007ff1e6a2f000)
        /lib64/ld-linux-x86-64.so.2 (0x00007ff1e76e0000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007ff1e6810000)

cp /lib/x86_64-linux-gnu/libselinux.so.1 ./lib/x86_64-linux-gnu/
cp /lib/x86_64-linux-gnu/libpcre.so.3 ./lib/x86_64-linux-gnu/
cp /lib/x86_64-linux-gnu/libpthread.so.0 ./lib/x86_64-linux-gnu/

jail 這個 new root 構建完畢

在這裏插入圖片描述

執行 chroot jail /bin/bash

在這裏插入圖片描述
如上圖所示,chroot jail /bin/bash 進入了構建的隔離環境。執行 ls 可以查看文件。因爲只構建了 bash 和 ls 兩條命令,其餘的命令無法執行。

chroot 是啥?

通過上面的實踐 chroot 一個基本功能就是可以切換到一個隔離的環境,與宿主機進行隔離。不錯,這其實也就是 docker 的功能。只不過 docker 功能更強大。

Reference

  1. vdso
  2. chroot examples
  3. chroot-vitualization
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章