![我如何限制通过 ssh 上传某些文件扩展名?](https://linux22.com/image/734790/%E6%88%91%E5%A6%82%E4%BD%95%E9%99%90%E5%88%B6%E9%80%9A%E8%BF%87%20ssh%20%E4%B8%8A%E4%BC%A0%E6%9F%90%E4%BA%9B%E6%96%87%E4%BB%B6%E6%89%A9%E5%B1%95%E5%90%8D%EF%BC%9F.png)
如何通过 SSH 限制某些文件扩展名和文件上传大小?
我正在使用 Ubuntu 12.10 默认安装和 Open-ssh 服务器。
答案1
OpenSSH 本身不具备这些功能,但你可以部分地使用商业产品(想到了 CrushFTP、Linoma 或 Barracuda)来做到这一点。
如果您想要对上传应用内容过滤,您可以使用 OpenSSH 来执行此操作,通过允许用户上传到传入假脱机,并定期扫描和将批准的内容移动到传出假脱机,这也适用于 A/V 扫描。incron
应该可以解决这个问题。如果你的目的是节省带宽、文件大小,那么它对于基于大小的上传来说就不起作用了是作为 scp 协议的一部分,这需要客户端提供建议,但不一定尊重文件大小。
更新:由于 OpenSSH 允许将 sftp 服务器委托给外部进程(通过Subsystem
)sshd_config
,因此您可以实现自己的 SFTP 服务器。perlNet::SFTP:SftpServer
模块是一个完整的实现,并且文档有一个工作示例(确保安装所有依赖项,正确设置 syslog 以便它记录,ARGV
如果不将此脚本设为用户的 shell,则删除测试)。
它具有可配置的最大文件大小设置,并支持文件传输事件的回调函数,允许您检查文件名(和内容)——尽管回调仅被调用后完成移交。
您可以简单地修补该makeSafeFileName()
函数以SftpServer.pm
添加您的文件名条件,它已经有一个(可配置的)用于有效文件名的正则表达式测试(但请注意,这适用于包括目录在内的所有名称);或者,在处理文件打开的$filename
函数中添加一个额外的测试processOpen()
(可能更好)。
您可以使用 全局启用它sshd_config
,Subsystem sftp ...
也可以通过ForceCommand
为某个用户组选择性地使用它:
Match Group sftplimited
ForceCommand /usr/local/bin/sftp-server.pl