rsync



Sitemap | Profile | タグ一覧
最近の更新
ドライランのありがたみを改めて知る
2024/04/04
伊豆半島
2024/03/31
お出かけチェックリスト
2024/03/29
Ruby
2024/03/27
Kubernetes
2024/03/22
音楽データをDisplayAudioで聞く
2024/03/09
Redmine
2024/02/05
git
2024/02/02
経済
2024/01/08
どうする家康
2023/12/17
MX-Linux
2023/11/06
國體関連学-休学のご連絡
2023/08/13
Debian
2023/08/02
CentOS
2023/06/13
Dell-XPS13
2023/05/23
ベルト
2023/05/18
SourceForge
2023/04/17
確定申告
2023/02/19
さらば「まぐまぐ」
2023/01/09
風猷縄学
2022/11/23


rsync を使って家サーバのバックアップを行っている。

[-] 1. スペック

+-----------+  push  +----------+
| bkpマシン |  <-->  | 家サーバ |
+-----------+  pull  +----------+
  1. 1日1回のバックアップ
  2. ネット経由で disk to disk でバックアップ
  3. --delete オプションを使う。マスターで削除されたファイルは1日後には バックアップからも消される。 消さないオプションも検討したが、ゴミが残るので止めた。 ファイルを消してあせった場合も1日内であれば復旧できる、ということ。
  4. rsync なので、自動的に差分バックアップ、となる。
  5. rsync + ssh なので、ネット間は暗号化される。
  6. (2013/03/05 追加事項)
    1. bkpマシンの /etc, /var/www, /home のバックアップをとっておきたい。 その先として、家サーバを対象とする。
      • 当然ながら、家サーバのバックアップ先は本来のバックアップ元からは外しておく。 こうしないと、バックアップのバックアップのバックアップ...となって、 ループして無限に増えていくから。
    2. これは、rsync の push で行う。push でも同様に module 指定が使えるため、 sshd PermitRootLogin forced-commands-only でセキュリティを確保しつつ root権限で file を push できる。 なお、module 指定で push するためには、read only = false という 指定が必要。詳細は rsyncd.conf(5) を参照のこと。
    3. なお、bkpマシン:/etc のバックアップに rsync を用いたけど、 /etc だけかつ /etc は git で履歴管理している、という場合、 git push でバックアップする、ということもできる。 実際に僕のメインマシン Thinkpad はそうしている。git の "リモートにプッシュすることでバックアップとする" を参照。

[-] 1.1. 制限

  1. 履歴は持たない。 例えば、3日分のバックアップを持つ、というようなことはしない。
  2. リアルタイムバックアップではない。 リアルタイムバックアップは、論理削除に対して弱いし、 個人用途にそこまでの性能は不要と考えた。
  3. 非RAID。バックアップと RAID は独立した概念なのでここで RAID のことを 述べるのはカテゴリ違いなのだけど、ファイルの保全という大枠から 述べておきたい。 個人用途では1日1回の rsync バックアップで十分と判断して RAID は組んでいない。

[-] 2. セキュリティの強化

従来、sshd の設定を 'PermitRootLogin: yes' とし、かつ IPで制約を付けた上でルートパスワード無しで行っていたが、 これではセキュリティが弱いと思っていたので、 指定コマンドのみを許すオプションを使って

ルート権限でパスワード無しで、バックアップのみリモートから実行可能

とすることにする。 けっこう手間だったので、記録しておく。 結論から言うと、

PermitRootLogin forced-commands-only + rsyncd

という組み合わせで行くことにした。その他の選択肢をなぜ止めたのかについても 記す。

(2013/03/06 追記) この場合、バックアップ先 rsyncd 側マシンの /etc/ssh/sshd_config の UsePAM は yes である必要がある。

[-] 2.1. PermitRootLogin forced-commands-only + no-rsyncd

sshd には特定のコマンドのみ許可するオプション

PermitRootLogin forced-commands-only

がある。ググってみても、この方式 + rsync でバックアップする、 という記事が多かった (一番参考になったのは http://www2s.biglobe.ne.jp/~nuts/labo/inti/cron-rsync-ssh-nodaemon.html )。

しかし、実際やってみると以下の制限があることに気づく:

  1. rsync -v で remote側 rsync コマンドを調べないといけない。
    • undocumented なコマンドオプションを知る必要がある。
      Ubuntu-10.04 の rsync 3.0.7 では、以下となった:
       rsync --server --sender -logDtprze.iLsf . /home
    • 通常使わないオプションを指定する必要がある(上記例の --server, --sender)
    • 謎のオプション -logDtprze.iLsf を指定する必要がある。
  2. /root/.ssh/authorized_keys に複数コマンドを指定できない。
    • 3つのディレクトリ(/home, /var, /etc)を3回の rsync でバックアップすること を想定しているが、このために各 SRC ごとの rsync を実行する、ということが できない。/root/.ssh/authorized_keys で指定したコマンドだけしか 実行できないのだ。
    • 回避策としては、3つのコマンドのために3つの鍵を作る、という案を考えた。 が、ディレクトリが増える度にこの作業をするのは手間だ。

ということでこの案は止めた。

[-] 2.2. PermitRootLogin forced-commands-only + rsyncd

rsync の daemon モードを調べてみると、今回の目的には コマンドは以下の1つで済むようだ:

rsync --server --daemon .

他の引数(SRC等)は、自由にクライアントから指定できる。

ただし、--exclude オプションで渡したパスは以下の用に異なっている:

remote shell モード:ルートからの相対パス(var/, etc/, home/ 等)
daemon モード:モジュール名で指定した path からの相対パス

そこで、従来、backup3.conf で指定した exclude は /etc/rsyncd.conf で定義することとする。

なお、daemon モードと言っても、常時 rsyncd を走らせる必要はない。 rsync(1) の USING RSYNC-DAEMON FEATURES VIA A REMOTE-SHELL CONNECTION という節にその方法が書かれている。

[-] 2.3. PermitRootLogin yes + host制限

同一ホストからは任意のルート権限によるコマンドが実行できてしまうので、 自由度が高すぎる。 まあ、そのホストの管理者に秘密鍵を盗まれない限りは大丈夫なのだが…。






Generated by juli 2.3.2