我如何限制通过 ssh 上传某些文件扩展名?

我如何限制通过 ssh 上传某些文件扩展名?

如何通过 SSH 限制某些文件扩展名和文件上传大小?

我正在使用 Ubuntu 12.10 默认安装和 Open-ssh 服务器。

答案1

OpenSSH 本身不具备这些功能,但你可以部分地使用商业产品(想到了 CrushFTP、Linoma 或 Barracuda)来做到这一点。

如果您想要对上传应用内容过滤,您可以使用 OpenSSH 来执行此操作,通过允许用户上传到传入假脱机,并定期扫描和将批准的内容移动到传出假脱机,这也适用于 A/V 扫描。incron应该可以解决这个问题。如果你的目的是节省带宽、文件大小,那么它对于基于大小的上传来说就不起作用了作为 scp 协议的一部分,这需要客户端提供建议,但不一定尊重文件大小。


更新:由于 OpenSSH 允许将 sftp 服务器委托给外部进程(通过Subsystemsshd_config,因此您可以实现自己的 SFTP 服务器。perlNet::SFTP:SftpServer模块是一个完整的实现,并且文档有一个工作示例(确保安装所有依赖项,正确设置 syslog 以便它记录,ARGV如果不将此脚本设为用户的 shell,则删除测试)。

它具有可配置的最大文件大小设置,并支持文件传输事件的回调函数,允许您检查文件名(和内容)——尽管回调仅被调用完成移交。

您可以简单地修补该makeSafeFileName()函数以SftpServer.pm添加您的文件名条件,它已经有一个(可配置的)用于有效文件名的正则表达式测试(但请注意,这适用于包括目录在内的所有名称);或者,在处理文件打开的$filename函数中添加一个额外的测试processOpen()(可能更好)。

您可以使用 全局启用它sshd_configSubsystem sftp ...也可以通过ForceCommand为某个用户组选择性地使用它:

Match Group sftplimited
    ForceCommand /usr/local/bin/sftp-server.pl

相关内容