如何使用Chrooted Jail限制SSH用戶訪問特定目錄

有幾個原因需要限制SSH用戶會話到特定目錄,尤其是在網絡服務器上,但最明顯的原因是系統安全。為了鎖定SSH用戶在特定目錄中,我們可以使用chroot機制。

在Unix-like系統如Linux中,更改根目錄(chroot)是一種將特定用戶操作與Linux系統的其他部分分離的方法;它將當前運行的用戶進程及其子(父)進程的明顯根目錄更改為一個新的根目錄,稱為chroot監獄

在本教程中,我們將向您展示如何在Linux中限制SSH用戶訪問特定目錄。請注意,我們將以root身份運行所有命令,如果您以普通用戶身份登錄到服務器,請使用sudo命令

1. 首先使用以下 mkdir 命令 創建 chroot 監獄:

1. 首先,使用以下mkdir命令建立chroot jail:

# 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}
Listing Required Files

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
Create /dev and Required Files

4. 之後,在chroot jail上設置適當的權限。請注意,chroot jail及其子目錄和子文件必須由root用戶擁有,並且任何普通用戶或組都不能寫入:

# chown root:root /home/test
# chmod 0755 /home/test
# ls -ld /home/test
Set Permissions on Directory

第2步:為SSH Chroot Jail設置交互式Shell

5. 首先,建立bin資料夾,然後使用cp命令/bin/bash檔案複製到bin資料夾中,如下所示:

# mkdir -p /home/test/bin
# cp -v /bin/bash /home/test/bin/
Copy Files to bin Directory

6. 接著,找出共享libs所需的bash,如下所示,並將它們複製到lib資料夾中:

# 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/
Copy Shared Library Files

第三步:建立並設定SSH使用者

7. 現在,使用useradd命令建立SSH使用者,並為該使用者設定一個安全的密碼:

# useradd tecmint
# passwd tecmint

8. 建立chroot jail的通用設定目錄/home/test/etc,並將更新後的帳戶檔案(/etc/passwd/etc/group)複製到此目錄中,如下所示:

# mkdir /home/test/etc
# cp -vf /etc/{passwd,group} /home/test/etc/
Copy Password Files
Note: Each time you add more SSH users to the system, you will need to copy the updated account files into the /home/test/etc directory.

第四步:設定SSH使用chroot jail

9. 現在,開啟sshd_config檔案。

# vi /etc/ssh/sshd_config

並在檔案中加入/修改以下行。

#define username to apply chroot jail to
Match User tecmint
#specify chroot jail
ChrootDirectory /home/test
Configure SSH Chroot Jail

保存檔案並退出,然後重新啟動SSHD服務:

# systemctl restart sshd
OR
# service sshd restart

第五步:測試SSH與chroot jail

10. 在此時,測試chroot jail的設置是否如預期般運作:

# ssh [email protected]
-bash-4.1$ ls
-bash-4.1$ date
-bash-4.1$ uname
Testing SSH User Chroot Jail

從上面的截圖中,我們可以看到SSH用戶被鎖定在chroot jail中,並且無法運行任何外部命令(lsdateuname等)。

用戶只能執行bash及其內置命令,例如(pwdhistoryecho等),如下所示:

# ssh [email protected]
-bash-4.1$ pwd
-bash-4.1$ echo "Tecmint - Fastest Growing Linux Site"
-bash-4.1$ history
SSH Built-in Commands

第6步。創建SSH用戶的主目錄並添加Linux命令

11. 從上一步中,我們可以注意到用戶被鎖定在根目錄中,我們可以為SSH用戶創建一個主目錄,如下所示(對所有未來的用戶都這樣做):

# mkdir -p /home/test/home/tecmint
# chown -R tecmint:tecmint /home/test/home/tecmint
# chmod -R 0700 /home/test/home/tecmint
Create SSH User Home Directory

12. 接下來,在bin目錄中安裝一些用戶命令,例如lsdatemkdir

# cp -v /bin/ls /home/test/bin/
# cp -v /bin/date /home/test/bin/
# cp -v /bin/mkdir /home/test/bin/
Add Commands to SSH User

13. 接下來,檢查上述命令的共享庫並將它們移動到chroot jail的庫目錄中:

# 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/
Copy Shared Libraries

步驟7. 使用Chroot Jail測試SFTP

14. 使用sftp進行最終測試;檢查您剛剛安裝的命令是否正常工作。

/etc/ssh/sshd_config文件中添加以下行:

#Enable sftp to chrooted jail 
ForceCommand internal-sftp

保存文件並退出。然後重新啟動SSHD服務:

# systemctl restart sshd
OR
# service sshd restart

15. 現在,使用SSH進行測試,您將收到以下錯誤:

# ssh [email protected]
Test SSH Chroot Jail

嘗試使用SFTP如下:

# sftp [email protected]
Testing sFTP SSH User

本文到此結束!在這篇文章中,我們向您展示了如何在 Linux 中將 SSH 用戶限制在特定目錄(chroot 監獄)。請在下面的評論部分分享您對本指南的看法。

Source:
https://www.tecmint.com/restrict-ssh-user-to-directory-using-chrooted-jail/