You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于Apache Mina SSHD实现只读VirtualFileSystemFactory?

为Apache Mina SSHD实现只读SFTP虚拟文件系统

要实现只读的VirtualFileSystemFactory,核心是在创建文件系统时拦截所有写操作。你的现有代码仅完成了用户根目录映射,未做只读限制,以下是改造方案:

改造思路

  • 利用Apache Mina SSHD内置的ReadOnlyDelegateFileSystem包装基础文件系统,自动拦截写操作(推荐)
  • 若需更细粒度控制,可自定义FileSystem实现,重写所有涉及修改的方法并抛出异常

完整实现代码

VirtualFileSystemFactory virtualFileSystemFactory = new VirtualFileSystemFactory() {
    @Override
    public FileSystem createFileSystem(Session session) throws IOException {
        String username = session.getUsername();
        Path dir = Paths.get("c:\\data\\");
        if (dir == null) {
            throw new InvalidPathException(username, "无法解析主目录");
        }
        // 创建基础根目录文件系统
        FileSystem baseFileSystem = new RootedFileSystemProvider().newFileSystem(dir, Collections.emptyMap());
        // 包装为只读文件系统,自动拦截所有写操作
        return new ReadOnlyDelegateFileSystem(baseFileSystem);
    }
};

// 为SFTP服务器设置只读文件系统工厂
sshd.setFileSystemFactory(virtualFileSystemFactory);

关键说明

  • ReadOnlyDelegateFileSystem会自动拦截创建文件/目录、修改、删除、重命名等所有写操作,抛出ReadOnlyFileSystemException
  • 该类在Mina SSHD 2.0及以上版本中提供,确保依赖版本符合要求
  • 若需允许特定路径的写操作,可自定义FileSystem实现,针对性重写允许修改的方法

内容的提问来源于stack exchange,提问作者Thanasis B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 19:05:21