给 Debian 配置 SSH chroot jail

Bittersweet2018-11-19
本文最后更新于 1645 天前(2018-11-19),其中的信息可能已经有所发展或者不再适用于现阶段。
本文全长 557 字,全部读完大约需要 2 分钟。

今天由于某些原因,从群友那里听到了使用 chroot 配置 ssh jail 的做法,笔者使用的服务器 OS 是 Debian,在配置过程中踩到了一个小坑,因此在这里记录下来以备后人查阅。

什么是 chroot

wiki 上 有关于 chroot 的详细介绍。简单来说,chroot 是一个为特定进程或进程组改变其执行环境的根目录的机制,可以被视作为一种安全隔离机制。OpenSSH 在 4.8p1 版本之后添加了对 ChrootDirectory 配置项的支持,因此我们可以方便地配置某些 SSH 用户,让其工作环境被隔离在某个 chroot 下,就像被锁在 jail 里面一样。

如何配置一个 chroot 环境

请参考 这篇文章 。别忘了最后使用 systemctl restart sshd 来重启 ssh daemon 使配置生效。

配置过程中的坑

按照上文给出的链接进行配置之后,笔者尝试使用 ssh 客户端登录,发现进入之后 bash 的提示符是这样的:

I have no name!@VM-xx-217-debian:

为什么是 I have no name! 这个叹号很恰当地表达了笔者的心情。经过查阅资料和各种摸索,笔者终于找到了解决方案:

  • 首先将 /etc/passwd 和 /etc/group 复制到 chroot 环境的响应目录中,若不希望 chroot 中的用户能够访问 host 的全部用户名和用户组列表,则可以对这两个文件进行相应的修改,删除除了 ssh 用户之外的其他用户信息
  • 其次根据 这个网页 ,我们得知 whoami 等显示用户名的操作需要 libnss 的相关库才能正常工作,因此需要将 /lib/x8664-linux-gnu 目录下所有类似 libnss* 的库全部复制到 chroot 环境中的相应位置

经过以上两步操作,笔者重新使用 ssh 登录之后发现,bash 的提示符正常啦!

除特殊说明以外,本网站文章采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。