Содержание

Skip to end of metadata
Go to start of metadata

Введение

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 могла работать с ней.

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

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:

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

В файле «/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» закомментировать строку:

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;
Если база создалась получаем ответ:
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
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

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

в данной команде используется буква 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
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

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