我正在尝试使用 chroot 设置一个可以通过 ssh 登录并限制对目录的访问的用户/var/www
。该服务器位于运行 Amazon Linux 64 位的 AWS 上,安装了 openssh。我使用 ssh-keygen 生成密钥。
在我编辑sshd_config
文件之前,我能够使用用户名和私钥登录,用户从/home/my-username
目录中启动,因此密钥是有效的。
我修改了sshd_config
文件如下:
Subsystem sftp internal-sftp
Match User my-username
ChrootDirectory /var/www
ForceCommand internal-sftp
AllowTcpForwarding no
PermitTunnel no
X11Forwarding no
然后我重新启动了 sshd。
由 root:root所有ChrootDirectory /var/www
,并且没有任何组对树中的该点具有写权限 - 默认 Apache 安装。
当我使用我的用户名和密钥登录时,会话立即断开。我检查/var/log/secure
并找到此条目:
Nov 3 19:53:51 ip-xxx.xxx.xxx.xxx sshd[2945]: Accepted publickey for my-username from xxx.xxx.xxx.xxx port 61821 ssh2
Nov 3 19:53:51 ip-xxx.xxx.xxx.xxx sshd[2945]: pam_unix(sshd:session): session opened for user my-username by (uid=0)
Nov 3 19:53:51 ip-xxx.xxx.xxx.xxx sshd[2945]: pam_unix(sshd:session): session closed for user my-username
我在许多论坛上阅读了大量帖子,看到了不同的解决方案——其中一些我试过但没有成功。我想让它尽可能简单。目标是为只需要使用 WinSCP 将文件上传到 Web 服务器的开发人员创建一个用户帐户,默认情况下是/var/www/html
。
我找到了这个帖子 –用户在 chrooted SSH 上连接成功后立即断开连接- 但不确定它是否与我的问题直接相关。
我想这可能与我的 PAM 配置有关。同样,这几乎是默认安装。
提前感谢您提供的任何指导。
答案1
Chroot 环境要求存在正常运行所需的所有库和二进制文件。这包括登录 shell 链接到的所有共享对象文件。如果您将其他命令二进制文件复制到此 chroot,您还需要它们的链接器依赖项。
- 查找有关如何为 ssh 登录设置 chroot 环境的指南。我通过 Google 找到的示例:http://allanfeid.com/content/creating-chroot-jail-ssh-access)
- 考虑一下你是否真的想在 /var/www 中创建这个 chroot 环境。真的想要
/var/www/dev
、、/var/www/lib
等等?