Я хотел бы выполнить инкрементное резервное копирование (для всей файловой системы) с машины. rsync
делает это вполне возможно, однако я хотел бы также сохранить право собственности на файл, то есть сделать возможным его восстановление.
Можно ли обойтись без бега rsync
как root на целевой машине (хранение резервных копий)?
Некоторые идеи...
chown
для пользователя без полномочий root? (Я думаю, это, вероятно, должно быть noexec
запретить возвышение.)tar
может хранить права собственности на файлы, хотя заставить его работать с rsync или инкрементным резервным копированием было бы немного сложнее. Также было бы неплохо иметь возможность просматривать резервные копии как обычную файловую систему.Как указано в других ответах, для непосредственного сохранения информации о владельце вам нужен root-доступ к целевой машине.
Однако у вас было как минимум два обходных пути, чтобы избежать корневого доступа при сохранении права собственности:
--fake-super
параметр rsync. На странице руководства:Когда эта опция включена, rsync имитирует действия суперпользователя, сохраняя / восстанавливая привилегированные атрибуты с помощью специальных расширенных атрибутов, которые прикрепляются к каждому файлу (по мере необходимости).
Это означает, что право собственности не сохраняется непосредственно в классическом стиле Unix, а информация о владельце хранится внутри специального расширенного атрибута (например, своего рода «тега», прикрепленного к файлу). При восстановлении rsync
может использовать этот тег EA / для правильного восстановления исходного владельца файла.
getfacl
утилита. Например, выдавая getfacl -R MNTPOINT > acls.txt
вы эффективно сохраняете информацию о владельце (и ACL) в текстовом файле, который впоследствии можно использовать для восстановления такой информации с помощью setfacl --restore
команда.На вашем месте я бы поместил резервные копии на том в контейнере Docker. Таким образом, вы можете установить для него хорошие ограничения и избежать угроз безопасности, но при этом запустить его как root, чтобы он делал то, что ему нужно.
Вместо того, чтобы копировать все файлы по одному, как это делает rsync, вам следует подумать о помещении файлов в какой-то «контейнер», который позволяет вам упаковать все файлы, транспортировать их и никогда не потерять метаданные.
Вы считали «деготь»? Я знаю, что tar является противоположностью rsync: он не инкрементный, он никуда не передает данные и т. Д.
Однако он действительно хорош для сохранения прав собственности, разрешений, списков контроля доступа, времени модификации и т. Д. Вы можете создать tar-файл, скопировать его на машину, которая даже не понимает способ выполнения файловых разрешений в Unix (например, Windows, TOPS-20, VAX / VMS), затем скопировать его обратно на хост Unix, распаковать его, и вы получаете все разрешения и т. д., которые у него были изначально.
Существует файловая система FUSE, которая монтировать (только для чтения) файлы tar.
Конечно, вы теряете инкрементные копии и другие функции, которые делают rsync таким отличным инструментом. Однако мир Unix использовал tar более 20 лет, прежде чем был изобретен rsync, и он действительно хорошо работает в определенных ситуациях.
Очевидно, что для получения «корневых» файлов из места назначения вам потребуется root-доступ. Однако есть много способов испортить вашу систему.
1) Вы можете разрешить rsync использовать sudo без пароля 2) Вы можете использовать setuid для rsync, чтобы он мог получить доступ к корневым файлам, в то время как оркестратор резервного копирования является обычным пользователем, а не корневым. 3) используйте rssh, чтобы ограничить риски безопасности всего вышеперечисленного