如果用户登录,他将从 chroot 的 / 开始(在实际机器上是 /var/jail)。我希望他从主目录开始。此外,他似乎没有加载任何配置文件(.bash.rc 等)。我跟着这教程来创建 chroot 环境。我的 /etc/passwd 如下所示:
test:x:1004:1008:,,,:/var/jail/home/test:/bin/bash
这是我的 /var/jail/etc/passwd 文件的样子:
test:x:1004:1008:,,,:/home/test:/bin/bash
我还发现,如果我删除
Match User test
ChrootDirectory /var/jail
AllowTCPForwarding no
X11Forwarding no
从我的 /etc/ssh/sshd_config 中,用户从正确的主文件夹启动,并加载了 bash 设置。但是,如果我删除该部分,他就可以离开 chroot 环境。这我之前问过的问题有些相关,因为我认为命令行的错误显示是由于未加载配置文件造成的。那么有什么办法可以解决这个问题吗?
答案1
您的配置是正确的,除了一个小细节:中的主目录/etc/passwd
不应包含 chroot 路径部分。将其更改为:
test:x:1004:1008:,,,:/home/test:/bin/bash
重新启动sshd
并重试。
从man sshd_config
:
Chroot目录
指定在身份验证后 chroot(2) 到的目录的路径名。路径名的所有组件都必须是 root 拥有的目录,并且任何其他用户或组都无法写入。 chroot 之后,sshd(8) 将工作目录更改为用户的主目录。
也就是说,首先sshd
执行chroot
(在我们的例子中chroot /var/jail
),然后sshd
将目录更改为用户的主目录(在我们的例子中cd /home/test
- 在 chrooted 环境中cd /var/jail/home/test
不起作用)。
如果您使用的是 Debian/Ubuntu(因为您提到的教程是针对 Debian 的),您可能需要创建一个名为/var/jail/etc/debian_chroot
“chroot”的文件,它将出现在用户提示符中的括号中,如下所示:(chroot)test@servername:~$
。
/var/jail
(我在我的 Ubuntu 12.04 上复制了您的配置,从用户测试的条目中删除后它就可以正常工作了/etc/passwd
。)