From c5abcc1fdf9a670e192a492595183be37585f953 Mon Sep 17 00:00:00 2001 From: Dan Helfman Date: Fri, 7 Feb 2025 16:04:10 -0800 Subject: [PATCH] Add documentation for the "!credential" tag (#966). --- README.md | 13 ++++- docs/how-to/provide-your-passwords.md | 71 +++++++++++++++++++------- docs/static/pushover.png | Bin 6488 -> 9708 bytes docs/static/systemd.png | Bin 0 -> 9944 bytes 4 files changed, 64 insertions(+), 20 deletions(-) create mode 100644 docs/static/systemd.png diff --git a/README.md b/README.md index b57f68d4..4d0fdad9 100644 --- a/README.md +++ b/README.md @@ -56,6 +56,8 @@ borgmatic is powered by [Borg Backup](https://www.borgbackup.org/). ## Integrations +### Data + PostgreSQL MySQL MariaDB @@ -65,6 +67,11 @@ borgmatic is powered by [Borg Backup](https://www.borgbackup.org/). Btrfs LVM rclone +BorgBase + + +### Monitoring + Healthchecks Uptime Kuma Cronitor @@ -76,7 +83,11 @@ borgmatic is powered by [Borg Backup](https://www.borgbackup.org/). Apprise Zabbix Sentry -BorgBase + + +### Credentials + +Sentry ## Getting started diff --git a/docs/how-to/provide-your-passwords.md b/docs/how-to/provide-your-passwords.md index 60aa33b7..c7c7b84b 100644 --- a/docs/how-to/provide-your-passwords.md +++ b/docs/how-to/provide-your-passwords.md @@ -50,52 +50,85 @@ once per borgmatic run. ### Using systemd service credentials -Borgmatic supports using encrypted [credentials](https://systemd.io/CREDENTIALS/). +borgmatic supports using encrypted [systemd +credentials](https://systemd.io/CREDENTIALS/). To use this feature, start by +saving your password as an encrypted credential to +`/etc/credstore.encrypted/borgmatic.pw`, e.g., -Save your password as an encrypted credential to `/etc/credstore.encrypted/borgmatic.pw`, e.g., - -``` -# systemd-ask-password -n | systemd-creds encrypt - /etc/credstore.encrypted/borgmatic.pw +```bash +systemd-ask-password -n | systemd-creds encrypt - /etc/credstore.encrypted/borgmatic.pw ``` -Then uncomment or use the following in your configuration file: +Then use the following in your configuration file: ```yaml -encryption_passcommand: "cat ${CREDENTIALS_DIRECTORY}/borgmatic.pw" +encryption_passphrase: !credential systemd borgmatic.pw ``` +Prior to version 1.9.10 You can +accomplish the same thing with this configuration: + +```yaml +encryption_passcommand: cat ${CREDENTIALS_DIRECTORY}/borgmatic.pw +``` Note that the name `borgmatic.pw` is hardcoded in the systemd service file. -To use multiple different passwords, save them as encrypted credentials to `/etc/credstore.encrypted/borgmatic/`, e.g., +You can use the `!credential` tag for any option value in a borgmatic +configuration file. So for example, use `!credential` to load systemd +credentials for database or monitoring passwords: +```yaml +postgresql_databases: + - name: invoices + username: postgres + password: !credential systemd borgmatic_db1 ``` -# mkdir /etc/credstore.encrypted/borgmatic -# systemd-ask-password -n | systemd-creds encrypt --name=borgmatic_backupserver1 - /etc/credstore.encrypted/borgmatic/backupserver1 -# systemd-ask-password -n | systemd-creds encrypt --name=borgmatic_pw2 - /etc/credstore.encrypted/borgmatic/pw2 + +But first you'll need to modify the borgmatic systemd service file to support +loading multiple credentials (assuming you need to load more than one or +anything not named `borgmatic.pw`). + +To do this, save each encrypted credentials to +`/etc/credstore.encrypted/borgmatic/`. E.g., + +```bash +mkdir /etc/credstore.encrypted/borgmatic +systemd-ask-password -n | systemd-creds encrypt --name=borgmatic_backupserver1 - /etc/credstore.encrypted/borgmatic/backupserver1 +systemd-ask-password -n | systemd-creds encrypt --name=borgmatic_pw2 - /etc/credstore.encrypted/borgmatic/pw2 ... ``` -Ensure that the file names, (e.g. `backupserver1`) match the corresponding part of -the `--name` option *after* the underscore (_), and that the part *before* +Ensure that the file names, (e.g. `backupserver1`) match the corresponding part +of the `--name` option *after* the underscore (_), and that the part *before* the underscore matches the directory name (e.g. `borgmatic`). Then, uncomment the appropriate line in the systemd service file: ``` -# systemctl edit borgmatic.service +systemctl edit borgmatic.service ... # Load multiple encrypted credentials. LoadCredentialEncrypted=borgmatic:/etc/credstore.encrypted/borgmatic/ ``` -Finally, use the following in your configuration file: +Finally, use something like the following in your borgmatic configuration file +for each option value you'd like to load from systemd: -``` -encryption_passcommand: "cat ${CREDENTIALS_DIRECTORY}/borgmatic_backupserver1" +```yaml +encryption_passphrase: !credential systemd borgmatic_backupserver1 ``` -Adjust `borgmatic_backupserver1` according to the name given to the credential -and the directory set in the service file. +Prior to version 1.9.10 Use the +following instead, but only for the `encryption_passcommand` option and +not other options: + +```yaml +encryption_passcommand: cat ${CREDENTIALS_DIRECTORY}/borgmatic_backupserver1 +``` + +Adjust `borgmatic_backupserver1` according to the name of the credential and the +directory set in the service file. + ### Environment variable interpolation diff --git a/docs/static/pushover.png b/docs/static/pushover.png index e0ef72a9c069e3d53a658102678966e83c757108..4d49fc73b02d7d5ae321c9fd8da2476bd52eed98 100644 GIT binary patch literal 9708 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 delta 6299 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 OkgAfFVvW3Y`2PT0huP`? diff --git a/docs/static/systemd.png b/docs/static/systemd.png new file mode 100644 index 0000000000000000000000000000000000000000..40d9adf264b35e6ea85f8e6e96af78c2d0b08d5e GIT binary patch literal 9944 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