Содержание

Versions Compared

Key

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

Children Display
alltrue
pageBACULA
sortcreation

Table of Contents

Введение

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 обеспечивает поддержку сохранения расширенных атрибутов каталогов и файлов и, при необходимости, их последующее восстановление.

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

Первоначально нам необходимо настроить PostgreSQL для того, чтобы Bacula могла работать с ней.

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

Command
sudo cp /etc/postgresql/9.6/main/postgresql.conf /etc/postgresql/9.6/main/postgresql.conf_bak
sudo cp /etc/postgresql/9.6/main/pg_hba.conf /etc/postgresql/9.6/main/pg_hba.conf_bak

В секции «Connection Settings» файла «/etc/postgresql/9.6/main/postgresql.conf» изменить значение listen_addresses=”localhost” на listen_addresses=”*”, поставив * вместо localhost:

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

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

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

В секции «Database administrative login by Unix domain socket» файла «/etc/postgresql/9.6/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;

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

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
sudo setfacl -R -m u:postgres:r /etc/parsec/macdb
sudo setfacl -m u:postgres:rx /etc/parsec/macdb
sudo setfacl -d -m u:postgres:r /etc/parsec/capdb
sudo setfacl -R -m u:postgres:r /etc/parsec/capdb
sudo setfacl -m u:postgres:rx /etc/parsec/macdb

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

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Альтернативный вариант:

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

Warning

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

перед выполнением сценария присвоить ему маску 777 ( sudo chmod 777 ImaLazyAssscript.sh )

выполнять сценарий из под администратора системы с высоким МКЦ и с использованием механизма sudo ( sudo ./ImaLazyAssscript.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
setfacl -R -m u:postgres:r /etc/parsec/macdb
setfacl -m u:postgres:rx /etc/parsec/macdb

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

pdpl-user bacula -l 0:0

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



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