将 SSH/SCP/SFTP 用户限制到某个目录

将 SSH/SCP/SFTP 用户限制到某个目录

有没有一种简单的方法来限制 SCP/SFTP 用户只能访问某个目录?我遇到的所有方法都要求我通过复制二进制文件来设置 chroot 监狱,但我认为这没有必要。

答案1

SSH 本机支持对 SFTP 用户进行 chroot。您只需提供

Chroot目录

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

如果你只是做sftp,那么你不需要再做任何事情。不幸的是,这对 scp 不起作用。对于交互式 shell,您需要将二进制文件和 /dev 节点复制到 chroot 中。

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

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

sshd_config 手册页中需要注意的一些事项:

    路径名的所有组成部分必须是 root 拥有的目录,而不是 root 拥有的目录
    可由任何其他用户或组写入。 chroot 后,sshd(8) 更改
    工作目录到用户的主目录。

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

答案2

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

远程连接附带了有关设置 chroot 监狱的指南。它位于CHROOT源分发中的文件。简而言之,您需要:

  • 从根复制的一些二进制文件:/usr/bin/scp, /usr/libexec/openssh/sftp-server,/usr/bin/rssh_chroot_helper
  • {/usr,}/lib/lib*.so.[0-9]他们使用的库( )同样被复制
  • A /etc/passwd(很可能不是复制品,而是源自母版)
  • 一些设备:/dev/null/dev/tty,还有一个/dev/log用于日志记录的套接字(您需要告诉您的系统日志守护进程侦听该套接字)

rssh 文档中没有的额外提示:如果您需要在 chroot 监狱中访问某些文件,您可以使用绑定文件系统或 Linuxmount --bind在 jail 外部创建额外的目录层次结构。bindfs允许重新挂载的目录具有更严格的权限,例如只读。(mount --bind除非您应用内核补丁;Debian 自 east lenny 以来就包含此补丁,但截至 2011 年大多数其他发行版还没有。)

答案3

您可能想看看斯波利(或者最近,RSSH);它本质上是一个登录 shell,可以仅有的用于启动 scp 或 sftpd 子系统。在scponlyc变体中,它在激活相关子系统之前执行 chroot。

相关内容