summaryrefslogtreecommitdiffstats
path: root/roles/bacula-sd
diff options
context:
space:
mode:
Diffstat (limited to 'roles/bacula-sd')
-rw-r--r--roles/bacula-sd/files/etc/systemd/system/bacula-sd.service.d/override.conf13
-rw-r--r--roles/bacula-sd/files/lib/systemd/system/bacula-sd.service14
-rw-r--r--roles/bacula-sd/handlers/main.yml3
-rw-r--r--roles/bacula-sd/tasks/main.yml98
-rw-r--r--roles/bacula-sd/templates/etc/bacula/bacula-sd.conf.j220
-rw-r--r--roles/bacula-sd/templates/etc/stunnel/bacula-sd.conf.j253
6 files changed, 48 insertions, 153 deletions
diff --git a/roles/bacula-sd/files/etc/systemd/system/bacula-sd.service.d/override.conf b/roles/bacula-sd/files/etc/systemd/system/bacula-sd.service.d/override.conf
new file mode 100644
index 0000000..b228078
--- /dev/null
+++ b/roles/bacula-sd/files/etc/systemd/system/bacula-sd.service.d/override.conf
@@ -0,0 +1,13 @@
+[Service]
+# Hardening
+NoNewPrivileges=yes
+PrivateDevices=yes
+ProtectHome=yes
+ProtectSystem=strict
+ReadWriteDirectories=-/var/lib/bacula
+ReadWriteDirectories=/mnt/backup/bacula
+PrivateDevices=yes
+ProtectControlGroups=yes
+ProtectKernelModules=yes
+ProtectKernelTunables=yes
+RestrictAddressFamilies=AF_INET AF_INET6
diff --git a/roles/bacula-sd/files/lib/systemd/system/bacula-sd.service b/roles/bacula-sd/files/lib/systemd/system/bacula-sd.service
deleted file mode 100644
index 4c3f81d..0000000
--- a/roles/bacula-sd/files/lib/systemd/system/bacula-sd.service
+++ /dev/null
@@ -1,14 +0,0 @@
-[Unit]
-Description=Bacula Storage Daemon service
-After=network.target
-
-[Service]
-Type=forking
-PIDFile=/var/run/bacula/bacula-sd.9113.pid
-StandardOutput=syslog
-User=bacula
-Group=tape
-ExecStart=/usr/sbin/bacula-sd -c /etc/bacula/bacula-sd.conf
-
-[Install]
-WantedBy=multi-user.target
diff --git a/roles/bacula-sd/handlers/main.yml b/roles/bacula-sd/handlers/main.yml
index ce391d2..3434333 100644
--- a/roles/bacula-sd/handlers/main.yml
+++ b/roles/bacula-sd/handlers/main.yml
@@ -1,9 +1,6 @@
---
- name: systemctl daemon-reload
command: /bin/systemctl daemon-reload
-- name: Restart stunnel
- service: name=stunnel4 pattern=/usr/bin/stunnel4 state=restarted
-
- name: Restart bacula-sd
service: name=bacula-sd state=restarted
diff --git a/roles/bacula-sd/tasks/main.yml b/roles/bacula-sd/tasks/main.yml
index 7a6c8c3..f30fe7f 100644
--- a/roles/bacula-sd/tasks/main.yml
+++ b/roles/bacula-sd/tasks/main.yml
@@ -1,110 +1,62 @@
-- name: Install stunnel
- apt: pkg=stunnel4
-
-- name: Auto-enable stunnel
- lineinfile: dest=/etc/default/stunnel4
- regexp='^(\s*#)?\s*ENABLED='
- line='ENABLED=1'
- owner=root group=root
- mode=0644
-
-- name: Create /etc/stunnel/certs
- file: path=/etc/stunnel/certs
- state=directory
- owner=root group=root
- mode=0755
-
-- name: Generate a private key and a X.509 certificate for Bacula SD
- command: genkeypair.sh x509
- --pubkey=/etc/stunnel/certs/{{ inventory_hostname_short }}-sd.pem
- --privkey=/etc/stunnel/certs/{{ inventory_hostname_short }}-sd.key
- --ou=BaculaSD --cn={{ inventory_hostname }} --dns={{ inventory_hostname }}
- -t rsa -b 4096 -h sha512
- register: r1
- changed_when: r1.rc == 0
- failed_when: r1.rc > 1
- notify:
- - Restart stunnel
- tags:
- - genkey
-
-- name: Fetch Bacula SD X.509 certificate
- # Ensure we don't fetch private data
- sudo: False
- fetch: src=/etc/stunnel/certs/{{ inventory_hostname_short }}-sd.pem
- dest=certs/bacula/
- fail_on_missing=yes
- flat=yes
- tags:
- - genkey
-
-- name: Copy Bacula Dir/FD X.509 certificates
- assemble: src=certs/bacula regexp="-(dir|fd)\.pem$" remote_src=no
- dest=/etc/stunnel/certs/bacula-dir+fds.pem
- owner=root group=root
- mode=0644
- register: r2
- notify:
- - Restart stunnel
-
-- name: Configure stunnel
- template: src=etc/stunnel/bacula-sd.conf.j2
- dest=/etc/stunnel/bacula-sd.conf
- owner=root group=root
- mode=0644
- register: r3
- notify:
- - Restart stunnel
-
-- name: Start stunnel
- service: name=stunnel4 pattern=/usr/bin/stunnel4 state=started
- when: not (r1.changed or r2.changed or r3.changed)
-
-- meta: flush_handlers
-
-
-
- name: Install bacula-sd
apt: pkg=bacula-sd
-# Create with:
+# Populate with:
# echo $director-dir $(pwgen -sn 64 1) | sudo tee -a /etc/bacula/passwords-sd
- name: Ensure /etc/bacula/passwords-sd exists
file: path=/etc/bacula/passwords-sd
state=file
owner=bacula group=bacula
mode=0600
- name: Configure bacula
template: src=etc/bacula/bacula-sd.conf.j2
dest=/etc/bacula/bacula-sd.conf
owner=root group=root
mode=0644
notify:
- Restart bacula-sd
-- name: Copy bacula-sd.service
- copy: src=lib/systemd/system/bacula-sd.service
- dest=/lib/systemd/system/bacula-sd.service
+- name: Create /etc/systemd/system/bacula-sd.service.d
+ file: path=/etc/systemd/system/bacula-sd.service.d
+ state=directory
+ owner=root group=root
+ mode=0755
+
+- name: Copy bacula-sd.service override
+ copy: src=etc/systemd/system/bacula-sd.service.d/override.conf
+ dest=/etc/systemd/system/bacula-sd.service.d/override.conf
owner=root group=root
mode=0644
notify:
- systemctl daemon-reload
- Restart bacula-sd
+# Avoid bacula creating archives under /mnt/backup/bacula when it's
+# not mounted
+- name: Create directory /mnt/backup
+ file: path=/mnt/backup
+ state=directory
+ owner=root group=root
+ mode=0755
+
+- name: Mount /mnt/backup
+ mount: src=/dev/mapper/fripost-backup
+ path=/mnt/backup
+ fstype=ext4
+ opts=noauto
+ state=mounted
+
- meta: flush_handlers
- name: Enable bacula-sd
service: name=bacula-sd enabled=yes
- name: Start bacula-sd
service: name=bacula-sd state=started
-# To avoid bacula creating archives under /mnt/backup/bacula when it's
-# not a mountpoint, use `chmod 0700 /mnt/backup; chown root:root /mnt/backup`
-# before mounting the disk.
- name: Create /mnt/backup/bacula
file: path=/mnt/backup/bacula
state=directory
owner=bacula group=tape
mode=0750
diff --git a/roles/bacula-sd/templates/etc/bacula/bacula-sd.conf.j2 b/roles/bacula-sd/templates/etc/bacula/bacula-sd.conf.j2
index 7be783b..a898e0d 100644
--- a/roles/bacula-sd/templates/etc/bacula/bacula-sd.conf.j2
+++ b/roles/bacula-sd/templates/etc/bacula/bacula-sd.conf.j2
@@ -1,56 +1,56 @@
#
# Default Bacula Storage Daemon Configuration file
#
-# For Bacula release 5.2.6 (21 February 2012) -- debian jessie/sid
+# For Bacula release 9.4.2 (04 February 2019) -- debian buster/sid
#
# You may need to change the name of your tape drive
# on the "Archive Device" directive in the Device
# resource. If you change the Name and/or the
# "Media Type" in the Device resource, please ensure
# that dird.conf has corresponding changes.
#
Storage { # define myself
Name = {{ inventory_hostname_short }}-sd
Working Directory = /var/lib/bacula
- Pid Directory = /var/run/bacula
+ Pid Directory = /run/bacula
Maximum Concurrent Jobs = 20
- SDAddress = 127.0.0.1
- SDPort = 9113
+ SDAddress = {{ ipsec[inventory_hostname_short] }}
+ SDPort = 9103
}
#
# List Directors who are permitted to contact Storage daemon
#
-{% for dir in groups['bacula-dir'] | sort %}
+{% for dir in groups['bacula_dir'] | sort %}
Director {
Name = {{ hostvars[dir].inventory_hostname_short }}-dir
@|"sed -n '/^{{ hostvars[dir].inventory_hostname_short }}-dir\\s/ {s//Password = /p; q}' /etc/bacula/passwords-sd"
}
#
# Send all messages to the Director,
# mount messages also are sent to the email address
#
Messages {
Name = Standard
director = {{ hostvars[dir].inventory_hostname_short }}-dir = all
}
{% endfor %}
#
# Devices supported by this Storage daemon
# To connect, the Director's bacula-dir.conf must have the
# same Name and MediaType.
#
Device {
Name = FileStorage
Media Type = File
Archive Device = /mnt/backup/bacula
- LabelMedia = yes; # lets Bacula label unlabeled media
- Random Access = Yes;
- AutomaticMount = yes; # when device opened, read it
- RemovableMedia = no;
- AlwaysOpen = no;
+ LabelMedia = Yes # lets Bacula label unlabeled media
+ Random Access = Yes
+ AutomaticMount = Yes # when device opened, read it
+ RemovableMedia = No
+ AlwaysOpen = No
}
diff --git a/roles/bacula-sd/templates/etc/stunnel/bacula-sd.conf.j2 b/roles/bacula-sd/templates/etc/stunnel/bacula-sd.conf.j2
deleted file mode 100644
index b193826..0000000
--- a/roles/bacula-sd/templates/etc/stunnel/bacula-sd.conf.j2
+++ /dev/null
@@ -1,53 +0,0 @@
-; **************************************************************************
-; * Global options *
-; **************************************************************************
-
-; setuid()/setgid() to the specified user/group in daemon mode
-setuid = stunnel4
-setgid = stunnel4
-
-; PID is created inside the chroot jail
-pid = /var/run/stunnel4/bacula-sd.pid
-
-; Only log messages at severity warning (4) and higher
-debug = 4
-
-; **************************************************************************
-; * Service defaults may also be specified in individual service sections *
-; **************************************************************************
-
-; Certificate/key is needed in server mode and optional in client mode
-cert = /etc/stunnel/certs/{{ inventory_hostname_short }}-sd.pem
-key = /etc/stunnel/certs/{{ inventory_hostname_short }}-sd.key
-
-; Some performance tunings
-socket = l:TCP_NODELAY=1
-socket = r:TCP_NODELAY=1
-
-; Prevent MITM attacks
-verify = 4
-
-; Disable support for insecure protocols
-options = NO_SSLv2
-options = NO_SSLv3
-options = NO_TLSv1
-options = NO_TLSv1.1
-
-; These options provide additional security at some performance degradation
-options = SINGLE_ECDH_USE
-options = SINGLE_DH_USE
-
-; Select permitted SSL ciphers
-ciphers = EECDH+AES:EDH+AES:!MEDIUM:!LOW:!EXP:!aNULL:!eNULL:!SSLv2:!SSLv3:!TLSv1:!TLSv1.1
-
-; **************************************************************************
-; * Service definitions (remove all services for inetd mode) *
-; **************************************************************************
-
-[{{ inventory_hostname_short }}-sd]
-client = no
-accept = 9103
-connect = 127.0.0.1:9113
-CAfile = /etc/stunnel/certs/bacula-dir+fds.pem
-
-; vim:ft=dosini