Apache Mina在Windows服务器上通过SSH限制用户

时间:2018-05-28 14:39:06

标签: java windows ssh chroot mina

下面基本上是Apache MINA服务器的代码。它很棒。当我与WinSCP连接时,我被限制在目录中并且无法返回,这很好。另一方面,当我连接SSH终端时,我可以返回和转发目录,我不想发生这种情况。

我知道这一行限制了WinSCP的用户:

sshd.setFileSystemFactory(
    (FileSystemFactory) new VirtualFileSystemFactory(new File("C:/my apps").toPath()));

使用的JAR版本(意识到版本之间存在很大差异):

  • 米纳核-2.0.7
  • sshd的核-1.7.0
  • SLF4J-API-1.7.25
  • SLF4J-JDK-1.7.25
SshServer sshd = SshServer.setUpDefaultServer();
sshd.setPort(8080);
sshd.setKeyPairProvider(new SimpleGeneratorHostKeyProvider(new File("hostkey.ser")));
sshd.setUserAuthFactories(userAuthFactories);

sshd.setCommandFactory(new ScpCommandFactory());
sshd.setSubsystemFactories(sftpCommandFactory);

sshd.setShellFactory(new ProcessShellFactory(new String[] { "cmd" }));
// "/bin/bash", "-i", "-l"

sshd.setFileSystemFactory(
    (FileSystemFactory) new VirtualFileSystemFactory(new File("C:/my apps").toPath()));

sshd.setPasswordAuthenticator(new PasswordAuthenticator() {
    @Override
    public boolean authenticate(String username, String password, ServerSession session) {
        if ((username.equals("username")) && (password.equals("password"))) {

            return true;
        }
        return false;
    }

});

sshd.start();
while (true);

我想知道是否有人遇到过这个并且已经在Java中完成了,因为我在API中找不到任何内容。

1 个答案:

答案 0 :(得分:0)

你必须实现一个完整的新shell(在你的情况下是cmd的替代品)来chroot shell中的用户。这几乎不可能。

在* nix系统上有用于chroot shell的现成工具。但似乎您的服务器在Windows上运行(cmd)。我不认为在Windows上有任何chrooting工具。我甚至无法想象它是可能的。

但是,为什么不设置用户权限以允许登录用户只漫游到您希望他/她的文件夹中?