Синхронизация по ssh с ограниченным доступом к файловой системе сервера
Я хочу синхронизировать (в обоих направлениях) определенную папку между сервером (S) и локальной машиной (L). На S и L у меня одна и та же система (Ubuntu) и пользователь jan с привилегиями sudo (т.е. в группе администраторов). Доступ SSH к S возможен только с авторизацией ключа.
Я решил, что могу использовать unison
за это. И я создал новую пару ключей с пустым паролем. Проблема в том, что я не хочу разрешать неограниченный доступ к этому ключу без пароля.
(РЕДАКТИРОВАТЬ: я хочу (например) различать различные авторизованные ключи SSH для одного и того же пользователя - и в одном случае ограничить доступ только к одному каталогу и, если возможно, только для выполнения определенной команды - как в случае с rrsync ниже.)
Я мог бы использовать rsync
, Имеет серверный скрипт rrsync
и вы можете ограничить доступ к ключу в authorized_keys
файл:
command="$HOME/bin/rrsync -ro /home/jan/sync_folder/".
Но rsync
не может обрабатывать удаленные файлы и т. д.
Другой вариант - установить chroot-тюрьму на сервере, но мне все еще нужно иметь возможность свободного доступа к серверу с помощью моего первого ключа.
Я мог бы создать новую учетную запись пользователя, с помощью которой будет выполняться синхронизация (и применить chroot jail +, не входящий в группу администраторов), но тогда я потеряю мета-информацию о файлах (владение, разрешения). Все файлы принадлежат только одному пользователю (поэтому владение не является проблемой), но некоторые файлы являются исполняемыми скриптами, а некоторые нет.
Любые идеи, как синхронизировать папки, сохраняя при этом доступ? У меня нет предпочтений в инструменте. Те, что выше, это то, что я нашел после некоторого изучения.
2 ответа
Почему rsync не должен обрабатывать удаленные файлы? -delete должен делать именно это.
На самом деле есть вопрос без командных ключей на ask-ubuntu
Это должен быть комментарий, но это немного долго.
Вам нужно лучше определить свою проблему, прежде чем вы получите разумный ответ (а не догадки).
Если набор файлов включает в себя файлы, принадлежащие разным пользователям, то сторона для записи должна работать от имени пользователя root. Это не требует, чтобы канал работал от имени пользователя root. Путаница с rsync возникает из-за необходимости поддерживать как удаление файлов, так и двунаправленную синхронизацию. Если файл существует в узле "A", но не в узле "B", означает ли это, что он был удален в узле "B" или недавно был создан в узле "A" - ничего, что не сохраняет состояния между вызовами, не может сказать.
Нет конца средств, которые вы можете использовать для репликации файлов - drbd с зеркалированием на локальный физический диск, файловые системы ssh, файловая система Andrew и многие другие. Возможно, ваш выбор unison вместо ssh является произвольным ограничением. Хотя, если бы вы просто спросили, какие есть варианты для зеркального отображения файловой системы на хостах, ваш вопрос, скорее всего, будет закрыт как "слишком широкий".
Я не хочу разрешать неограниченный доступ к этому ключу без пароля
Что вы подразумеваете под "неограниченным доступом"? Как указано выше, конец записи должен запускаться с правами root. Вы пытаетесь ограничить то, что root может делать в системе Unix? Это возможно - но очень сложно.