Как сделать chroot для sftp-сервера в обёртке скрипта

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

Я уже использую оболочку для ограничения SSH пользователей только некоторыми командами, особенно для borg serve в целях резервного копирования.

Теперь я хотел добавить возможность использовать SFTP в chroot каталоге. Как я уже прочитал на Stack Overflow, я не могу использовать директиву Subsystem sftp internal-sftp в конфигурации sshd, потому что команда internal-sftp не распознается вне sshd (в оболочке).

Поэтому я попробовал использовать другую подсистему /usr/lib/openssh/sftp-server и добавил это как случай в мою оболочку следующим образом:

case "$SSH_ORIGINAL_COMMAND" in
    "/usr/lib/openssh/sftp-server")
        /usr/lib/openssh/sftp-server -d / -l VERBOSE

Это сработало мгновенно, без каких-либо ошибок. Но chroot отсутствует. Поэтому я подготовил каталоги chroot с необходимыми правами и монтированием в /etc, /bin, /lib, /lib64 и /usr.
Это не сработало. Прежде чем я, возможно, что-то испортил с окружением chroot, я решил протестировать это, используя chroot в /.

Выполнение этой команды вручную не вызывает ошибок, но также не дает вывода:
/usr/sbin/chroot / /usr/lib/openssh/sftp-server -d / -l VERBOSE

Я также изменил строку в оболочке на /usr/sbin/chroot / /usr/lib/openssh/sftp-server -d / -l VERBOSE, но соединение SFTP не работает.

На клиентской стороне я сразу получаю

Connection closed
Connection closed.

и никаких дополнительных логов.

Я не знаю, что попробовать дальше, чтобы это заработало…

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

Для того чтобы создать chroot окружение для sftp-server с использованием обертки (wrapper script), вам необходимо выполнить несколько шагов и убедиться, что вся структура chroot окружения правильно настроена. Вот пошаговая инструкция, как это сделать:

  1. Настройка chroot среды:
    Убедитесь, что у вас есть корректное chroot окружение с необходимыми директориями и файлами. Стандартное место, где хранятся скомпилированные бинарные файлы и библиотеки для sftp-server, включает:

    • bin/ — для бинарных файлов (например, bash, mkdir, и т.д.).
    • lib/ и lib64/ — для библиотек, необходимых для работы бинарных файлов.
    • etc/ — для конфигурационных файлов.
    • dev/ — для устройств, если это необходимо.

    Например:

    mkdir -p /path/to/chroot/{bin,etc,lib,lib64,usr/{bin,lib,lib64}}
    cp /usr/lib/openssh/sftp-server /path/to/chroot/usr/lib/openssh/
    cp /bin/bash /path/to/chroot/bin/ # если необходимо
    cp -r /lib/x86_64-linux-gnu/* /path/to/chroot/lib/ # копируйте необходимые библиотеки
    cp -r /lib64/* /path/to/chroot/lib64/
  2. Проверка прав доступа:
    Убедитесь, что директория chroot и все её родительские директории имеют правильные права доступа. Пользователь, который будет использовать chroot, должен иметь права доступа только на директорию chroot.

    chown root:root /path/to/chroot
    chmod 755 /path/to/chroot
  3. Изменение обертки (wrapper script):
    Измените ваш wrapper script так, чтобы он использовал команду chroot. Пример:

    case "$SSH_ORIGINAL_COMMAND" in
       "/usr/lib/openssh/sftp-server")
           exec /usr/sbin/chroot /path/to/chroot /usr/lib/openssh/sftp-server -d / -l VERBOSE
           ;;
       *)
           # Обработка других команд
           ;;
    esac

    Обратите внимание, что функция exec заменяет текущий процесс на новый, что предотвращает возможные проблемы с управлением PID.

  4. Проверка логов:
    Если после изменений оно все еще не работает, просмотрите логи SSH:

    tail -f /var/log/auth.log

    Это может дать информацию о том, что именно идет не так при попытке подключения.

  5. Тестирование:
    Попробуйте подключиться к серверу SFTP и посмотрите, работает ли ваш новый chroot подход. Убедитесь, что клиент использует правильный адрес и порт, и что у вас есть правильные учетные данные.

  6. Обработка ошибок:
    Если вы все еще сталкиваетесь с проблемами после выполнения этих шагов, попробуйте выключить SELinux или AppArmor (если они включены), чтобы исключить проблемы с безопасностью.

Эти шаги должны помочь вам правильно настроить chroot окружение для sftp-server. Если у вас есть специфические ошибки или дополнительные проблемы, сообщите об этом, и мы сможем рассмотреть их более детально.

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

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