正しいバックアップ方法

正しいバックアップ方法

定期的にホームネットワークのRaspberry Piに自動的にバックアップしたいと思います。自宅でバックアップするだけで十分です。

私が「自動バックアップを実行する方法」について読んだすべてのガイドでは、私のPyにパスワードのないSSHキーを入れるように指示されています。自分のコンピュータにアクセスできる人は誰でも自分のバックアップにアクセスできるので、これをしたくありません。これはバックアップの目的の1つを完全に排除します。

現在のソリューションは、パスワードで保護されたSSHキーとrsyncスクリプトです。動作に時間がかかりましたが、今すぐホームネットワークにログインするとすぐにパスワードの入力を求められ、バックアップされます。

restic今、ある種のバージョンのバックアップが必要なので、使いたいです。他のデバイスもバックアップしたいです。 Resticガイドは、再びパスワードのないSSHキーを使用するように言いました。

今私は反対の考えを持っています。つまり、私の(オフライン)piはパスワードなしで自分のラップトップにSSHでアクセスできます(しかし使用は制限されていますresric)。スクリプトを使用していくつかのsystemd.timerを実行して自分のラップトップにアクセスできることを確認し、その場合はバックアップを開始できます。

しかし、これは深刻に見え、これが一般的なシナリオであると確信しています。しかし、ガイドが見つかりません。

一般的な方向を教えてもらえますか?私がしたいことについてもっと知るために、いくつかの用語も役に立ちます!

答え1

組み合わせると、バックアップしたいマシンから接続できるREST APIを提供するサービスを使用して、バックアップサーバーにサービスを設定resticできます。rclone通常REST APIを使用するrcloneresticresticたくさんresticSFTP経由で使用するよりも高速です。

rclone serve restic --helpSSLの使用方法やhtpasswd認証方法など、これについてはよく文書化されています。この文書を注意深く読んでください。。バックアップサーバーがパブリックサーバーであるか(そうではありません)、個人以外の設定のためにバックアップサーバーを実行している場合は、どのような方法でも個々のユーザーを認証してセキュリティを維持する必要があります。

ローカルネットワークの外部で使用できるようにするには、localhostバックアップサーバーとして使用されるホストに少なくとも次の設定が必要です。

rclone serve restic --addr :8080 /var/backup/restic

/var/backup/resticリポジトリを保存するパスは次のとおりですrestic(上記のコマンドを実行するユーザーには、そのパスに対する書き込み権限が必要なため、専用のサービスユーザーを作成する必要があります)。--addr :8080「利用可能なすべてのインターフェイスでポート8080にバインド」を意味します(デフォルトではrcloneバインディングのみlocalhost:8080)。

その後、次のコマンドを使用してここに接続できます(これにより、resticリポジトリが初期化され、自分のホームディレクトリの最初のスナップショットが作成されます)。

restic -r rest:http://backupsrv:8080/testrepo init
restic -r rest:http://backupsrv:8080/testrepo backup "$HOME"

resticここでは、名前付きリポジトリを作成して使用しようとすると、testrepoバックアップサーバーにアクセスできると仮定しますbackupsrv。ホスト名を正しい名前またはIP番号に変更する必要があります。

これにより、リポジトリのパスワードを求めるプロンプトがインタラクティブに表示されますが、通常どおり環境変数にパスワードを渡すことができます(代わりにリポジトリを渡すことができるRESTIC_PASSWORDように)。resticRESTIC_REPOSITORY-r ...


個人用Synology NASで次のDockerコンテナ(ファイルdocker-compose.yml)を実行します。

version: '3'
services:
  rclone:
    image: rclone/rclone:latest
    container_name: rclone
    hostname: diskstation.local
    ports:
      - 18080:8080
    restart: unless-stopped
    command: ["serve","restic","/backup"]
    environment:
      - RCLONE_ADDR=0.0.0.0:8080
      - RCLONE_STATS=1h
      - RCLONE_VERBOSE=1

    volumes:
      - /volume1/Restic/backup:/backup

NASのポート18080でREST APIを提供し、resticここにバックアップを保存できます/volume1/Restic/backup(コンテナのバインドマウントを介して)。rclone隔離されたLAN(ファイアウォールおよびキャリアグレードNATの背後)にあるプライベートNASであるため、セットアップセキュリティは非常に低いです。

答え2

特定のタスクに制限されるパスワードのないキーを持つのがアイデアです。

たとえば、Restic(SFTP経由でバックアップを保存する)を使用するか、純粋なrsyncを使用すると、バックアップサーバーにバックアップディスクのBtrfs / ZFSスナップショットを保持させることができ、SSHキーを使用してroot権限なしでアカウントにアクセスできます。あります。スナップショットは削除できません。)誰かがキーを使用してResticリポジトリをリモートで削除すると、最後のスナップショットから復元するのに数秒かかります。その後、通常はラップトップの回復が続行されます。

SSHを介して通信する独自​​の「サーバー」を持つBorg Backupなどのプログラムでは、特定の強制リモートコマンドにのみキーを制限することで、SFTPやシェルではなくBorgサーバーを起動できます。 Borgにはforceコマンドで使用できる「追加専用」オプションがあるため、キーは新しいバックアップをアップロードするためにのみ使用でき、古いバックアップは削除できません。

ただし、おそらく誰かが1)ラップトップの暗号化されていないファイルにアクセスでき、2)ホームネットワークに接続している場合、より大きな問題が発生する可能性があります。

答え3

私が「自動バックアップを実行する方法」について読んだすべてのガイドでは、私のPyにパスワードのないSSHキーを入れるように指示されています。自分のコンピュータにアクセスできる人は誰でも自分のバックアップにアクセスできるので、これをしたくありません。これはバックアップの目的の1つを完全に排除します。

最初のステートメントは正確ですが、これについての私の理解を説明しようとしています。 (そして最小権限の原則もあります。)

  1. バックアップしたいコンピュータがあります。
  2. 誰かが誤ってコンピュータにアクセスしてバックアップを破壊できないようにバックアップを保護したいと思います。

ここで解決策は、PCではなくバックアップサーバー(Pi)でバックアップを駆動することです。 (Linux / Macクライアント)または(Windowsクライアント)rsyncと組み合わせて使用​​する場合は、PiがPCにアクセスできるようにスキームを設定してください。 (PiにパスワードなしでアクセスするためにPCは必要ありません。)sshrsyncd

一般的なアプローチは、PiでcronPCを頻繁にバックアップしようとします(たとえば、4時間ごと)が、成功したら翌日まで再試行しないことです。このスクリプトはテストされていませんが、ソリューションのスケルトンを提供する必要があります。timeout 4hフルバックアップにはこれが十分であることに注意することが重要です。

basedir=/data/backup_dir                      # Backups target directory
my_pc=192.168.130.33                          # Your PC name or IP address

today=$(date +'%Y-%m-%d')                     # Today
stamp=$(cat "$basedir/.stamp" 2>/dev/null)    # Date of last backup

if [ "$today" = "$stamp" ]
then
    # Last backup was today
    exit 0
fi

if ! ping -q -c1 "$my_pc"
then
    # PC not responding to ping
    exit 1
fi

# Backup your PC
if timeout 4h rsync -a "$my_pc":/…/ "$basedir/$today"
then
    # Success
    echo "$today" >"$basedir/.stamp"
    exit 0
fi

関連情報