【发布时间】:2015-04-25 08:23:52
【问题描述】:
我的目标是让这些事情发挥作用:
- 用户可以通过 sftp 连接到服务器。他只能从他的主目录中读取内容(因此,他可以使用 sftp user@host)
- 用户可以连接到服务器并打开一个远程端口进行端口转发(因此,他可以使用ssh -R remote_port:localhost:port user@host)
- 除了这两件事之外,用户可以不能做任何事情。他不应该有正常的 shell 访问权限,也不应该能够运行命令。
我可以让任何一种情况都起作用,但不能同时使用两种情况。
我的 /etc/sshd_config 是:
Match Group restricted
ChrootDirectory /home/restricted/users
AllowAgentForwarding no
X11Forwarding no
AllowTcpForwarding yes
ForceCommand internal-sftp
显然这是 sftp 的工作案例。使用这种配置,是不可能打开远程端口进行端口转发的。
我目前允许 tcp 转发的唯一方法是禁用 ForceCommand 和 ChrootDirectory 指令。
另外,我必须将 shell 更改为 /bin/bash 以允许端口转发。
我的理想情况是:
- /bin/false(或等效)作为 shell
- chroot 到主目录
- sftp 有效
- 端口转发工作
- 其他方法都行不通
这可能吗?如果是这样,我需要做什么?
提前致谢。
【问题讨论】:
-
这个网站是编程问题,不是服务器配置。
-
您可以在使用 Paramiko 或类似库编写的自定义 SSH 服务器中实现此功能。您在此开发工作中遇到的问题可能是这里的主题。 :)
-
(具体是 Python 版本的 Paramiko;Java 端口不支持 SFTP 服务器)。
-
...也就是说,从最终用户配置的角度来看,您是否尝试过在客户端使用
ssh -N,以避免请求 shell(这显然是在此配置中不允许)?请注意,我还没有查看源代码以查看这是否可能,但它更有可能起作用。 :) -
哇,我花了好几个小时试图找到正确的服务器配置,而我所要做的只是添加一个 -N。感觉有点尴尬 ;) 感谢 Charles Duffy 的帮助。
标签: linux ssh sftp portforwarding chroot