# Linux 使用 Chroot

##### <span style="color: rgb(0, 0, 0);">**運行環境**</span>

- <span style="color: rgb(0, 0, 0);">**LXC Debian 12**</span>

##### <span style="color: rgb(0, 0, 0);">**建立SSH chroot**</span>

<span style="color: rgb(0, 0, 0);">**建立 chroot jail** </span>

```
mkdir -p /home/user
```

<span style="color: rgb(0, 0, 0);">**建立基本`/dev`節點**</span>

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

<span style="color: rgb(0, 0, 0);">**若是LXC環境手動複製`dev`並給予權限**</span>

```
mkdir -p /home/user/dev/

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

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

<span style="color: rgb(0, 0, 0);">**若是一般環境用`<span dir="auto">mknod</span>`建立檔案**</span>

```
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
```

<span style="color: rgb(0, 0, 0);">**<span dir="auto">chroot jail 子目錄須為root擁有</span>**</span>

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

<span style="color: rgb(0, 0, 0);">**[![image.png](https://note.homesitetw.com/uploads/images/gallery/2025-10/scaled-1680-/bDrimage.png)](https://note.homesitetw.com/uploads/images/gallery/2025-10/bDrimage.png)**</span>

##### <span style="color: rgb(0, 0, 0);">**建立SSH chroot Shell**</span>

<span style="color: rgb(0, 0, 0);">**建立`bin`目錄，並複製`/bin/bash`到目錄中，某些系統建立使用者會用`/bin/sh`，可以再複製`/bin/sh`或是修改`/etc/passwd`的Shell**</span>

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

<span style="color: rgb(0, 0, 0);">**[![image.png](https://note.homesitetw.com/uploads/images/gallery/2025-10/scaled-1680-/DNIimage.png)](https://note.homesitetw.com/uploads/images/gallery/2025-10/DNIimage.png)**</span>

<span style="color: rgb(0, 0, 0);">**確認bash所需的`lib`檔案，並複製到`lib`資料夾內**</span>

```
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/
```

<span style="color: rgb(0, 0, 0);">**[![image.png](https://note.homesitetw.com/uploads/images/gallery/2025-10/scaled-1680-/Oaiimage.png)](https://note.homesitetw.com/uploads/images/gallery/2025-10/Oaiimage.png)**</span>

<span style="color: rgb(0, 0, 0);">**[![image.png](https://note.homesitetw.com/uploads/images/gallery/2025-10/scaled-1680-/Vapimage.png)](https://note.homesitetw.com/uploads/images/gallery/2025-10/Vapimage.png)**</span>

##### <span style="color: rgb(0, 0, 0);">**建立SSH使用者**</span>

```
useradd user
passwd user
```

<span style="color: rgb(0, 0, 0);">**建立`etc`目錄，並複製`<span dir="auto">/etc/passwd</span><span dir="auto">和</span><span dir="auto">/etc/group</span>`到目錄中**</span>

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

<span style="color: rgb(0, 0, 0);">**若有新增SSH chroot使用者，`<span dir="auto">/etc/passwd</span><span dir="auto">和</span><span dir="auto">/etc/group</span>`都要更新到`/home/user/etc`中**</span>

##### <span style="color: rgb(0, 0, 0);">**設定SSHD**</span>

<span style="color: rgb(0, 0, 0);">**編輯`/etc/ssh/sshd_config`並在底下新增ChrootDirectory並開啟sftp功能**</span>

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

Match User user
ChrootDirectory /home/user
```

```
 systemctl restart sshd
```

<span style="color: rgb(0, 0, 0);">**測試登入**</span>

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

<span style="color: rgb(0, 0, 0);"></span>

##### <span style="color: rgb(0, 0, 0);">**建立 SSH 使用者主目錄和新增指令**</span>

```
mkdir -p /home/user/home/user1
chown -R user:user /home/user/home/user1  
chmod -R 0700 /home/user/home/user1  
```

<span style="color: rgb(0, 0, 0);">**由於只有新增bash到chroot，無法使用其他指令，依照上述複製bash lib的方式，複製需要的指令到chroot中**</span>

[![image.png](https://note.homesitetw.com/uploads/images/gallery/2025-10/scaled-1680-/FHXimage.png)](https://note.homesitetw.com/uploads/images/gallery/2025-10/FHXimage.png)

<span style="color: rgb(0, 0, 0);">**複製`/bin/ls`，確認`ls`所需的`lib`檔案，並複製到`lib`資料夾內**</span>

[![image.png](https://note.homesitetw.com/uploads/images/gallery/2025-10/scaled-1680-/kY5image.png)](https://note.homesitetw.com/uploads/images/gallery/2025-10/kY5image.png)

<span style="color: rgb(0, 0, 0);">**複製後可使用`ls`指令，其餘指令依此步驟安裝**</span>

[![image.png](https://note.homesitetw.com/uploads/images/gallery/2025-10/scaled-1680-/ZzVimage.png)](https://note.homesitetw.com/uploads/images/gallery/2025-10/ZzVimage.png)

<span style="color: rgb(0, 0, 0);">**SFTP測試**</span>

[![image.png](https://note.homesitetw.com/uploads/images/gallery/2025-10/scaled-1680-/B99image.png)](https://note.homesitetw.com/uploads/images/gallery/2025-10/B99image.png)

<span style="color: rgb(0, 0, 0);">**SFTP是基於SSH 的檔案傳輸協定，只要該使用者對檔案有「寫入權限」且對目錄有「寫入 + 執行權限」，就可以操作檔案**</span>

<span style="color: rgb(0, 0, 0);">**所以Shell未安裝rm,mkdir等不能使用，但sftp可以**</span>