Дерево страниц

Введение

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

Установить их можно командой:

sudo apt install bacula-common-pgsql bacula-director-pgsql bacula-director bacula-console bacula-console-qt
При установке пакетов автоматически будет установлена актуальная версия СУБД PostgreSQL. При установке СУБД будет предложено сразу выполнить настройку СУБД, от чего следует отказаться, настройка будет выполнена позднее. Далее подразумевается, что используется СУБД PostgreSQL версии 11, в старых обновлениях Astra Linux может использоваться PostgreSQL версии 9.6. Проверить используемую версию СУБД можно командой:
apt policy postgresql

Первоначальная настройка

Первоначально необходимо настроить СУБД 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
В секции «Connection Settings» файла «/etc/postgresql/11/main/postgresql.conf» изменить значение listen_addresses=”localhost” на listen_addresses=”*”, поставив * вместо localhost:

ОБЯЗАТЕЛЬНО СОХРАНИТЬ НАСТРОЙКИ ПОСЛЕ РЕДАКТИРОВАНИЯ.

В файле «/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» файла «pg_hba.conf» закомментировать строку:
local               all                    all                   peer
и дописать после нее строку разделяя значения символом табуляции:
local               all                    all                   trust
В секции «IPv4» файла «pg_hba.conf» закомментировать строку:
host                all                    all                   0.0.0.0/0         md5
и дописать после нее 2 строки разделяя значения символом табуляции:
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
В данном примере далее для обоих пользователей используется пароль "1".

Создать пользователя БД bacula с паролем «bacula» для работы с Bacula и сделать это надо не от имени учетной записи администратора.

Вводим команду:

sudo -s

или

sudo -i
Войти в интерфейс управления psql командой:

при копировании проверяйте правильность указанных IP адресов

Войти в интерфейс управления psql командой:

psql template1 -U postgres -h 192.168.244.70 -p 5432

подставив свой IP адрес, порт (у меня) по умолчанию.

Создаем пользователя bacula командой:

template1=# CREATE ROLE bacula;

Если пользователь bacula создался корректно/правильно получаем ответ:

CREATE ROLE
Присваиваем созданному пользователю пароль: "bacula" следующей командой:
template1=# ALTER USER bacula WITH PASSWORD 'bacula';
Если пароль успешно присвоен пользователю получаем ответ:
ALTER ROLE
Создаем суперпользователя для нашей базы:
template1=# ALTER USER bacula LOGIN SUPERUSER CREATEDB CREATEROLE;
Если суперпользователь для нашей базы создался получаем ответ: 
ALTER ROLE
Выходим из интерфейса управления psql командой:
template1=# \q
Далее нам необходимо создать БД bacula, назначить ее владельцем созданного ранее пользователя bacula.

Заходим в интерфейс управления psql командой:

psql postgres -p 5432 -U postgres

Создаем БД командой:

postgres=# CREATE DATABASE bacula WITH ENCODING = 'SQL_ASCII' LC_COLLATE = 'C' LC_CTYPE = 'C' TEMPLATE = 'template0';

При создании конфиграций Bacula не рекомендуется использовать кириллицу, так как использование кириллицы может вызвать ошибки.

Если база создалась получаем ответ:

CREATE DATABASE
Назначаем владельцем данной БД пользователя "bacula" командой:
postgres=# ALTER DATABASE bacula OWNER TO bacula;
Если назначение прошло успешно получаем ответ:
ALTER DATABASE
Выходим из интерфейса управления psql командой:
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" (14я сверху) указать значение имени БД «bacula»:
db_name=bacula
В строке psql после psql вписать «-U bacula -h 192.168.244.70 -p 5432»:


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_name=bacula
В строке db_password указать значение пароля пользователя БД «bacula»
db_password=bacula
В строке $bindir/psql**** после psql вписать «-U bacula -h 192.168.244.70 -p 5432»
$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

Если сценарии отработали нормально, то есть:

  1. созданы все необходимые таблицы;
  2. корректно назначены все необходимые привилегии;
  3. без ошибок взята информация из БД пользователей и сведений о метках безопасности.

то будет выдано сообщение:

Privileges for user bacula granted on database bacula.

Если же что-то пошло не так, то Вам просто повезло, что вы делаете все на ВМ, откатываемся и повторяем настройки, на этот раз внимательнее.

Создаем сценарий script.sh со следующим содержимым:

Данный сценарий предоставлен в ознакомительных целях и подразумевает его использование пользователем исключительно на свой страх и риск.

Перед выполнением сценария необходимо присвоить ему маску 777:

sudo chmod 777 script.sh
Выполнять сценарий следует из учетной записи администратора системы с (при включенном МКЦ - администратора с высоким уровнем целостности) и с использованием механизма sudo:
sudo ./script.sh
При копировании сценария необходимо проверить правильность указанных IP адресов и синтаксис (точки, пробелы, "слэши", кавычки, апострофы и т.п. - могут быть неправильно перенесены при копировании)

