Данная статья применима к:
- Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6)
- Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.5)
- Astra Linux Special Edition РУСБ.10015-16 исп. 1
Запуск клиентской службы Baculа с привилегией PARSEC_CAP_UNSAFE_SETXATTR
Для того, чтобы клиентская служба Bacula (в терминологии Bacula - FileDaemon) могла при восстановлении объектов файловой системы (файлов, каталогов) правильно восстановить мандатные атрибуты этих объектов, нужно предоставить этой службе специальную Парсек-привилегию PARSEC_CAP_UNSAFE_SETXATTR (код привилегии 0x1000), позволяющую устанавливать мандатные атрибуты объектов без учета мандатных атрибутов объекта-контейнера. Эта привилегия специально предназначена для обеспечения возможности восстановления файловых объектов, так как в процессе восстановления могут возникать временные ситуации нарушения мандатных ограничений.
При использовании командной строки для применения этой привилегии можно использовать команду execaps (подробнее см. в статье Архивирование и восстановление файлов с сохранением мандатных атрибутов, а также в документации).
Так как клиентская служба резервного копирования/восстановления bacula не вызывается из командной строки, а запускается как системная служба, для того, чтобы она получала необходимую привилегию PARSEC_CAP_UNSAFE_SETXATTR при запуске, нужно внести изменения в юнит (файл запуска этой службы), а именно изменить в файле запуска службы /etc/init.d/bacula-fd строчку :
start-stop-daemon -c "$DAEMONUSER" --start
на строчку
Сделать это можно с помощью текстового редактора, или командой:
После внесения изменений не забудьте перезапустить службу:
Действия при восстановлении
Сделать это можно, например, непосредственно перед началом восстановления подключившись к компьютеру, на котором выполняется восстановление, через SSH, и выполнив команду:
Данное разрешение будет действовать до перезагрузки компьютера, однако рекомендуется отозвать разрешение немедленно после завершения восстановления, записав ноль в файл /parsecfs/unsecure_setxattr:
sudo touch /etc/bacula/scripts/before_restore /etc/bacula/scripts/after_restore
sudo chmod +x /etc/bacula/scripts/before_restore /etc/bacula/scripts/after_restore
Пример сценариев:
#!/bin/bash echo 1 | sudo tee /parsecfs/unsecure_setxattr
#!/bin/bash echo 0 | sudo tee /parsecfs/unsecure_setxattr
Вызов сценариев указать в конфигурации Заданий /etc/bacula/job.d/restore-dir-fd.conf, задав имена файлов сценариев параметрами ClientRunBeforeJob и ClientRunAfterJob (обычно эти параметры заданы по умолчанию):
Job { # Имя задания Name = "RestoreFiles" # Тип задания (backup, restore и т.д.) Type = Restore # Клиент на который нужно восстановить файлы Client=dir-fd # Набор восстанавливаемых файлов FileSet="Full Set" # Исполняемый скрипт до разархивирования ClientRunBeforeJob = "/etc/bacula/scripts/before_restore" # Исполняемый скрипт после разархивирования ClientRunAfterJob = "/etc/bacula/scripts/after_restore" # Хранилище где лежит бекап клиента Storage = stor-sd # Пул томов где лежит бекап клиента Pool = File # Поведение уведомлений Messages = Standard # Куда на клиенте восстанавливать файлы Where = /restore }