如何将SSH用户锁定在home目录

将SSH用户囚禁到其主目录允许您(管理员)对Linux系统上的用户帐户进行大量控制和安全性。

被监禁的用户仍然可以访问其主目录,但无法遍历系统的其余部分。这将使系统上的所有其他内容保持私有,并防止SSH用户篡改任何内容。对于具有不同用户的系统来说,这是一种理想的设置,每个用户的文件都需要保持私有并与其他用户隔离。

使用chroot将用户锁定到home主目录

  • 首先创建chroot目录,它将包含各种节点、lib和我们被监禁用户的shell。
# mkdir /var/chroot
  • 接下来,让我们将一些必需的/dev节点复制到Chroot目录,允许用户基本使用终端。
# mkdir /var/chroot/dev		
# cd /var/chroot/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
  • 接下来,在Chroot目录上设置权限。

root用户需要拥有该目录,以确保被禁止的用户不能离开它。其他用户只能拥有读取和执行权限。

# chown root:root /var/chroot
# chmod 755 /var/chroot
  • 接下来,们给被锁定的用户一个shell。在本例中,我们将使用bashshell,但如果您愿意,可以使用不同的shell。
# mkdir /var/chroot/bin
# cp /bin/bash /var/chroot/bin
  • Bash shell需要各种libs运行,因此还需要复制他们到chroot目录。我们可以使用ldd命令查看需要什么libs
# ldd /bin/bash
	linux-vdso.so.1 (0x00007ffd59492000)
	libtinfo.so.6 => /lib/x86_64-linux-gnu/libtinfo.so.6 (0x00007f91714cd000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f91714c7000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f91712d5000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f917163a000)

将这些文件复制到Chroot目录:

# mkdir -p /var/chroot/lib/x86_64-linux-gnu /var/chroot/lib64
# cp /lib/x86_64-linux-gnu/{libtinfo.so.6,libdl.so.2,libc.so.6} /var/chroot/lib/x86_64-linux-gnu
# cp /lib64/ld-linux-x86-64.so.2 /var/chroot/lib64
  • 现在我们可以创建用户并为帐户设置密码。
# useradd example
# passwd example
  • /etc/passwd/etc/group文件添加到Chroot目录中。
# mkdir /var/chroot/etc
# cp /etc/{passwd,group} /var/chroot/etc
  • 接下来,我们需要对SSH配置文件进行一些编辑。
# sudo nano /etc/ssh/sshd_config

将以下行添加到文件底部。

Match user example
ChrootDirectory /var/chroot

将chroot配置为监禁SSH用户
保存更改并重新启动SSH服务以使更改生效。

# systemctl restart sshd
  • 为用户创建一个主目录,并给出正确的权限。
# mkdir -p /var/chroot/home/example
# chown example:example /var/chroot/home/example
# chmod 700 /var/chroot/home/example
  • 此时,用户应该能够登录并使用本机bash命令,但他们无法访问太多。让我们为他们提供一些更基本的功能,如ls、cat、echo、rm、vi、date、mkdir。您可以使用以下脚本来简化流程,而不是手动复制这些命令的所有共享库。
#!/bin/bash
# This script can be used to create simple chroot environment
# Written by onitroad.com 
# (c) 2016 onitroad under GNU GPL v3.0+
#!/bin/bash
CHROOT='/var/chroot'
mkdir $CHROOT
for i in $( ldd $* | grep -v dynamic | cut -d " " -f 3 | sed 's/://' | sort | uniq )
  do
    cp --parents $i $CHROOT
  done
# ARCH amd64
if [ -f /lib64/ld-linux-x86-64.so.2 ]; then
   cp --parents /lib64/ld-linux-x86-64.so.2 /$CHROOT
fi
# ARCH i386
if [ -f  /lib/ld-linux.so.2 ]; then
   cp --parents /lib/ld-linux.so.2 /$CHROOT
fi
echo "Chroot jail is ready. To access it execute: chroot $CHROOT"

使用该脚本,让我们启用一些这些命令。

# ./chroot.sh /bin/{ls,cat,echo,rm,vi,date,mkdir}

使用刚创建的用户SSH到服务器,检查一切是否正常。

# ssh example@localhost

SSH用户被囚禁在chroot中,但可以访问基本命令
正如您所看到的,用户可以访问我们给它的命令,并且不能访问chroot之外的系统的其余部分。

日期:2020-07-07 20:56:44 来源:oir作者:oir