Вопрос или проблема
Я использую скрипт-обертку для rsync, чтобы синхронизировать или делать резервные копии из/в различные директории на разных серверах. Скрипт вызывает rsync
(очевидно), а в некоторых конфигурациях – ln
на сервере.
Ограничение доступа по SSH с помощью параметра command
в authorized_keys
для одного ключа с rrsync
(как рекомендуется здесь) или применение chroot
для пользователя на серверах нецелесообразно, так как мне необходимо иметь доступ (чтение или запись) к директориям в множестве различных мест. Использование скрипта-обертки для оценки $SSH_ORIGINAL_COMMAND
(как предложено здесь) позволило бы делать статические вызовы к rsync
и ln
, но не ко всем различным параметрам rsync
, создаваемым моим локальным скриптом.
Существует ли другой способ ограничить доступ в таких обстоятельствах?
Ответ или решение
Чтобы ограничить доступ SSH для вашего скрипта оболочки rsync
, при этом обеспечивая необходимую функциональность, вы можете рассмотреть несколько подходов, сочетая различные меры безопасности.
Подходы к ограничению доступа SSH для rsync
-
Использование
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
перед его выполнением. -
Вход через отдельного пользователя:
Создайте отдельного пользователя для доступа через SSH, предназначенного только для выполнения вашей оберткиrsync
. Вы можете запретить вход через обычные средства, например, разрешить доступ только через ключи SSH. -
Проверка параметров и директорий:
Ваша оберткаrsync
может включать проверку передаваемых параметров и целевых директорий. Используйте черные и белые списки для допустимых параметров и директорий. Это можно сделать с помощью простых условий в скрипте:#!/bin/bash # Пример проверки if [[ "$1" == "--some-safe-option" ]]; then rsync "$@" else echo "Недостаточные разрешения для выполнения этой команды." exit 1 fi
-
Использование
sudo
:
С помощьюsudo
вы можете разрешить выполнениеrsync
и других команд, но настроить его так, чтобы пользователь мог запускать только фиксированные команды с ограниченными параметрами. Для этого добавьте соответствующие настройки в файл/etc/sudoers
. -
Мониторинг и аудит:
Настройте систему аудита (например, с помощьюauditd
или логирования черезrsync
), чтобы отслеживать, какие команды выполняются. Это позволит вам быстро выявить любые несоответствия в поведении. -
Использование
AppArmor
илиSELinux
:
Эти системы безопасности могут ограничивать исполнение конкретных программ, а также доступ к файлам и ресурсам. Таким образом, вы можете установить правила, которые ограничивают деятельность вашего пользователя либо оберткиrsync
, не допуская их к нежелательным ресурсам. -
Использование скриптов на стороне клиента:
Разработайте клиентский скрипт, который генерирует необходимые командыrsync
и проверяет допустимость параметров, прежде чем передавать их на сервер. Это позволит вам лучше контролировать, что именно отправляется на сервер.
Заключение
Использование различных методов в комбинации обеспечит надежное ограничение доступа SSH и контроль над использованием rsync
. Самым важным аспектом является тщательная проверка вводимых параметров и максимально осторожное конфигурирование разрешений. Это позволит сохранить удобство в использовании скрипта, не жертвуя при этом безопасностью.