Блокировка доступа по SSH для обертки скрипта rsync

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

Я использую скрипт-обертку для rsync, чтобы синхронизировать или делать резервные копии из/в различные директории на разных серверах. Скрипт вызывает rsync (очевидно), а в некоторых конфигурациях – ln на сервере.

Ограничение доступа по SSH с помощью параметра command в authorized_keys для одного ключа с rrsync (как рекомендуется здесь) или применение chroot для пользователя на серверах нецелесообразно, так как мне необходимо иметь доступ (чтение или запись) к директориям в множестве различных мест. Использование скрипта-обертки для оценки $SSH_ORIGINAL_COMMAND (как предложено здесь) позволило бы делать статические вызовы к rsync и ln, но не ко всем различным параметрам rsync, создаваемым моим локальным скриптом.

Существует ли другой способ ограничить доступ в таких обстоятельствах?

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

Чтобы ограничить доступ SSH для вашего скрипта оболочки rsync, при этом обеспечивая необходимую функциональность, вы можете рассмотреть несколько подходов, сочетая различные меры безопасности.

Подходы к ограничению доступа SSH для rsync

  1. Использование command в authorized_keys:
    Вы можете использовать параметр command в файле authorized_keys, чтобы ограничить допустимые команды для определенного SSH-ключа. Например, вы можете задать что-то вроде:

    command="/path/to/your/rsync_wrapper.sh",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAAB3Nza... ваш_ключ

    Ваш скрипт-обертка rsync_wrapper.sh может проверять значение переменной $SSH_ORIGINAL_COMMAND перед его выполнением.

  2. Вход через отдельного пользователя:
    Создайте отдельного пользователя для доступа через SSH, предназначенного только для выполнения вашей обертки rsync. Вы можете запретить вход через обычные средства, например, разрешить доступ только через ключи SSH.

  3. Проверка параметров и директорий:
    Ваша обертка rsync может включать проверку передаваемых параметров и целевых директорий. Используйте черные и белые списки для допустимых параметров и директорий. Это можно сделать с помощью простых условий в скрипте:

    #!/bin/bash
    
    # Пример проверки
    if [[ "$1" == "--some-safe-option" ]]; then
       rsync "$@"
    else
       echo "Недостаточные разрешения для выполнения этой команды."
       exit 1
    fi
  4. Использование sudo:
    С помощью sudo вы можете разрешить выполнение rsync и других команд, но настроить его так, чтобы пользователь мог запускать только фиксированные команды с ограниченными параметрами. Для этого добавьте соответствующие настройки в файл /etc/sudoers.

  5. Мониторинг и аудит:
    Настройте систему аудита (например, с помощью auditd или логирования через rsync), чтобы отслеживать, какие команды выполняются. Это позволит вам быстро выявить любые несоответствия в поведении.

  6. Использование AppArmor или SELinux:
    Эти системы безопасности могут ограничивать исполнение конкретных программ, а также доступ к файлам и ресурсам. Таким образом, вы можете установить правила, которые ограничивают деятельность вашего пользователя либо обертки rsync, не допуская их к нежелательным ресурсам.

  7. Использование скриптов на стороне клиента:
    Разработайте клиентский скрипт, который генерирует необходимые команды rsync и проверяет допустимость параметров, прежде чем передавать их на сервер. Это позволит вам лучше контролировать, что именно отправляется на сервер.

Заключение

Использование различных методов в комбинации обеспечит надежное ограничение доступа SSH и контроль над использованием rsync. Самым важным аспектом является тщательная проверка вводимых параметров и максимально осторожное конфигурирование разрешений. Это позволит сохранить удобство в использовании скрипта, не жертвуя при этом безопасностью.

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

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