etckeeperによる/etc設定管理:全システム管理者のためのセーフティネット

Linux tutorial - IT technology blog
Linux tutorial - IT technology blog

「うっかりミス」という名の午前2時の悪夢

あるあるなシナリオ:深夜、Ubuntu 22.04サーバーのセキュリティパッチを当てている最中、意識が朦朧として/etc/ssh/sshd_configを数行書き間違えてしまったとします。ファイルを保存し、サービスを再起動した瞬間……SSH接続が切れ、二度とログインできなくなりました。

どの行を消したのか、どこに余計なスペースを入れたのか思い出せず、心拍数が上がります。もしこれがアプリケーションのコードなら、git checkoutコマンド一発で解決できるはず。では、なぜ/etcディレクトリ全体にGitを適用しないのでしょうか? それこそがetckeeperが存在する理由です。

私自身、以前バックアップを忘れ、Network Bondingの設定をゼロからやり直すのに4時間以上費やしたことがあります。その一件以来、etckeeperはステージングから本番環境まで、あらゆる新規サーバーに最初にインストールするツールとなりました。

2分で完了するクイック導入

惨事が起きるのを待つ必要はありません。このツールは非常に軽量で、システムパフォーマンスへの影響もありません。

ステップ1:インストール

Ubuntu/Debianの場合:

sudo apt update && sudo apt install etckeeper git -y

RHEL/CentOS/AlmaLinuxの場合:

sudo yum install epel-release -y
sudo yum install etckeeper git -y

ステップ2:初期化

通常、etckeeperはインストール後に自動で設定されますが、念のため以下のコマンドを実行して準備を整えることをお勧めします。

sudo etckeeper init
sudo etckeeper commit "初期化:システム初期設定の保存"

これで、/etc内のすべての変更はGitの管理下に置かれました。

なぜ素のGitではなくetckeeperを使うのか?

「etckeeperなんて不要だ、/etcgit initすればいいじゃないか」と思うかもしれません。しかし、その方法には大きな技術的リスクが伴います。

  1. メタデータ(所有権)の喪失: Gitはデフォルトでユーザー/グループ情報(UID/GID)を保存しません。もし素のGitで/etc/shadowを復元した場合、パーミッションが狂い、システムがパスワードファイルを読み込めずログイン不能になる恐れがあります。etckeeperはメタデータを.etckeeperファイルに保存することでこの問題を解決します。
  2. 空のディレクトリ: Linuxの動作には/etc内に空のディレクトリが必要な場合がありますが、Gitはこれらを無視します。etckeeperはこれらの構造を確実に保持します。
  3. 完全な自動化: これが最大のメリットです。apt installyum updateを実行するたびに、etckeeperはパッケージによって作成された設定変更を自動的にコミットします。どのソフトウェアがシステムのどのファイルを「いじった」のかを正確に把握できます。

実践的な管理と復元

変更履歴の確認

出社早々、Nginxが502エラーを吐いていることに気づきました。昨日誰かが何かを変更したのではないかと疑ったら、すぐに確認しましょう。

cd /etc
sudo etckeeper vcs log

このコマンドは、誰が、いつ、何を変更したのかを詳細にリストアップします。

変更箇所の比較 (Diff)

10TBの新しいHDDをマウントするために/etc/fstabを編集したけれど、再起動するのが怖い? 直近の安定版との差分を確認しましょう。

sudo etckeeper vcs diff fstab

即時復元

重要な設定ファイルを誤って削除してしまっても、慌てる必要はありません。以下のコマンドを使います。

# 特定のファイルを以前の状態に戻す
sudo etckeeper vcs checkout fstab

# または /etc ディレクトリ全体を特定のコミットIDの時点まで巻き戻す
sudo etckeeper vcs checkout [commit_id] .

応用:リモートリポジトリへのプッシュ

ローカルに履歴を残すだけでは不十分です。サーバーのディスクが故障すれば、すべてを失います。解決策は、GitLabやGitHubのプライベートリポジトリに/etcをプッシュすることです。注意: /etcにはパスワードのハッシュや秘密鍵が含まれるため、絶対に公開(Public)設定にしないでください。

cd /etc
sudo git remote add origin [email protected]:user/my-server-etc.git
sudo git push origin master

ハードウェア障害が発生しても、新しいマシンを立てて古い設定を取得し比較するだけで済みます。これにより、環境の再構築時間を90%削減できます。

実践的なTips

  • .gitignoreの最適化: ld.so.cacheのように頻繁に変更されるが履歴としての価値が低いファイルは、/etc/.gitignoreに追加してコミットログが汚れるのを防ぎましょう。
  • メール通知設定: /etc/etckeeper/etckeeper.confを設定することで、自動コミットが発生するたびにメール通知を送るようにできます。
  • 頼りすぎないこと: etckeeperは強力ですが、重要な変更を終えた後は、明確なメッセージを添えて手動でcommitすることを忘れないでください。システムの自動コミットだけに頼ってはいけません。

結びに代えて

以前の職場では、50台以上のサーバー管理は地獄のような作業でした。etckeeperを導入してからは、すべての変更が透明化されました。これは単なるバージョン管理ツールではなく、あなた自身の「職業上の保険」なのです。

インストールにはわずか60秒しかかかりませんが、絶望的なデバッグ作業から何時間も救ってくれる可能性があります。テストサーバーにインストールして、わざとファイルを壊し、checkoutで元の完璧な状態に戻る安心感をぜひ体験してみてください。

Share: