Skip to main content

Linux 使用 Chroot

運行環境
  • LXC Debian 12

建立SSH chroot

建立 chroot jail 

mkdir -p /home/user

建立基本/dev節點

ls -l /dev/{null,zero,stdin,stdout,stderr,random,tty}

若是LXC環境手動複製dev並給予權限

mkdir -p /home/user/dev/

touch /home/user/dev/{null,zero,random,tty}

chmod 666 /home/user/dev/{null,zero,random,tty}

若是一般環境用mknod建立檔案

mkdir -p /home/user/dev/		 
cd /home/user/dev/ 
mknod -m 666 null c 1 3
mknod -m 666 tty c 5 0
mknod -m 666 zero c 1 5
mknod -m 666 random c 1 8

chroot jail 子目錄須為root擁有

chown root:root /home/user
chmod 0755 /home/user
ls -ld /home/user

image.png

建立SSH chroot Shell

建立bin目錄,並複製/bin/bash到目錄中,某些系統建立使用者會用/bin/sh,可以再複製/bin/sh或是修改/etc/passwd的Shell

mkdir -p /home/user/bin 
cp -v /bin/bash /home/user/bin/

image.png

確認bash所需的lib檔案,並複製到lib資料夾內

ldd /bin/bash
mkdir -p /home/user/lib/x86_64-linux-gnu
mkdir -p /home/user/lib64

cp -v /lib/x86_64-linux-gnu/libtinfo.so.6 /home/user/lib/x86_64-linux-gnu/
cp -v /lib/x86_64-linux-gnu/libc.so.6 /home/user/lib/x86_64-linux-gnu/
cp -v /lib64/ld-linux-x86-64.so.2 /home/user/lib64/

image.png

image.png

建立SSH使用者
useradd user
passwd user

建立etc目錄,並複製/etc/passwd/etc/group到目錄中

mkdir /home/user/etc 
cp -vf /etc/{passwd,group} /home/user/etc/

若有新增SSH chroot使用者,/etc/passwd/etc/group都要更新到/home/user/etc

設定SSHD

編輯/etc/ssh/sshd_config並在底下新增ChrootDirectory並開啟sftp功能

#Subsystem      sftp    /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp

Match User user
ChrootDirectory /home/user
 systemctl restart sshd

測試登入

root@ssh:~# ssh user@192.168.100.1
user@192.168.100.1's password: 
-bash-5.2$ 

 

建立 SSH 使用者主目錄和新增指令
mkdir -p /home/user/home/user1
chown -R user:user /home/user/home/user1  
chmod -R 0700 /home/user/home/user1  

由於只有新增bash到chroot,無法使用其他指令,依照上述複製bash lib的方式,複製需要的指令到chroot中

image.png

複製/bin/ls,確認ls所需的lib檔案,並複製到lib資料夾內

image.png

複製後可使用ls指令,其餘指令依此步驟安裝

image.png

SFTP測試

image.png

SFTP是基於SSH 的檔案傳輸協定,只要該使用者對檔案有「寫入權限」且對目錄有「寫入 + 執行權限」,就可以操作檔案

所以Shell未安裝rm,mkdir等不能使用,但sftp可以