Введение
Bacula – пакет программ архитектуры «клиент-сервер» с открытым исходным кодом, предназначенный для создания резервных копий данных, находящихся на компьютерах с различными операционными системами, для восстановления и проверки хранящихся данных и имеющий модульную архитектуру, легко масштабируемый и может быть использован, как для небольшой локальной сети из нескольких компьютеров, так и для сети предприятия, состоящего из нескольких сотен компьютеров. Для передачи данных используется стек протоколов TCP/IP. Резервные копии создаются в собственном, полностью открытом формате.
Система состоит из пяти основных элементов:
1) Director Daemon (DD) – это центральный элемент системы, осуществляющий управление её остальными компонентами. В его задачи входит управление процессом резервирования/восстановления данных, обеспечение интерфейса управления для администраторов и многое другое. Говоря проще – это диспетчер, который инициирует все процессы и отслеживает ход их выполнения.
2) Storage Daemon (SD) – приложение, отвечающее за чтение/запись данных непосредственно на устройства хранения информации. Принимает управляющие команды от DD, а также резервируемые данные от/к File Daemon.
3) File Daemon (FD) – этот элемент ещё можно назвать Агентом. Ведь именно он работает в рамках операционной системы, данные которой необходимо резервировать. File Daemon выполняет всю рутину, осуществляя обращение к резервируемым файлам и их дальнейшую передачу к SD. Также на стороне FD выполняется защитное преобразование резервных копий, если это определено конфигурацией.
4) Bacula Console (BC) – интерфейс администратора системы. По своей сути, это командный интерпретатор для управления Bacula. Строго говоря, Bacula Console может быть расширена с помощью графических систем управления, которые, как правило, являются всего лишь надстройкой над BC. К таким системам можно отнести Tray Monitor и Bat. Первая устанавливается на компьютере администратора системы и осуществляет наблюдение за работой системы резервирования, а вторая обеспечивает возможность управления посредством графического интерфейса.
5) Bacula Catalog – база данных, в которой хранятся сведения обо всех зарезервированных файлах и их местонахождении в резервных копиях. Каталог необходим для обеспечения эффективной адресации к требуемым файлам. Поддерживаются MySql, PostgreSql и SqLite.
Такое структурное деление позволяет организовать очень гибкую систему резервирования, когда Storage Daemon разворачивается на выделенном сервере с несколькими устройствами хранения данных. Также Bacula Director может управлять несколькими экземплярами SD, обеспечивая резервирование части данных на одно устройство хранения, а части – на другое.
Bacula обеспечивает поддержку сохранения расширенных атрибутов каталогов и файлов и, при необходимости, их последующее восстановление.
Установка пакетов
Для работы директора Bacula требуются следующие пакеты:
- bacula-common-pgsql;
- bacula-director-pgsql;
- bacula-director;
- bacula-console;
- bacula-console-qt
Установить их можно командой:
Первоначальная настройка
Первоначально необходимо настроить СУБД PostgreSQL для того, чтобы Bacula могла работать с ней. Перед изменением настроек рекомендуется сделать резервную копию данных:
sudo cp /etc/postgresql/11/main/postgresql.conf /etc/postgresql/11/main/postgresql.conf_bak sudo cp /etc/postgresql/11/main/pg_hba.conf /etc/postgresql/11/main/pg_hba.conf_bak
В файле «/etc/postgresql/11/main/pg_hba.conf» внести необходимые изменения:
- Для простоты указать метод trust для всех соединений;
- Удалить любую дополнительную конфигурацию после метода типа mod=;
- Обязательно добавить хост с IP-адресом, где будет работать Директор.
В секции «Database administrative login by Unix domain socket» файла «/etc/postgresql/11/main/pg_hba.conf» закомментировать строку:
local all postgres peer
и дописать после нее строку разделяя значения символом табуляции:
local all postgres trust
local all all peer
local all all trust
host all all 0.0.0.0/0 md5
host all all 127.0.0.1/32 trust
при копировании проверяйте правильность указанных IP адресов
host all all 192.168.244.70/24 trust
Перезапустить СУБД командой:
sudo pg_ctlcluster 9.6 main restart
Присвоить пароль пользователю postrges:
sudo passwd postgres
Присвоить пароль пользователю bacula:
sudo passwd bacula
Создать пользователя БД bacula с паролем «bacula» для работы с Bacula и сделать это надо не от имени учетной записи администратора.
Вводим команду:
sudo -s
или
sudo -i
при копировании проверяйте правильность указанных IP адресов
Войти в интерфейс управления psql командой:
psql template1 -U postgres -h 192.168.244.70 -p 5432
подставив свой IP адрес, порт (у меня) по умолчанию.
Создаем пользователя bacula командой:
template1=# CREATE ROLE bacula;
Если пользователь bacula создался корректно/правильно получаем ответ:
CREATE ROLE
template1=# ALTER USER bacula WITH PASSWORD 'bacula';
ALTER ROLE
template1=# ALTER USER bacula LOGIN SUPERUSER CREATEDB CREATEROLE;
ALTER ROLE
template1=# \q
Заходим в интерфейс управления psql командой:
psql postgres -p 5432 -U postgres
Создаем БД командой:
postgres=# CREATE DATABASE bacula WITH ENCODING = 'SQL_ASCII' LC_COLLATE = 'C' LC_CTYPE = 'C' TEMPLATE = 'template0';
Если база создалась получаем ответ:
CREATE DATABASE
postgres=# ALTER DATABASE bacula OWNER TO bacula;
ALTER DATABASE
postgres=# \q
Далее нам необходимо запустить скрипты, которые создадут все необходимые таблицы и привилегии, предварительно забекапив и отредактировав их
Бекапим 1й нужный нам скрипт (создания таблиц) командой:
sudo cp /usr/share/bacula-director/make_postgresql_tables /usr/share/bacula-director/make_postgresql_tables_bak
и открываем его на редактирование:
sudo mcedit /usr/share/bacula-director/make_postgresql_tables
db_name=bacula
psql -f - -d ${db_name} $* <<END-OF-DATA
при копировании проверяйте правильность указанных IP адресов
psql -U bacula -h 192.168.244.70 -p 5432 -f - -d ${db_name} $* <<END-OF-DATA
Создать резервную копию сценария раздающего привилегии командой:
sudo cp /usr/share/bacula-director/grant_postgresql_privileges /usr/share/bacula-director/grant_postgresql_privileges_bak
sudo mcedit /usr/share/bacula-director/grant_postgresql_privileges
В строке db_user (8я сверху) указать значение пользователя «bacula»
db_user=bacula
db_name=bacula
db_password=bacula
$bindir/psql -f - -d ${db_name} $* <<END-OF-DATA
при копировании проверяйте правильность указанных IP адресов
$bindir/psql -U bacula -h 192.168.244.70 -p 5432 -f - -d ${db_name} $* <<END-OF-DATA
Для корректного функционирования отредактированных сценариев необходимо выдать права на чтение информации из БД пользователей и сведений о метках безопасности, а так же присвоить для этого необходимые атрибуты пользователю postgres:
sudo usermod -a -G shadow postgres sudo setfacl -d -m u:postgres:r /etc/parsec/macdb /etc/parsec/capdb
sudo setfacl -R -m u:postgres:r /etc/parsec/macdb /etc/parsec/capdb
sudo setfacl -m u:postgres:rx /etc/parsec/macdb /etc/parsec/capdb
Установить пользователю необходимые атрибуты:
в данной команде используется буква L в низком регистре
sudo pdpl-user bacula -l 0:0
sudo /usr/share/bacula-director/make_postgresql_tables
sudo /usr/share/bacula-director/grant_postgresql_privileges
Если сценарии отработали нормально, то есть:
- созданы все необходимые таблицы;
- корректно назначены все необходимые привилегии;
- без ошибок взята информация из БД пользователей и сведений о метках безопасности.
то будет выдано сообщение:
Privileges for user bacula granted on database bacula.
Если же что-то пошло не так, то Вам просто повезло, что вы делаете все на ВМ, откатываемся и повторяем настройки, на этот раз внимательнее.