it-swarm.cn

将SSH / SCP / SFTP用户限制为目录

有没有一种简单的方法可以将SCP/SFTP用户限制为目录?我遇到的所有方法都要求我通过复制二进制文件来设置chroot监狱,但我认为这不是必需的。

37
user4518

SSH支持以本地方式将SFTP用户chroot。您只需要提供

Chroot目录

在您的sshd配置文件中,然后重新启动sshd。

如果您只是在做sftp,那么您无需做任何其他事情。不幸的是,这不适用于scp。对于交互式Shell,您将需要将二进制文件和/ dev节点复制到chroot中。

仅针对单个用户testuser的示例配置:

Match User testuser
    ChrootDirectory /home/testuser
    ForceCommand internal-sftp

Sshd_config手册页中需要注意的几件事:

路径名的所有组件都必须是任何其他用户或组均不可写的
根目录。 chroot之后,sshd(8)将
工作目录更改为用户的主目录。

在man sshd_config中搜索ChrootDirectory以获取更多信息。

30
gabe.

Chroot是一种相当简单的方法。由于操作系统已经具有此安全功能,因此守护程序编写者倾向于不尝试重新实现它。

Rssh 随附有关设置chroot监狱的指南。它位于源代码分发的 CHROOT 文件中。简而言之,您需要具备:

  • 从根目录复制的一些二进制文件:/usr/bin/scp/usr/libexec/openssh/sftp-server/usr/bin/rssh_chroot_helper
  • 库({/usr,}/lib/lib*.so.[0-9]),同样复制
  • 一个 /etc/passwd(可能不是副本,而是源自母版)
  • 一些设备:/dev/null/dev/tty,还有/dev/log套接字进行记录(并且您需要告诉syslog守护程序在该套接字上进行侦听)

Rssh文档中未提供的其他提示:如果需要在chroot监狱中访问某些文件,则可以使用 bindfs 或Linux的mount --bind从监狱外部进行其他目录层次结构。 bindfs允许重新安装的目录具有更多限制权限,例如只读。 (mount --bind除非您应用内核补丁,否则不会;自Debian东部以来,Debian便已包含此补丁,但截至2011年,大多数其他发行版都没有。)

12

您可能希望查看 scponly (或更近期的版本是 rssh );它实际上是一个登录Shell,可以only用于启动scp或sftpd子系统。在scponlyc变体中,它在激活所涉及的子系统之前执行chroot。

7
Shadur