Apache Mina ограничивает пользователя через SSH на сервере Windows - PullRequest
0 голосов
/ 28 мая 2018

Ниже приведен код сервера Apache MINA.Работает отлично.Когда я соединяюсь с WinSCP, я ограничен каталогом и не могу вернуться, что хорошо.С другой стороны, когда я соединяюсь с терминалом SSH, я могу возвращаться и пересылать каталоги, чего я не хочу.

Я знаю, что эта строка ограничивает пользователя для WinSCP:

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

Используемые версии JAR (понимается, что между выпусками есть большие различия):

  • mina-core-2.0.7
  • sshd-core-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 голосов
/ 29 мая 2018

Вы должны будете реализовать полностью новую оболочку (в вашем случае замену cmd), чтобы также закрепить пользователя в оболочке.Это вряд ли возможно.

В * nix-системах есть готовые инструменты для chroot-оболочки.Но, похоже, ваш сервер работает под Windows (cmd).Я не думаю, что есть какие-либо инструменты для chroot на Windows.И я даже не могу себе представить, что это возможно.

Но почему бы вам просто не установить права доступа пользователей таким образом, чтобы разрешить вошедшему в систему пользователю перемещаться только по папкам, которые вы хотите, чтобы он / она сделал?

...