Page tree

Versions Compared

Key

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

Table of Contents

Children Display
alltrue
pageBACULA
sortcreation


Введение

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

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

Command
sudo apt install bacula-common-pgsql bacula-director-pgsql bacula-director bacula-console bacula-console-qt

При установке пакетов автоматически будет установлена актуальная версия СУБД PostgreSQL. При установке СУБД будет предложено сразу выполнить настройку СУБД, от чего следует отказаться, настройка будет выполнена позднее. Далее подразумевается, что используется СУБД PostgreSQL версии 11, в старых обновлениях Astra Linux может использоваться PostgreSQL версии 9.6. Проверить используемую версию СУБД можно командой:

Command

apt policy postgresql

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

Первоначально необходимо настроить СУБД PostgreSQL для того, чтобы Bacula могла работать с ней. Перед изменением настроек рекомендуется сделать резервную копию данных:

Command
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:

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

В файле «/etc/postgresql/11/main/pg_hba.conf» внести необходимые изменения:

  • Для простоты указать метод trust для всех соединений;
  • Удалить любую дополнительную конфигурацию после метода типа mod=;
  • Обязательно добавить хост с IP-адресом, где будет работать Директор.

В секции «Database administrative login by Unix domain socket» файла «/etc/postgresql/11/main/pg_hba.conf» закомментировать строку:

Command
local               all                    postgres                    peer

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

Command
local               all                    postgres                    trust

В секции «local» файла «pg_hba.conf» закомментировать строку:

Command
local               all                    all                   peer

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

Command
local               all                    all                   trust

В секции «IPv4» файла «pg_hba.conf» закомментировать строку:

Command
host                all                    all                   0.0.0.0/0         md5

и дописать после нее 2 строки разделяя значения символом табуляции:

Command
host                all                    all                   127.0.0.1/32  trust


Info

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


Command
host                all                    all                   192.168.244.70/24            trust


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

Перезапустить СУБД командой:

Command
sudo pg_ctlcluster 9.6 main restart

Присвоить пароль пользователю postrges:

Command
sudo passwd postgres

Присвоить пароль пользователю bacula:

Command
sudo passwd bacula

В данном примере далее для обоих пользователей используется пароль "1".

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

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

Command
sudo -s

или

Command
sudo -i

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

Info

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

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

Command
psql template1 -U postgres -h 192.168.244.70 -p 5432

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

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

Command
template1=# CREATE ROLE bacula;

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

Command
CREATE ROLE

Присваиваем созданному пользователю пароль: "bacula" следующей командой:

Command
template1=# ALTER USER bacula WITH PASSWORD 'bacula';

Если пароль успешно присвоен пользователю получаем ответ:

Command
ALTER ROLE

Создаем суперпользователя для нашей базы:

Command
template1=# ALTER USER bacula LOGIN SUPERUSER CREATEDB CREATEROLE;

Если суперпользователь для нашей базы создался получаем ответ: 

Command
ALTER ROLE

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

Command
template1=# \q

Далее нам необходимо создать БД bacula, назначить ее владельцем созданного ранее пользователя bacula.

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

Command
psql postgres -p 5432 -U postgres

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

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


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


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

Command
CREATE DATABASE

Назначаем владельцем данной БД пользователя "bacula" командой:

Command
postgres=# ALTER DATABASE bacula OWNER TO bacula;

Если назначение прошло успешно получаем ответ:

Command
ALTER DATABASE

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

Command
postgres=# \q

Выходим из терминала суперпользователя

Далее нам необходимо запустить скрипты, которые создадут все необходимые таблицы и привилегии, предварительно забекапив и отредактировав их

Бекапим 1й нужный нам скрипт (создания таблиц) командой:

Command
sudo cp /usr/share/bacula-director/make_postgresql_tables /usr/share/bacula-director/make_postgresql_tables_bak

и открываем его на редактирование:

Command
sudo mcedit /usr/share/bacula-director/make_postgresql_tables

В строке "db_name" (14я сверху) указать значение имени БД «bacula»:

Command
db_name=bacula

В строке psql после psql вписать «-U bacula -h 192.168.244.70 -p 5432»:


Command
psql -f - -d ${db_name} $* <<END-OF-DATA


Info

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


Command
psql -U bacula -h 192.168.244.70 -p 5432 -f - -d ${db_name} $* <<END-OF-DATA


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


Создать резервную копию сценария раздающего привилегии командой:

Command
sudo cp /usr/share/bacula-director/grant_postgresql_privileges /usr/share/bacula-director/grant_postgresql_privileges_bak

и открываем его на редактирование:

Command
sudo mcedit /usr/share/bacula-director/grant_postgresql_privileges

В строке db_user (8я сверху) указать значение пользователя «bacula»

Command
db_user=bacula

В строке db_name указать значение имени БД «bacula»

Command
db_name=bacula

В строке db_password указать значение пароля пользователя БД «bacula»

Command
db_password=bacula

В строке $bindir/psql**** после psql вписать «-U bacula -h 192.168.244.70 -p 5432»

Command
$bindir/psql -f - -d ${db_name} $* <<END-OF-DATA


Info

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


Command
$bindir/psql -U bacula -h 192.168.244.70 -p 5432 -f - -d ${db_name} $* <<END-OF-DATA


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


Для корректного функционирования отредактированных сценариев необходимо выдать права на чтение информации из БД пользователей и сведений о метках безопасности, а так же присвоить для этого необходимые атрибуты пользователю postgres:

Command
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

Установить пользователю необходимые атрибуты:

Info

в данной команде используется буква L в низком регистре


Command
sudo pdpl-user bacula -l 0:0


Далее по очереди выполнить отредактированные сценарии:

Command
sudo /usr/share/bacula-director/make_postgresql_tables


Command
sudo /usr/share/bacula-director/grant_postgresql_privileges

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

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

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

Command
Privileges for user bacula granted on database bacula.

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

Expand
titleАльтернативный вариант:

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

Warning

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

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

Command
sudo chmod 777 script.sh

Выполнять сценарий следует из учетной записи администратора системы с (при включенном МКЦ - администратора с высоким уровнем целостности) и с использованием механизма sudo:

Command
sudo ./script.sh

При копировании сценария необходимо проверить правильность указанных IP адресов и синтаксис (точки, пробелы, "слэши", кавычки, апострофы и т.п. - могут быть неправильно перенесены при копировании)


Command
#!/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



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