將 SSH 使用者會話限制訪問到特定的目錄內,特別是在 web 站群伺服器上,這樣做有多個原因,但最顯而易見的是為了系統安全。為了鎖定 SSH 使用者在某個目錄,我們可以使用 chroot 機制。
在諸如 Linux 之類的類 Unix 系統中更改 root(chroot)是將特定使用者操作與其他 Linux 系統分離的一種手段;使用稱為 chrooted 監獄 的新根目錄更改當前執行的使用者程式及其子程式的明顯根目錄。
在本教程中,我們將向你展示如何限制 SSH 使用者訪問 Linux 中指定的目錄。注意,我們將以 root 使用者身份執行所有命令,如果你以普通使用者身份登入站群伺服器,請使用 sudo 命令。
步驟 1:建立 SSH chroot 監獄
1 、 使用 mkdir 命令開始建立 chroot 監獄:

# mkdir -p /home/test

2 、 接下來,根據 sshd_config 手冊找到所需的檔案,ChrootDirectory 選項指定在身份驗證後要 chroot 到的目錄的路徑名。該目錄必須包含支援使用者會話所必需的檔案和目錄。
對於互動式會話,這需要至少一個 shell,通常為 sh 和基本的 /dev 節點,例如 null 、 zero 、 stdin 、 stdout 、 stderr 和 tty 裝置:

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

列出所需檔案
3 、 現在,使用 mknod 命令建立 /dev 下的檔案。在下面的命令中,-m 標誌用來指定檔案許可權位,c 意思是字元檔案,兩個數字分別是檔案指向的主要號和次要號。

# mkdir -p /home/test/dev/
# cd /home/test/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

建立 /dev 和所需檔案
4 、 在此之後,在 chroot 監獄中設定合適的許可權。注意 chroot 監獄和它的子目錄以及子檔案必須被 root 使用者所有,並且對普通使用者或使用者組不可寫:

# chown root:root /home/test
# chmod 0755 /home/test
# ls -ld /home/test

設定目錄許可權
步驟 2:為 SSH chroot 監獄設定互動式 shell
5 、 首先,建立 bin 目錄並複製 /bin/bash 到 bin 中:

# mkdir -p /home/test/bin
# cp -v /bin/bash /home/test/bin/

複製檔案到 bin 目錄中
6 、 現在,識別 bash 所需的共享庫,如下所示覆制它們到 lib64 中:

# ldd /bin/bash
# mkdir -p /home/test/lib64
# cp -v /lib64/{libtinfo.so.5,libdl.so.2,libc.so.6,ld-linux-x86-64.so.2} /home/test/lib64/

複製共享庫檔案
步驟 3:建立並配置 SSH 使用者
7 、 現在,使用 useradd 命令建立 SSH 使用者,並設定安全密碼:

# useradd tecmint
# passwd tecmint

8 、 建立 chroot 監獄通用配置目錄 /home/test/etc 並複製已更新的賬號檔案(/etc/passwd 和 /etc/group)到這個目錄中:

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

複製密碼檔案
注意:每次向系統新增更多 SSH 使用者時,都需要將更新的帳戶檔案複製到 /home/test/etc 目錄中。
步驟 4:配置 SSH 來使用 chroot 監獄
9 、 現在開啟 sshd_config 檔案。

# vi /etc/ssh/sshd_config

在此檔案中新增或修改下面這些行。

# 定義要使用 chroot 監獄的使用者
Match User tecmint
# 指定 chroot 監獄
ChrootDirectory /home/test

配置 SSH chroot 監獄
儲存檔案並退出,重啟 sshd 服務:

# systemctl restart sshd
或者
# service sshd restart

步驟 5:測試 SSH 的 chroot 監獄
10 、 這次,測試 chroot 監獄的設定是否如希望的那樣成功了:

# ssh tecmint@192.168.0.10
-bash-4.1$ ls
-bash-4.1$ date
-bash-4.1$ uname

測試 SSH 使用者 chroot 監獄
從上面的截圖上來看,我們可以看到 SSH 使用者被鎖定在了 chroot 監獄中,並且不能使用任何外部命令如(ls 、 date 、 uname 等等)。
使用者只可以執行 bash 以及它內建的命令(比如:pwd 、 history 、 echo 等等):

# ssh tecmint@192.168.0.10
-bash-4.1$ pwd
-bash-4.1$ echo “Tecmint – Fastest Growing Linux Site”
-bash-4.1$ history

SSH 內建命令
步驟 6: 建立使用者的主目錄並新增 Linux 命令
11 、 從前面的步驟中,我們可以看到使用者被鎖定在了 root 目錄,我們可以為 SSH 使用者建立一個主目錄(以及為所有將來的使用者這麼做):

# mkdir -p /home/test/home/tecmint
# chown -R tecmint:tecmint /home/test/home/tecmint
# chmod -R 0700 /home/test/home/tecmint

建立 SSH 使用者主目錄
12 、 接下來,在 bin 目錄中安裝幾個使用者命令,如 ls 、 date 、 mkdir:

# cp -v /bin/ls /home/test/bin/
# cp -v /bin/date /home/test/bin/
# cp -v /bin/mkdir /home/test/bin/

向 SSH 使用者新增命令
13 、 接下來,檢查上面命令的共享庫並將它們移到 chroot 監獄的庫目錄中:

# ldd /bin/ls
# 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/

複製共享庫
步驟 7:測試 sftp 的 用 chroot 監獄
14 、 最後用 sftp 做一個測試;測試你先前安裝的命令是否可用。
在 /etc/ssh/sshd_config 中新增下面的行:

# 啟用 sftp 的 chroot 監獄
ForceCommand internal-sftp

儲存並退出檔案。接下來重啟 sshd 服務:

# systemctl restart sshd
或者
# service sshd restart

15 、 現在使用 ssh 測試,你會得到下面的錯誤:

# ssh tecmint@192.168.0.10

測試 SSH Chroot 監獄
試下使用 sftp:

# sftp tecmint@192.168.0.10

測試 sFTP SSH 使用者
建議閱讀: 使用 chroot 監獄將 sftp 使用者限制在主目錄中。
就是這樣了!在文字中,我們向你展示瞭如何在 Linux 中限制 ssh 使用者到指定的目錄中(chroot 監獄)。請在評論欄中給我們提供你的想法。
 
原文連結:https://linux.cn/article-8313-1.html?utm_source=index&utm_medium=more