我正在为一些朋友和小客户创办一家小型托管公司,没什么大不了的。
我想让我的“客户”有权管理服务器上的文件。我讨厌 FTP,因为它不安全,而且在我看来已经过时了。
因此,我想允许我的用户通过 SFTP 连接,但不允许他们通过 SSH 连接。(我知道,我知道,SFTP 使用 SSH)。但我只是想知道,这可能吗?
所以我不需要在服务器上安装 FTP 服务,一切都会很棒!
答案1
从 4.9 版开始,OpenSSH(在 centos 5.x 中不可用,但 ChrootDirectory 功能已反向移植)有一个internal-sftp
子系统:
Subsystem sftp internal-sftp
然后阻止其他用途:
Match group sftponly
ChrootDirectory /upload
X11Forwarding no
AllowTcpForwarding no
AllowAgentForwarding no
ForceCommand internal-sftp -d /%u
将您的用户添加到sftponly
组中。chroot 目录必须由 root 拥有,并且不能是组可写的,因此请为每个用户创建一个由相应用户拥有的子目录(如果您匹配他们的主目录,它将是连接时的默认工作目录)。我还将其设置/bin/false
为用户的 shell。
例如,用户可以使用以下命令上传单个文件:
sftp username@hostname <<< 'put filename.ext /'
(希望 scp 能很快被修改为使用 sftp,这样会变得更容易)
答案2
有一个壳scponly这是什么?它可以chroot也。
答案3
检查 rssh,这是一个允许 sftp 但拒绝 ssh 的假 shell
有关 RSSH 的更多信息
http://www.pizzashack.org/rssh/
转速
http://pkgs.repoforge.org/rssh/
您可以配置 rssh 来允许/拒绝不同的行为,如 sft、scp 等。
答案4
我使用上面提到的指定用户 shell 为 /bin/false 的方法。但是,您必须确保 /bin/shell 在 /etc/shells 中。然后它才能正常工作 ssh=no ftp=ok。
我还使用 vsftpd 并将此
chroot_local_user=YES 添加到 /etc/vsftpd/vsftpd.conf,以便 ftp-ers 看不到他们自己的日期以外的日期。
这些简单更改的优点是不需要为每个用户进行烦人的 ssh 配置。