CentOS 7部署chroot ssh和sftp監牢

看過不少文章,講如何部署ssh/sftp監牢,但所有都是ssh遠程登陸後,進入監牢,卻沒法使用外部命令,即只有pwd、echo、history三個命令可用。通過多方查找,終於找到方法。linux

第01步

# mkdir /var/jail
# chown root: /var/jail
# chmod 0755 /var/jailshell

建立一個目錄,將用來「囚禁」遠程登陸進來的用戶,即將他們限制在這個目錄內。固然,也能夠將他們各自「囚禁」在各自的家目錄下。稍咱們再討論這個話題。vim

第02步

# mkdir /var/jail/{bin,dev,lib64}bash

同時建立了三個目錄:/var/jail/bin、/var/jail/dev、/var/jail/lib64dom

第03步

# ldd $(which bash)ssh

用which命令查看bash的絕對地址,再用ldd查詢其依賴的動態連接庫。根據查看的結果,它須要如下這幾個動態連接庫:
linux-vdso.so.1 =>  (0x00007ffd73b69000)
libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00007f3d7dc16000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f3d7da12000)
libc.so.6 => /lib64/libc.so.6 (0x00007f3d7d645000)
/lib64/ld-linux-x86-64.so.2 (0x00007f3d7de40000)測試

第04步

# cp -r /lib64 /var/jail/spa

# cp -r /usr/bin/* /var/jail/bin
以上大約拷貝了/lib64目錄下全部的動態連接庫,以及/usr/bin下全部的命令,共13萬多個文件。網上大多的教程是用ldd查詢,須要哪些,就拷貝哪一些。若是,咱們如須要讓被「囚禁」的用戶使用ls命令,就:3d

# ldd $(which ls)rest

而後再拷貝上面這個命令列舉出來的連接庫。此時,就當/var/jail是根目錄便可。若是動態連接庫在/lib64下,就建立一個/var/jail/lib64,再把那些文件拷貝進來,依此類推。

第05步

# cd /var/jail/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

根據man sshd_config的說明,建立運行shell和sftp須要的字符設備,如/dev/tty、/dev/zero、/dev/null、/dev/random。

第06步

# groupadd jail
# useradd -G jail tom
# passwd tom

若是在建立一個蜜罐,就不要把組命名爲jail了。黑客進來一看,就不玩了。咱們能夠將某個用戶或某個組的用戶「囚禁起來」。這裏,我要把jail組的用戶「囚禁」起來。本例可能用不到這個組。你也能夠不建立。想好要把哪一個用戶「關起來」就行。

第07步

# mkdir /var/jail/etc
# cp -vf /etc/{passwd,group} /var/jail/etc/

建立一個/var/jail/etc目錄。

第08步

用vim /etc/ssh/sshd_config,在文件最後面添加如下內容

Match User alan
    ChrootDirectory /var/jail

這裏是將用戶alan關起來。固然,你可使用組,以下:

Match Group jail
    ChrootDirectory %h

 %h,表明各用戶本身的家目錄。若是使用的是這第二種方法,則須要對各用戶的家目錄進行處理。這個方法至關於將監牢的位置進行了調整。因此前面對/var/jail的處理方法要在/home/alan處使用。/var/jail能夠刪除了。

# chown root: /home/alan
# mkdir /home/alan/{bin,lib64,dev,etc}
# cp -r /lib64/* /home/alan/lib64
# cp -r /usr/bin/* /home/alan/bin
# chmod 0755 /home/alan
# cd /home/alan/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

第09步

# mkdir /var/jail/dev/pts
# mount --bind /dev /var/jail/dev
# mount --bind /dev/pts /var/jail/dev/pts

若是不處理,會出現:/dev/pts/2 not found的錯誤。

第10步

# vim /etc/profile

內容以下:

export PATH=$PATH:/bin

保存退出。而後再:

# source /etc/profile

這一步是絕大部分教程都忽略的一條。若是沒有,登陸後,也是找不到命令。

第11步

# systemctl restart sshd

重啓sshd服務

第12步

測試。
 

# ssh alan@localhost
bash_4.2# pwd
bash_4.2# ls
bash_4.2# touch file.txt

測試成功後,咱們再來配置sftp。此時,僅須要修改/etc/ssh/sshd_config將其最後的內容變成以下:

#Subsystem    sftp   /usr/libexec/openssh/sftp-server
Subsystem     sftp   internal-sftp
Match User alan
    ChrootDirectory /var/jail
    ForceCommand internal-sftp
    AllowTcpForwarding no

而後再重啓sshd服務,便可。測試方法以下:

# sftp alan@localhost
相關文章
相關標籤/搜索