允许 SFTP 但不允许 SSH?

Tom*_* B. 104 linux centos ftp sftp

我正在为几个朋友和小客户创办一家很小的托管公司,没什么大不了的。

我想让我的“客户”有权管理他们在服务器上的文件。我讨厌 FTP,因为它不安全,而且在我看来已经过时了。

所以我想允许我的用户通过 SFTP 连接但不允许他们通过 SSH 连接。(我知道,我知道,SFTP 正在使用 SSH)。但我只是想知道,这可能吗?

所以我不必在服务器上安装 FTP 服务,一切都会很棒!

Rob*_*ers 140

从 4.9 版开始 OpenSSH(在 centos 5.x 中不可用,但 ChrootDirectory 功能被反向移植)有一个internal-sftp子系统:

Subsystem sftp internal-sftp
Run Code Online (Sandbox Code Playgroud)

然后阻止其他用途:

Match group sftponly
     ChrootDirectory /upload/%u
     X11Forwarding no
     AllowTcpForwarding no
     AllowAgentForwarding no
     ForceCommand internal-sftp
Run Code Online (Sandbox Code Playgroud)

将您的用户添加到sftponly组中。chroot 目录必须由 root 拥有,并且不能是组可写的,因此为每个用户创建一个子目录,例如uploadshome/$username由适当的用户拥有(如果匹配他们的主目录,它将是连接时的默认工作目录) . 我也设置/bin/false为用户的shell。

例如,用户可以上传单个文件:

sftp username@hostname <<< 'put filename.ext uploads/'
Run Code Online (Sandbox Code Playgroud)

(希望 scp 很快会被修改为使用 sftp,所以这会变得更容易)

  • 如果你想这样做并在你的 sshd_config 中找到一个已经存在“/usr/lib/openssh/sftp-server”的条目,请检查这里:http://serverfault.com/questions/660160/openssh-difference-between -internal-sftp-and-sftp-server -- internal-sftp 是“更新、更好、更容易” (3认同)

Sto*_*one 21

有一个shell scponly这是什么的。它也可以chroot

  • 这是一个很好的方法,但是 SourceForge 包自 2011 年以来就没有更新过 (2认同)
  • 现代 Debian 不再附带此 shell。应该使用 ssh (在另一个答案中有详细说明)。 (2认同)

Chr*_*ris 5

检查 rssh,这是一个允许 sftp 但拒绝 ssh 的假 shell

关于 RSSH 的更多信息

http://www.pizzashack.org/rssh/

转速

http://pkgs.repoforge.org/rssh/

您可以配置 rssh 以允许/拒绝不同的行为,例如 sft、scp 等。

  • `rssh` 现在似乎已经过时了(debian buster 中不再有这个包了),他们说,有 `rush` 代替它。我没有尝试过,我正在转向带有内部 sftp 的 openssh 。 (2认同)