在諸如 linux 之類的類 unix 系統中更改 root(chroot)是将特定使用者操作與其他 linux 系統分離的一種手段;使用稱為 chrooted 監獄 的新根目錄更改目前運作的使用者程序及其子程序的明顯根目錄。
<a target="_blank"></a>
1、 使用 mkdir 指令開始建立 chroot 監獄:
<code># mkdir -p /home/test</code>
2、 接下來,根據 <code>sshd_config</code> 手冊找到所需的檔案,<code>chrootdirectory</code> 選項指定在身份驗證後要 chroot 到的目錄的路徑名。該目錄必須包含支援使用者會話所必需的檔案和目錄。
對于互動式會話,這需要至少一個 shell,通常為 <code>sh</code> 和基本的 <code>/dev</code> 節點,例如<code>null</code>、<code>zero</code>、<code>stdin</code>、<code>stdout</code>、<code>stderr</code> 和 <code>tty</code> 裝置:
<code># ls -l /dev/{null,zero,stdin,stdout,stderr,random,tty}</code>

列出所需檔案
3、 現在,使用 <code>mknod</code> 指令建立 <code>/dev</code> 下的檔案。在下面的指令中,<code>-m</code> 标志用來指定檔案權限位,<code>c</code> 意思是字元檔案,兩個數字分别是檔案指向的主要号和次要号。
<code># mkdir -p /home/test/dev/</code>
<code># cd /home/test/dev/</code>
<code># mknod -m 666 null c 1 3</code>
<code># mknod -m 666 tty c 5 0</code>
<code># mknod -m 666 zero c 1 5</code>
<code># mknod -m 666 random c 1 8</code>
建立 /dev 和所需檔案
4、 在此之後,在 chroot 監獄中設定合适的權限。注意 chroot 監獄和它的子目錄以及子檔案必須被 <code>root</code> 使用者所有,并且對普通使用者或使用者組不可寫:
<code># chown root:root /home/test</code>
<code># chmod 0755 /home/test</code>
<code># ls -ld /home/test</code>
設定目錄權限
5、 首先,建立 <code>bin</code> 目錄并複制 <code>/bin/bash</code> 到 <code>bin</code> 中:
<code># mkdir -p /home/test/bin</code>
<code># cp -v /bin/bash /home/test/bin/</code>
複制檔案到 bin 目錄中
6、 現在,識别 bash 所需的共享庫,如下所示複制它們到 <code>lib64</code> 中:
<code># ldd /bin/bash</code>
<code># mkdir -p /home/test/lib64</code>
<code># cp -v /lib64/{libtinfo.so.5,libdl.so.2,libc.so.6,ld-linux-x86-64.so.2} /home/test/lib64/</code>
複制共享庫檔案
<code># useradd tecmint</code>
<code># passwd tecmint</code>
8、 建立 chroot 監獄通用配置目錄 <code>/home/test/etc</code> 并複制已更新的賬号檔案(<code>/etc/passwd</code> 和 <code>/etc/group</code>)到這個目錄中:
<code># mkdir /home/test/etc</code>
<code># cp -vf /etc/{passwd,group} /home/test/etc/</code>
複制密碼檔案
注意:每次向系統添加更多 ssh 使用者時,都需要将更新的帳戶檔案複制到 <code>/home/test/etc</code> 目錄中。
9、 現在打開 <code>sshd_config</code> 檔案。
<code># vi /etc/ssh/sshd_config</code>
在此檔案中添加或修改下面這些行。
<code># 定義要使用 chroot 監獄的使用者</code>
<code>match user tecmint</code>
<code># 指定 chroot 監獄</code>
<code>chrootdirectory /home/test</code>
配置 ssh chroot 監獄
儲存檔案并退出,重新開機 sshd 服務:
<code># systemctl restart sshd</code>
<code>或者</code>
<code># service sshd restart</code>
10、 這次,測試 chroot 監獄的設定是否如希望的那樣成功了:
<code># ssh [email protected]</code>
<code>-bash-4.1$ ls</code>
<code>-bash-4.1$ date</code>
<code>-bash-4.1$ uname</code>
測試 ssh 使用者 chroot 監獄
從上面的截圖上來看,我們可以看到 ssh 使用者被鎖定在了 chroot 監獄中,并且不能使用任何外部指令如(<code>ls</code>、<code>date</code>、<code>uname</code> 等等)。
使用者隻可以執行 <code>bash</code> 以及它内置的指令(比如:<code>pwd</code>、<code>history</code>、<code>echo</code> 等等):
<code>-bash-4.1$ pwd</code>
<code>-bash-4.1$ echo "tecmint - fastest growing linux site"</code>
<code>-bash-4.1$ history</code>
ssh 内置指令
11、 從前面的步驟中,我們可以看到使用者被鎖定在了 root 目錄,我們可以為 ssh 使用者建立一個主目錄(以及為所有将來的使用者這麼做):
<code># mkdir -p /home/test/home/tecmint</code>
<code># chown -r tecmint:tecmint /home/test/home/tecmint</code>
<code># chmod -r 0700 /home/test/home/tecmint</code>
建立 ssh 使用者主目錄
12、 接下來,在 <code>bin</code> 目錄中安裝幾個使用者指令,如 <code>ls</code>、<code>date</code>、<code>mkdir</code>:
<code># cp -v /bin/ls /home/test/bin/</code>
<code># cp -v /bin/date /home/test/bin/</code>
<code># cp -v /bin/mkdir /home/test/bin/</code>
向 ssh 使用者添加指令
13、 接下來,檢查上面指令的共享庫并将它們移到 chroot 監獄的庫目錄中:
<code># ldd /bin/ls</code>
<code># cp -v /lib64/{libselinux.so.1,libcap.so.2,libacl.so.1,libc.so.6,libpcre.so.1,libdl.so.2,ld-linux-x86-64.so.2,libattr.so.1,libpthread.so.0} /home/test/lib64/</code>
複制共享庫
14、 最後用 sftp 做一個測試;測試你先前安裝的指令是否可用。
在 <code>/etc/ssh/sshd_config</code> 中添加下面的行:
<code># 啟用 sftp 的 chroot 監獄</code>
<code>forcecommand internal-sftp</code>
儲存并退出檔案。接下來重新開機 sshd 服務:
15、 現在使用 ssh 測試,你會得到下面的錯誤:
測試 ssh chroot 監獄
試下使用 sftp:
<code># sftp [email protected]</code>
測試 sftp ssh 使用者
原文釋出時間為:2017-03-16
本文來自雲栖社群合作夥伴“linux中國”