将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