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


36

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

Answers:


29

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以获取更多信息。


2
请注意,以“匹配用户testuser”开头的部分必须位于文件的末尾,因为只有从那时起用户为“ testuser”时,它将包括配置行。
Magnus 2012年

1
也可以仅针对SFTP协议使用Chroot,但仍然允许正常的SCP连接吗?
lanoxx

1
在我的Ubuntu 14.04的机器,它也有必要更改Subsystem sftp /usr/lib/openssh/sftp-server线路Subsystem sftp internal-sftp -f AUTH -l VERBOSE
partofthething

@Magnus或直到另一Match部分。
roaima

12

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

Rssh附带了有关设置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用于记录日志的套接字(并且您需要告诉syslog守护程序在该套接字上进行侦听)

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


7

你可能想看看scponly(或最近RSSH); 它实际上是一个登录Shell,只能用于启动scp或sftpd子系统。在该scponlyc变体中,它在激活所涉及的子系统之前执行chroot。


至少在Ubuntu中,scponly似乎已被弃用
tobixen 16'Aug
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.