Compare commits
10 Commits
e2f50d7dc2
...
80ad89e27e
Author | SHA1 | Date |
---|---|---|
drebs | 80ad89e27e | |
drebs | 13156b1ffa | |
drebs | 2e0aa2339f | |
drebs | 21c4b9fd3a | |
drebs | 3892a4ea34 | |
drebs | 2b9d07dbd1 | |
drebs | 9e8dc17ef6 | |
drebs | f9f9432360 | |
drebs | 96baf4fbe9 | |
drebs | 8daaeede5c |
|
@ -2,19 +2,21 @@ baseURL = 'http://44203.net/'
|
||||||
languageCode = 'pt-br'
|
languageCode = 'pt-br'
|
||||||
title = '44203.net'
|
title = '44203.net'
|
||||||
theme = "smol"
|
theme = "smol"
|
||||||
defaultContentLanguage = "pt"
|
defaultContentLanguage = "pt-br"
|
||||||
enableGitInfo = true
|
enableGitInfo = true
|
||||||
|
|
||||||
[languages]
|
[languages]
|
||||||
[languages.pt]
|
[languages.pt-br]
|
||||||
|
languageCode = 'pt-br'
|
||||||
contentDir = 'content'
|
contentDir = 'content'
|
||||||
languageName = 'Português'
|
languageName = 'Português'
|
||||||
weight = 1
|
weight = 1
|
||||||
|
|
||||||
# Parameters
|
# Parameters
|
||||||
[params]
|
[params]
|
||||||
subtitle = "Documentação sobre minha atividade online"
|
subtitle = "Documentação de referência"
|
||||||
dateFmt = "02.01.2006"
|
dateFmt = "02.01.2006"
|
||||||
|
customCSS = ['css/local.css']
|
||||||
|
|
||||||
# Header
|
# Header
|
||||||
[menu]
|
[menu]
|
||||||
|
|
|
@ -3,4 +3,5 @@ title: "Links"
|
||||||
draft: false
|
draft: false
|
||||||
---
|
---
|
||||||
|
|
||||||
|
- Compartilhador de arquivos (até 50 MB): https://share.riseup.net
|
||||||
- Encurtador de links: https://squ.at
|
- Encurtador de links: https://squ.at
|
||||||
|
|
|
@ -0,0 +1,124 @@
|
||||||
|
---
|
||||||
|
title: "Backup 2024, parte 1: A primeira cópia cifrada"
|
||||||
|
date: 2023-12-30T17:10:20-03:00
|
||||||
|
slug: 2023-12-30-esquema-de-backup-2024-rsync
|
||||||
|
type: posts
|
||||||
|
draft: false
|
||||||
|
categories:
|
||||||
|
- Segurança da informação
|
||||||
|
tags:
|
||||||
|
- backups
|
||||||
|
toc: true
|
||||||
|
---
|
||||||
|
|
||||||
|
Esta é a parte 1 de uma série de posts sobre meu esquema de backup que
|
||||||
|
implementa um sistema 3-2-1 de backups: são 3 cópias no total, em ao menos duas
|
||||||
|
mídias distintas, sendo uma delas remota. Esta parte documenta a primeira cópia
|
||||||
|
cifrada dos dados usando [Restic](https://restic.net/),
|
||||||
|
[Pass](https://www.passwordstore.org/) e [Systemd](https://systemd.io/).
|
||||||
|
|
||||||
|
<!--more-->
|
||||||
|
|
||||||
|
## Características da primeira cópia cifrada
|
||||||
|
|
||||||
|
A primeira cópia cifrada é feita usando [Restic](https://restic.net) e é salva
|
||||||
|
diretamente em um NAS na minha rede local, garantindo assim a existência de 2
|
||||||
|
cópias em 2 mídias distintas.
|
||||||
|
|
||||||
|
Requisitos para a primeira cópia cifrada:
|
||||||
|
|
||||||
|
- **Conteúdo:** Deve incluir todo o `$HOME`, com exceção de alguns arquivos específicos.
|
||||||
|
- **Frequência:** Cópias instantâneas realizadas a cada hora.
|
||||||
|
- **Retenção:**
|
||||||
|
- 24 últimas cópias horárias
|
||||||
|
- 7 últimas cópias diárias
|
||||||
|
- 4 últimas cópias semanais
|
||||||
|
- 6 últimas cópias mensais
|
||||||
|
- **Segurança:** A senha e algoritmos criptográficos devem ser ao menos tão fortes quanto os da criptografia de disco que protege os dados originais.
|
||||||
|
|
||||||
|
## Instalação e configuração de dependências
|
||||||
|
|
||||||
|
Instale o [pass](https://www.passwordstore.org/) e o [Restic](https://restic.net/), por exemplo em um Debian:
|
||||||
|
|
||||||
|
```fish
|
||||||
|
sudo apt -f install password-store restic
|
||||||
|
```
|
||||||
|
|
||||||
|
Insira a senha para backup no repositório de senhas, por exemplo:
|
||||||
|
|
||||||
|
```fish
|
||||||
|
pass insert backups/restic
|
||||||
|
```
|
||||||
|
|
||||||
|
**Nota importante:** Utilize uma senha que você se lembre, para que seja
|
||||||
|
possível recuperar os dados a partir de uma cópia caso você não tenha mais
|
||||||
|
acesso ao seu chaveiro. Eu uso a mesma senha de criptografia de disco do
|
||||||
|
dispositivo que estou fazendo backup. Recomendo o uso do método
|
||||||
|
[Diceware](https://diceware.dmuth.org/) através de sua [implementação em
|
||||||
|
Python](https://github.com/ulif/diceware/) que está no
|
||||||
|
[Debian](https://packages.debian.org/stable/diceware).
|
||||||
|
|
||||||
|
Por fim, tenha certeza de que seu `gpg-agent` está configurado de forma que vai
|
||||||
|
te pedir a senha da chave criptográfica.
|
||||||
|
|
||||||
|
## Configuração do Restic como um serviço do Systemd
|
||||||
|
|
||||||
|
Inicie o repositório Restic:
|
||||||
|
|
||||||
|
```fish
|
||||||
|
export RESTIC_PASSWORD_COMMAND='pass backups/restic'
|
||||||
|
export RESTIC_REPOSITORY=/caminho/para/o/repositorio/restic
|
||||||
|
restic init
|
||||||
|
```
|
||||||
|
|
||||||
|
Determine as exceções no arquivo `~/.backup-excludes.txt`:
|
||||||
|
|
||||||
|
```
|
||||||
|
/home/user/.cache
|
||||||
|
/home/user/.config/chromium
|
||||||
|
/home/user/.local/share/Trash
|
||||||
|
/home/user/.local/share/containers
|
||||||
|
/home/user/.mozilla
|
||||||
|
/home/user/Downloads
|
||||||
|
/home/user/tmp
|
||||||
|
```
|
||||||
|
|
||||||
|
Crie um arquivo de configuração de serviço do Systemd em `~/.config/systemd/user/backup.service` com o seguinte conteúdo:
|
||||||
|
|
||||||
|
```ini
|
||||||
|
[Unit]
|
||||||
|
Description=Backup my home directory
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
Environment=RESTIC_PASSWORD_COMMAND='pass backups/restic'
|
||||||
|
Environment=RESTIC_REPOSITORY=/caminho/para/o/repositorio/restic
|
||||||
|
ExecStart=restic -q backup --exclude-caches --exclude-file=/home/user/.backup-excludes.txt /home/user
|
||||||
|
ExecStartPost=restic -q forget --keep-within-hourly=1d --keep-hourly=24 --keep-daily=7 --keep-weekly=4 --keep-monthly=6
|
||||||
|
ExecStartPost=restic -q prune
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
```
|
||||||
|
|
||||||
|
Crie um timer para executar o serviço em `~/.config/systemd/user/backup.timer`:
|
||||||
|
|
||||||
|
```ini
|
||||||
|
[Unit]
|
||||||
|
Description=Periodic backup data using restic
|
||||||
|
|
||||||
|
[Timer]
|
||||||
|
Unit=backup.service
|
||||||
|
OnCalendar=*:0
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=timers.target
|
||||||
|
```
|
||||||
|
|
||||||
|
Configure o Systemd de acordo:
|
||||||
|
|
||||||
|
```fish
|
||||||
|
systemctl --user daemon-reload
|
||||||
|
systemctl --user enable backup.timer
|
||||||
|
systemctl --user start backup.timer
|
||||||
|
```
|
|
@ -1,5 +1,6 @@
|
||||||
---
|
---
|
||||||
title: "Transição de chave OpenPGP"
|
title: "Transição de chave OpenPGP"
|
||||||
|
slug: 2023-12-30-transicao-de-chave-openpgp
|
||||||
type: posts
|
type: posts
|
||||||
draft: true
|
draft: true
|
||||||
categories:
|
categories:
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
start:
|
||||||
|
other: Início
|
||||||
|
categories:
|
||||||
|
other: Categorias
|
|
@ -1,2 +0,0 @@
|
||||||
start:
|
|
||||||
other: Início
|
|
|
@ -1,7 +1,7 @@
|
||||||
<header>
|
<header>
|
||||||
{{ strings.Repeat ( .Site.Title | len | add 6 ) "=" }}<br>
|
,{{ strings.Repeat ( .Site.Title | len | add 4 ) "-" }}.<br>
|
||||||
== <a href="{{ .Site.BaseURL }}">{{ .Site.Title }}</a> ==<br>
|
| <a href="{{ .Site.BaseURL }}">{{ .Site.Title }}</a> |<br>
|
||||||
{{ strings.Repeat ( .Site.Title | len | add 6 ) "=" }}
|
`{{ strings.Repeat ( .Site.Title | len | add 4 ) "-" }}'
|
||||||
<div style="float: right;">{{ .Site.Params.subtitle }}</div><br>
|
<div style="float: right;">{{ .Site.Params.subtitle }}</div><br>
|
||||||
<p>
|
<p>
|
||||||
<nav>
|
<nav>
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
<div>
|
||||||
|
{{ if .Paginator.HasPrev }}
|
||||||
|
<a href="{{ .Paginator.Prev.URL }}">Página anterior</a>
|
||||||
|
{{ end }}
|
||||||
|
{{ .Paginator.PageNumber }} de {{ .Paginator.TotalPages }}
|
||||||
|
{{ if .Paginator.HasNext }}
|
||||||
|
<a href="{{ .Paginator.Next.URL }}">Próxima página</a>
|
||||||
|
{{ end }}
|
||||||
|
</div>
|
|
@ -0,0 +1,4 @@
|
||||||
|
:root { --bgcolor: white; --fontcolor: #444; --linkcolor: #000; --visitedcolor: #000; --precolor: #fff; --prebgcolor: #000;}
|
||||||
|
p > code{color: var(--precolor); background: #272822; padding:2px}
|
||||||
|
code{color: var(--precolor); background: #272822; padding:2px}
|
||||||
|
pre{color: var(--precolor); background: #272822; padding:24px; overflow-x: auto}
|
Loading…
Reference in New Issue