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 拥有,并且不能是组可写的,因此为每个用户创建一个子目录,例如uploads或home/$username由适当的用户拥有(如果匹配他们的主目录,它将是连接时的默认工作目录) . 我也设置/bin/false为用户的shell。
例如,用户可以上传单个文件:
sftp username@hostname <<< 'put filename.ext uploads/'
Run Code Online (Sandbox Code Playgroud)
(希望 scp 很快会被修改为使用 sftp,所以这会变得更容易)
检查 rssh,这是一个允许 sftp 但拒绝 ssh 的假 shell
关于 RSSH 的更多信息
http://www.pizzashack.org/rssh/
转速
http://pkgs.repoforge.org/rssh/
您可以配置 rssh 以允许/拒绝不同的行为,例如 sft、scp 等。