|
@@ -0,0 +1,51 @@
|
|
|
+.. include:: ../global.rst.inc
|
|
|
+.. highlight:: none
|
|
|
+.. _non_root_user:
|
|
|
+
|
|
|
+================================
|
|
|
+Backing up using a non-root user
|
|
|
+================================
|
|
|
+
|
|
|
+This section shows how to run borg as a non-root user and still be able to
|
|
|
+backup every file on the system.
|
|
|
+
|
|
|
+Normally borg is run as the root user to bypass all filesystem permission and
|
|
|
+be able to read all files. But in theory this also allows borg to modify or
|
|
|
+delete files on you system, incase of a bug for example.
|
|
|
+
|
|
|
+To remove this possible we can run borg as a non-root user and give it readonly
|
|
|
+permissions to all files on the system.
|
|
|
+
|
|
|
+
|
|
|
+Using linux capabilities inside a systemd service
|
|
|
+=================================================
|
|
|
+
|
|
|
+One way to do so, is to use linux `capabilities
|
|
|
+<https://man7.org/linux/man-pages/man7/capabilities.7.html>`_ within a systemd
|
|
|
+service.
|
|
|
+
|
|
|
+Linux capabilities allow us to give parts of the privileges the root user has to
|
|
|
+a non-root user. This works on a per-thread level and does not give the permission
|
|
|
+to the non-root user as a whole.
|
|
|
+
|
|
|
+For this we need to run our backup script from a systemd service and use the `AmbientCapabilities
|
|
|
+<https://www.freedesktop.org/software/systemd/man/latest/systemd.exec.html#AmbientCapabilities=>`_
|
|
|
+option added in systemd 229.
|
|
|
+
|
|
|
+A very basic unit file would look like this:
|
|
|
+
|
|
|
+::
|
|
|
+
|
|
|
+ [Unit]
|
|
|
+ Description=Borg Backup
|
|
|
+
|
|
|
+ [Service]
|
|
|
+ Type=oneshot
|
|
|
+ User=borg
|
|
|
+ ExecStart=/usr/local/sbin/backup.sh
|
|
|
+
|
|
|
+ AmbientCapabilities=CAP_DAC_READ_SEARCH
|
|
|
+
|
|
|
+The CAP_DAC_READ_SEARCH capability gives borg readonly access to all files and directories on the system.
|
|
|
+
|
|
|
+This service can then be started manually using ``systemctl start`` or regularly with a systemd timer.
|