next up previous contents
Next: php 執行 shell 指令 Up: CHROOT Previous: CHROOT 功用   Contents

建立 chroot 系統

  1. chroot 指令來自 coreutils 套件,系統預設已安裝。
  2. 建立要 chroot 的目錄。
    [root@dywang ~]# mkdir /var/www/script
    [root@dywang ~]# cd /var/www/script
    [root@dywang script]#
    
  3. 建立系統主要目錄
    [root@dywang script]# mkdir {bin,dev,etc,home,lib64,proc,tmp,usr,var}
    [root@dywang script]# ls -d */
    bin/  dev/  etc/  home/  lib64/  proc/  tmp/  usr/  var/
    
  4. 複製執行檔
    [root@dywang script]# cp --preserve=context \
    /bin/{awk,bash,cat,echo,env,grep,mount,sed,sh} bin
    [root@dywang script]# cp --preserve=context \
    /usr/bin/{bc,cc,g++,gcc,java,javac,perl,php,python,ruby,tee,timeout,tr} usr/bin
    
  5. 複製函式庫
    [root@dywang script]# cp -c -a /lib64 . 
    [root@dywang script]# cp -c -a /usr/{lib64,lib,libexec} usr/
    
  6. 變更目錄 proc 的 SELinux type
    [root@dywang script]# chcon -t proc_t proc
    [root@dywang script]# ll -Zd proc
    drwxr-xr-x. root root unconfined_u:object_r:proc_t:s0  proc
    
  7. 建立 proc 目錄連結
    [root@dywang script]# mount --bind /proc /var/www/script/proc
    
  8. 先查看 null,zero,random,urandom 等 characters 的 major,minor numbers。
    [root@dywang script]# stat -c 'major: %t minor: %T' /dev/{null,zero,random,urandom}
    major: 1 minor: 3
    major: 1 minor: 5
    major: 1 minor: 8
    major: 1 minor: 9
    
  9. 建立 character device node,設定存取權限 666 並設定 SELinux context。
    [root@dywang script]# mknod -m 666 dev/null c 1 3 \
    -Z system_u:object_r:null_device_t:s0
    [root@dywang script]# mknod -m 666 dev/zero c 1 5 \
    -Z system_u:object_r:zero_device_t:s0
    [root@dywang script]# mknod -m 666 dev/random c 1 8 \
    -Z system_u:object_r:random_device_t:s0
    [root@dywang script]# mknod -m 666 dev/urandom c 1 9 \
    -Z system_u:object_r:urandom_device_t:s0
    
  10. 若沒立即設定 SELinux context,仍可以下列方式變更 character device node 的 SELinux type。
    [root@dywang script]# chcon -t null_device_t dev/null
    [root@dywang script]# chcon -t zero_device_t dev/zero
    [root@dywang script]# chcon -t random_device_t dev/random
    [root@dywang script]# chcon -t urandom_device_t dev/urandom
    
  11. 查看 character device node 的 SELinux type
    [root@dywang script]# ll -Z dev
    crw-rw-rw-. root root unconfined_u:object_r:null_device_t:s0 null
    crw-rw-rw-. root root unconfined_u:object_r:random_device_t:s0 random
    crw-rw-rw-. root root unconfined_u:object_r:urandom_device_t:s0 urandom
    crw-rw-rw-. root root unconfined_u:object_r:zero_device_t:s0 zero
    
  12. Set sticky bit 目錄 tmp
    [root@dywang script]# chmod 1777 tmp
    
  13. 變更目錄 tmp 的 SELinux type
    [root@dywang script]# chcon -t tmp_t tmp
    [root@dywang script]# ll -Zd tmp
    drwxrwxrwt. root root unconfined_u:object_r:tmp_t:s0   tmp
    
  14. chroot 測試:在目前的目錄用 touch 產生一個空檔案,在 chroot 至本目錄再使用 touch 卻出現沒有 touch 指令的錯誤輸出,因為在 chroot 後,系統中沒有 touch 指令。
    [root@dywang script]# chroot . touch aaa
    chroot: failed to run command `touch': No such file or directory
    [root@dywang script]#
    



De-Yu Wang 2018-08-08