Настройка SSH и SFTP с использованием sshd_config

Вопрос или проблема

Я осведомлён, что это безопасность через неясность, однако это делается в учебных целях и не будет доступно через Интернет. Это будет использоваться лишь как внутренний инструмент.

Я ознакомился с следующей ссылкой:
Как отключить sftp для некоторых пользователей, но оставить включённым ssh?

Проблема в том, что она не отвечает на мой вопрос, который описан ниже:

Я пытаюсь настроить виртуальный сервер, который позволяет одному пользователю подключаться к серверу с помощью sftp, а другому пользователю подключаться к серверу с помощью ssh.

Часть sftp работает и реализована путем принудительного использования internal-sftp в файле sshd_config, который будет показан далее в этом вопросе. Эта часть работает, так как она запрещает пользователю подключаться к серверу с помощью ssh и позволяет ему получить доступ только к sftp jail, который я создал.

Для другого пользователя, который должен иметь возможность получить доступ к Chroot jail только через ssh, я не уверен, как запретить доступ через sftp. Проблема в том, что я специально создал chroot jail для этого пользователя, чтобы предотвратить выполнение команд, таких как ls и cat, однако если пользователь подключается к серверу с помощью sftp, он может использовать эти команды.

Раздел в /etc/ssh/sshd_config выглядит следующим образом:

Match User test1
        ChrootDirectory /home/jail
        X11Forwarding no
        AllowTcpForwarding no

# Match Group sftpusers
Match User test2
        ChrootDirectory /sftp/guestuser
        ForceCommand internal-sftp
        AllowUsers test2

Я пытался добавить:

ForceCommand Subsystem sftp /bin/false или
ForceCommand sftp /bin/false или
Subsystem sftp /bin/false или
в
Match User test1

Однако ни одно из вышеуказанных дополнений не работает с sshd_config.

Итак, мой вопрос:

Есть ли способ предотвратить доступ пользователя1 к серверу через sftp?
Если нет, есть ли способ удалить определенные команды из sftp, такие как ls или cat?

Любая помощь будет очень ценна.

Самый простой способ – создать какой-то скрипт, который будет этим заниматься. Добавьте

Match User test1
  ForceCommand /path/to/your/script.sh

И ваш скрипт в основном будет выполнять всё, что пользователь хочет, если это не запрос на SFTP:

#!/bin/bash
if [[ "$SSH_ORIGINAL_COMMAND" =~ .*sftp-server.* ]]; then
   echo "SFTP не разрешен"
   exit 255;
else
   exec "$SSH_ORIGINAL_COMMAND"
fi

Ответ или решение

Настройка SSH и SFTP с использованием sshd_config

Для настройки SSH и SFTP на сервере можно использовать файл конфигурации sshd_config, который находится в каталоге /etc/ssh/. В вашем случае необходимо настроить доступ для двух пользователей: один должен иметь возможность подключения через SFTP, а другой — только через SSH. Давайте подробно рассмотрим, как это сделать.

Общая структура sshd_config

Файл sshd_config позволяет управлять настройками SSH-сервера. Рассмотрим вашу текущую конфигурацию и внесем необходимые изменения:

Match User test1
        ChrootDirectory /home/jail
        X11Forwarding no
        AllowTcpForwarding no

# Match Group sftpusers
Match User test2
        ChrootDirectory /sftp/guestuser
        ForceCommand internal-sftp
        AllowUsers test2

Шаг 1: Настройка пользователя для SFTP

Пользователь test2 сконфигурирован для доступа через SFTP в чётком каталоге, и это делается с помощью директив ForceCommand internal-sftp. Это правильно и будет работать как задумано.

Шаг 2: Отключение SFTP для пользователя SSH

Теперь необходимо отключить доступ к SFTP для пользователя test1, который должен подключаться только через SSH. Существует несколько способов этого достичь:

  1. Использование ForceCommand – этот метод позволяет принудительно запускать команды в зависимости от пользователя.

  2. Создание пользовательского скрипта – это более гибкий метод, который позволяет управлять поведением при попытке подключения пользователя.

Пример скрипта для ограничения доступа к SFTP

Создайте скрипт, который будет проверять, пытается ли пользователь запустить SFTP. Если это так, скрипт выводит сообщение об ошибке и завершает работу.

Пример скрипта (/path/to/your/script.sh):
#!/bin/bash
if [[ "$SSH_ORIGINAL_COMMAND" =~ .*sftp-server.* ]]; then
   echo "SFTP не разрешен"
   exit 255
else
   exec "$SSH_ORIGINAL_COMMAND"
fi
Настройка sshd_config

Далее обновите sshd_config следующим образом:

Match User test1
  ChrootDirectory /home/jail
  X11Forwarding no
  AllowTcpForwarding no
  ForceCommand /path/to/your/script.sh

Шаг 3: Перезапуск SSH сервера

После внесения изменений в sshd_config, необходимо перезапустить SSH-сервер для применения новых настроек:

sudo systemctl restart sshd

Заключение

Теперь у вас есть точная настройка для двух пользователей: test2 имеет доступ через SFTP в выделенный чёткий каталог, в то время как test1 может подключаться только через SSH, и любые попытки использования SFTP будут блокироваться. Это решение удовлетворяет требованиям безопасности и управляемости для вашего внутреннего сервера, обеспечивая правильное разграничение доступа.

Если возникнут дополнительные вопросы или потребуется помощь в настройках, не стесняйтесь обращаться!

Оцените материал
Добавить комментарий

Капча загружается...