Page tree

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents


Info

Данная статья применима к:

  • 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

Info
В ОС Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6) функционал предоставления привилегии PARSEC_CAP_UNSAFE_SETXATTR системной службе FileDaemon реализован "из коробки", однако включать и выключать действие привилегии всё равно нужно с помощью записи единицы в файл /parsecfs/unsecure_setxattr по описанной ниже процедуре.

Для того, чтобы клиентская служба Bacula (в терминологии Bacula - FileDaemon) могла при восстановлении объектов файловой системы (файлов, каталогов)  правильно восстановить мандатные атрибуты этих объектов, нужно предоставить этой службе специальную Парсек-привилегию PARSEC_CAP_UNSAFE_SETXATTR (код привилегии 0x1000), позволяющую устанавливать мандатные атрибуты объектов без учета мандатных атрибутов объекта-контейнера. Эта привилегия специально предназначена для обеспечения возможности восстановления файловых объектов, так как в процессе восстановления могут возникать временные ситуации нарушения мандатных ограничений.

При использовании командной строки для применения этой привилегии можно использовать команду execaps (подробнее см. в статье Архивирование и восстановление файлов с сохранением мандатных атрибутов, а также в документации).

Так как клиентская служба резервного копирования/восстановления bacula не вызывается из командной строки, а запускается как системная служба, для того, чтобы она получала необходимую привилегию PARSEC_CAP_UNSAFE_SETXATTR при запуске, нужно внести изменения в юнит (файл запуска этой службы), а именно изменить в файле запуска службы /etc/init.d/bacula-fd строчку :

Info

start-stop-daemon -c "$DAEMONUSER" --start

на строчку

Info
execaps -c 0x1000 -- start-stop-daemon -c "$DAEMONUSER" --start

Сделать это можно с помощью текстового редактора, или командой:

Command
sudo sed -i -e 's/start-stop-daemon -c "$DAEMONUSER" --start/execaps -c 0x1000 -- start-stop-daemon -c "$DAEMONUSER" --start/g' /etc/init.d/bacula-fd


Note

После внесения изменений не забудьте перезапустить службу:

Command
sudo service bacula-fd restart


Действия при восстановлении

Warning
Чтобы предоставленная привилегия  PARSEC_CAP_UNSAFE_SETXATTR вступила в силу, необходимо отдельно разрешить её действие, записав единицу в файл /parsecfs/unsecure_setxattr.

Сделать это можно, например, непосредственно перед началом восстановления подключившись к компьютеру, на котором выполняется восстановление, через SSH, и выполнив команду:

Command

echo 1 | sudo tee /parsecfs/unsecure_setxattr

Данное разрешение будет действовать до перезагрузки компьютера, однако рекомендуется отозвать разрешение немедленно после завершения восстановления, записав ноль в файл /parsecfs/unsecure_setxattr:

Command

echo 0 | sudo tee /parsecfs/unsecure_setxattr

Для автоматизации включения и выключения действия привилении можно использовать сценарии, автоматически вызываемые до и после выполнения операций Bacula. По умолчанию эти сценарии находятся в файлах/etc/bacula/scripts/before_restore и /etc/bacula/scripts/after_restore. Если таких файлов нет, то создать их и сделать исполнимыми:

Command

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

Пример сценариев:

Code Block
languagebash
title/etc/bacula/scripts/before_restore
#!/bin/bash
echo 1 | sudo tee /parsecfs/unsecure_setxattr


Code Block
languagebash
title/etc/bacula/scripts/after_restore
#!/bin/bash
echo 0 | sudo tee /parsecfs/unsecure_setxattr
sudo chmod +x /etc/bacula/scripts/before_restore sudo chmod +x /etc/bacula/scripts/after_restore

Разрешить выполнение сценариев:

Command
sudo chmod +x /etc/bacula/scripts/before_restore
sudo chmod +x /etc/bacula/scripts/after_restore

Вызов сценариев указать в конфигурации Заданий /etc/bacula/job.d/restore-dir-fd.conf, задав имена файлов сценариев параметрами ClientRunBeforeJob и ClientRunAfterJob (обычно эти параметры заданы по умолчанию):
Code Block
 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
}