Вопрос или проблема
Я осведомлён, что это безопасность через неясность, однако это делается в учебных целях и не будет доступно через Интернет. Это будет использоваться лишь как внутренний инструмент.
Я ознакомился с следующей ссылкой:
Как отключить 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. Существует несколько способов этого достичь:
-
Использование ForceCommand – этот метод позволяет принудительно запускать команды в зависимости от пользователя.
-
Создание пользовательского скрипта – это более гибкий метод, который позволяет управлять поведением при попытке подключения пользователя.
Пример скрипта для ограничения доступа к 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 будут блокироваться. Это решение удовлетворяет требованиям безопасности и управляемости для вашего внутреннего сервера, обеспечивая правильное разграничение доступа.
Если возникнут дополнительные вопросы или потребуется помощь в настройках, не стесняйтесь обращаться!