Назад | Перейти на главную страницу

Резервное копирование через моментальный снимок / клон ZFS с настроенными разрешениями файловой системы

Моментальные снимки ZFS отлично подходят для откатного резервного копирования. Скажем, у нас есть tank/home установлен на /home. Тогда простой zfs snapshot tank/home@TIMESTAMP предоставит резервную копию, доступную по адресу /home/.zfs/snapshot/TIMESTAMP. Однако возникает проблема, когда пользователь устанавливает слишком слабые разрешения для какого-либо файла и исправляет эту ошибку только после того, как был сделан снимок. Файл будет по-прежнему доступен для чтения не тем людям в моментальном снимке, и все, что может сделать пользователь, - это дождаться, пока моментальный снимок не будет уничтожен (что происходит через задание cron как часть схемы скользящего резервного копирования).

Простой chmod go-rwx /home/.zfs/snapshot/TIMESTAMP/* поможет, но снимки доступны только для чтения. Я пришел к следующему решению:

chmod o-rwx /home/.zfs/snapshot
zfs snapshot tank/home@snap-TIMESTAMP
zfs clone tank/home@snap-TIMESTAMP tank/clone-TIMESTAMP
zfs set mountpoint=/root/tmp tank/clone-TIMESTAMP
chmod go-rwx /root/tmp/*
zfs set readonly=on tank/clone-TIMESTAMP
zfs set mountpoint=/backup/TIMESTAMP tank/clone-TIMESTAMP

Теперь резервная копия доступна пользователям только для чтения по адресу /backup/TIMESTAMP, и у него есть измененные разрешения.

По крайней мере, одна проблема заключается в том, что разрешения на /home/.zfs/snapshot вернется к общему виду после перезагрузки. Можно ли изменить это поведение? Мы не можем уничтожить снимок, так как от него зависит клон.

Гораздо более простым решением, конечно же, является сохранение текущих разрешений для домашних каталогов, а затем запуск chmod go-rwx /home/*, сделайте снимок и, наконец, восстановите разрешения. Однако это приводит к ряду условий гонки.

Есть идеи получше?

Дополнение: Теперь я остановился на одном наборе данных на пользователя. Таким образом, у каждого пользователя есть свои снимки в ~/.zfs/snapshot. Это не стопроцентное решение. Если у пользователя есть 0701 в своем домашнем каталоге, например, чтобы сделать ~/public_html работают, то злоумышленник может прочитать файл в моментальном снимке, у которого были неправильные разрешения на момент создания снимка. Однако, по крайней мере, теперь пользователь может «отключить» в экстренной ситуации, сделав свой домашний каталог 0700.

Смена владельца и разрешений каждого ~/.zfs было бы лучшим решением, но такие изменения не сохраняются после перезагрузки. Соответствующие команды chowns и chmods могут быть запущены при запуске, но это необходимо реализовать осторожно, чтобы не создавать короткий период, в течение которого файлы все еще доступны.

В ZFS моментальные снимки неизменяемы: вы не можете изменить какие-либо свойства файла после того, как моментальный снимок был сделан.

Вы можете попробовать chmod каталог моментальных снимков (или каталог .zfs). Или, используя другой подход, вы можете установить snapdir=hidden