#!/bin/bash

# Вносим изменения в файлы конфигурации postgresql:
cp /etc/postgresql/9.6/main/postgresql.conf /etc/postgresql/9.6/main/postgresql.conf_bak
cp /etc/postgresql/9.6/main/pg_hba.conf /etc/postgresql/9.6/main/pg_hba.conf_bak
sed -i -e "/listen_addresses/s/^/#/" -i  -e "/listen_addresses/a\ \t\listen_addresses='*'" /etc/postgresql/9.6/main/postgresql.conf
sed -i -e "s/local *all *postgres/#&/" /etc/postgresql/9.6/main/pg_hba.conf
sed -i -e "/local *all *postgres/a\local\tall\tpostgres\ttrust" /etc/postgresql/9.6/main/pg_hba.conf
sed -i -e "s/local *all *all/#&/" /etc/postgresql/9.6/main/pg_hba.conf
sed -i -e "/local *all *all/a\local\tall\tall\ttrust\nhost\tall\tall\t\127.0.0.1/32\ttrust\nhost\tall\tall\t192.168.244.70/24\ttrust" /etc/postgresql/9.6/main/pg_hba.conf
sed -i -e "s/host *all *all/#&/" /etc/postgresql/9.6/main/pg_hba.conf

#Перезапускаем БД:
pg_ctlcluster 9.6 main restart

# Меняем пароли пользователей postgres и bacula
echo "postgres:1" | chpasswd &> /dev/null
echo "bacula:1" | chpasswd &> /dev/null

# Создаем пользователя bacula
>/tmp/adduser.sql
chmod 644 /tmp/adduser.sql
echo "CREATE ROLE bacula;
		ALTER USER bacula WITH PASSWORD 'bacula';
		ALTER USER bacula LOGIN SUPERUSER CREATEDB CREATEROLE;" > /tmp/adduser.sql
cd /tmp
su -c "psql template1 -U postgres -h 192.168.244.70 -p 5432 -f /tmp/adduser.sql" postgres
rm /tmp/adduser.sql

# Создаем базу данных bacula
>/tmp/adddb.sql
chmod 644 /tmp/adddb.sql
echo "CREATE DATABASE bacula;
      ALTER DATABASE bacula OWNER TO bacula;" > /tmp/adddb.sql
cd /tmp
su -c "psql postgres -p 5432 -U postgres -f /tmp/adddb.sql" postgres
rm /tmp/adddb.sql

# Вносим изменения в скрипты,
# выдаем права на чтение информации из БД пользователей и сведений о метках безопасности, а так же присваиваем для этого необходимые атрибуты пользователю postgres
sed -i -e /db_name/s/^/#/ /usr/share/bacula-director/make_postgresql_tables
sed -i -e "/psql/a\db_name=\${db_name:-bacula}\npsql\ -U\ bacula\ -h\ 192.168.244.70\ -p\ 5432\ -f\ -\ -d\ \${db_name}\ \$*\ \<<END-OF-DATA" /usr/share/bacula-director/make_postgresql_tables
sed -i -e "/XXX_DBUSER_XXX/s/^/#/" -i -e "/XXX_DBUSER_XXX/a\db_user=\${db_user:-bacula}" /usr/share/bacula-director/grant_postgresql_privileges
sed -i -e "/XXX_DBNAME_XXX/s/^/#/" -i -e "/XXX_DBNAME_XXX/a\db_name=\${db_name:-bacula}" /usr/share/bacula-director/grant_postgresql_privileges
sed -i -e "/XXX_DBPASSWORD_XXX/s/^/#/" -i -e "/XXX_DBPASSWORD_XXX/a\db_password=bacula" /usr/share/bacula-director/grant_postgresql_privileges
sed -i -e "/bindir\/psql/s/^/#/" -i -e "/bindir\/psql/a\$bindir\/psql\ -U\ bacula\ -h\ 192.168.244.70\ -p\ 5432\ -f\ -\ -d\ \${db_name} $* <<END-OF-DATA" /usr/share/bacula-director/grant_postgresql_privileges

sed -i -e /zero_if_notfound/s/^/#/ /etc/parsec/mswitch.conf
sed -i -e /zero_if_notfound/a\zero_if_notfound:yes /etc/parsec/mswitch.conf

usermod -a -G shadow postgres

setfacl -d -m u:postgres:r  /etc/parsec/macdb /etc/parsec/capdb
setfacl -R -m u:postgres:r  /etc/parsec/macdb /etc/parsec/capdb
setfacl    -m u:postgres:rx /etc/parsec/macdb /etc/parsec/capdb

pdpl-user bacula -l 0:0 # запускаем скрипты /usr/share/bacula-director/make_postgresql_tables /usr/share/bacula-director/grant_postgresql_privileges

Предварительная настройка закончена, если все прошло без ошибок, то можно и НУЖНО(!!!) сделать снимок ВМ Директора.
  • Нет меток