有幾個原因需要限制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}

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

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

第2步:為SSH Chroot Jail設置交互式Shell
5. 首先,建立bin
資料夾,然後使用cp命令將/bin/bash
檔案複製到bin
資料夾中,如下所示:
# mkdir -p /home/test/bin # cp -v /bin/bash /home/test/bin/

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/

第三步:建立並設定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/

/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

保存檔案並退出,然後重新啟動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

從上面的截圖中,我們可以看到SSH用戶被鎖定在chroot jail中,並且無法運行任何外部命令(ls,date,uname等)。
用戶只能執行bash及其內置命令,例如(pwd,history,echo等),如下所示:
# ssh [email protected] -bash-4.1$ pwd -bash-4.1$ echo "Tecmint - Fastest Growing Linux Site" -bash-4.1$ history

第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

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/

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/

步驟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]

嘗試使用SFTP如下:
# sftp [email protected]

本文到此結束!在這篇文章中,我們向您展示了如何在 Linux 中將 SSH 用戶限制在特定目錄(chroot 監獄)。請在下面的評論部分分享您對本指南的看法。
Source:
https://www.tecmint.com/restrict-ssh-user-to-directory-using-chrooted-jail/