OSの設定管理をGitで行う / Rocky Linux9.4 on さくらのVPS
篠原 隆司
アフィリエイト広告を利用しています
このページの内容が役に立ったら X (旧twitter) でフォローして頂けると励みになります
挨拶や報告は無しで大丈夫です
さくらのVPSにRockyLinux9.4をインストールした覚書です。
今回は、サーバの各種設定、主にroot権限で行う内容についてGitで管理できるようにしていきたいと思います。
ここでは、Postfix 関連のファイルを中心に説明を行います。
ほかにも対象に含めたいファイルがあれば、ディレクトリを追加していく形で簡単に対象範囲を広げることができます。
OS全体を対象にすることはできますが、難易度があがるのでオススメは「root権限として触るファイルまで」を対象範囲とすると良いかなと思います。
なお本番環境で利用される場合はここにある内容だけを鵜呑みにせずセキュリティ専門家に相談されることをお勧めします。
環境
実施日 | 2024-05-13 |
サーバ | さくらのVPS 2G |
OS | Rocky Linux9.4 |
cat /etc/redhat-release
Rocky Linux release 9.4 (Blue Onyx)
Rocky LinuxをGit管理する概要
ざっくりと次のような流れとなります。
~セットアップ~
- rsyncの準備
- /etc/postfix のファイルをダウンロード
- ローカル環境でGitの準備
~変更差分の確認 ~
- rsync でファイルを取得
- DFツールで差分を比較
~設定を更新~
- ファイルを編集
- コミット
- rsync で同期
セットアップ / rsyncの準備
今回は、サーバーとのファイルのやりとりは rsync で行うこととします。
Git管理を行うとしても自分以外にファイル編集の権限がある人がいるとサーバー上のファイルとGitに差分がないことを保証するのは難しくなります。
もしかすると人間ではなく、他のシステムによって書き換えられることも考えられます。
ということで、設定変更をするときは事前に差分が発生していないか確認しておくことが望ましいです。
ということで「変更差分の確認」をするためにサーバー上のファイルを一式取得してくるわけですが、ということはそのままセットアップの流れに組み込んでしまえるよね、ということでここでこう書いています。
サーバーからローカルへ
次のような流れを完成形とします
- batファイルをダブルクリック
- rsyncでサーバーからローカルに同期
rsyncのインストール
rsyncをインストールしていない場合は下記リンク先を参考にインストールを済ませてください。
ファイル同期にrsyncをインストール / Rocky Linux9.4 on さくらのVPS
sudo ができるユーザーの設定
rsync で接続するユーザーは su または sudo ができるようにしておきます。
suを制限するwheelユーザー / Rocky Linux9.4 on さくらのVPS
visudo
末尾に下記を追加します。
説明のサンプルも兼ねて「rsyncできる」「postfix を reload できる」の2つの役割を与えることにします。
末尾をバックスラッシュでつなぐことで改行してつなぐことができます。
ユーザー名 LOCAL=(ALL) NOPASSWD: \
/usr/bin/rsync, \
/usr/sbin/postfix reload
追加設定
visudo を初めて使う場合は下記ページを参考に Host_Alias と Defaults の設定を行っておきます。
バックアップ設定 / Rocky Linux9.4 on さくらのVPSHost_Alias LOCAL = x.x.x.x 自身のIPアドレス
# スクリプト実行から sudo できるユーザーを制限する
Defaults requiretty
Defaults:backup !requiretty
Defaults:「許可するユーザー」 !requiretty
サーバ側に sudo な rsync を作成する
rsync コマンドの -e オプションに "sudo rsync" を指定する方法は推奨されない古いやり方です。
ここでは、sudo 専用の rsync を用意します。
ls -la /usr/local/bin/
vi /usr/local/bin/sudo_rsync.sh
#!/bin/bash
# sudo_rsync.sh
sudo /usr/bin/rsync "$@"
chmod +x /usr/local/bin/sudo_rsync.sh
設定スクリプトの作成
この先、目的に応じてスクリプトファイルを作成していくのですが、接続先IPアドレスや接続ユーザー名などをそれぞれのファイルに記述していくとカオスな状況になります。
また、Git管理という面からも好ましくありません。
ということで、設定を1つにまとめます。
上図の config.cmd / config.default.cmd を作成します。
まずは config.default.cmd からです。
下記の内容をそのままコピペして内容を変えずに保存してください。
@ECHO OFF
SET SSH_HOST=ユーザー名@000.000.000.000
SET SSH_PORT=22
SET SSH_KEY_PATH=C:\path\to\your\private_key.pem
SET PATH_LOCAL_ROOT=/cygdrive/c/path/to/your/server
次に config.default.cmd をコピーして config.cmd を作成してください。
config.cmd は .gitignore でGit管理から除外しておきます。
config.default.cmd はGit管理に含めます。
config.default.cmd に接続情報などを書かないように注意してください。
そういった重要情報はGitに含めるべきではありません。
同期スクリプトの作成
サーバーから取り込むcmdファイルを作成します
scripts/server_to_local/execute.cmd のような感じでテキストファイルを作成します。
cmdファイルの中身は次のようにします。
ここで通常と異なる指定方法として、最終行にある「--rsync-path」でスクリプトを指定してやります。
/etc/postfix のファイルをダウンロード
先ほど作成した▼をダブルクリックして実行します。
scripts/server_to_local/execute.cmd
実際に実行する前には、ドライランで確認するなど充分に確認してから実行することをお勧めします。
同期に成功すると次のようにファイルが作成されます。
Gitにコミット
まずは取ってきたばかりのキレイな状態でGitに登録してコミットしておきます。
ここまでで準備は完了です。
Postfixの設定変更とアップロード
ファイルの編集はいつもどおりです。
そして編集後はGitへコミットしてプッシュまではいつも通りです。
ちなみにここでのプッシュ先は別途用意しているGitサーバ(githubなど)です。
元のサーバへは rsync を利用して更新します。
変更差分の取り込み
サーバにアップロードする前にまずサーバ側のファイルが書き換わっていないか確認しておきます。
「サーバーからローカル」側のrsyncスクリプトを実行します。
差分が発生していれば良いように対応します。
rsyncでアップロードするスクリプトの作成
基本的にはダウンロードの反対がアップロードです。
SET PATH_SOURCE と PATH_DIST を逆転するだけです。
Postfix をリロードするスクリプトの作成
rsyncで同期しただけではファイルは書き換わっていますが、動作は変わりません。
SSHでサーバにログインしてリロードしても良いのですがここまで来てそれはないですね。
postfixをreloadするだけのスクリプトを作成します。
@ECHO OFF
SETLOCAL
SET PATH=C:\cygwin64\bin;%PATH%
CALL ..\config.cmd
echo Reloading Postfix on the remote server...
ssh -i %SSH_KEY_PATH% -p %SSH_PORT% %SSH_HOST% "sudo /usr/sbin/postfix reload"
echo Postfix reload command has been sent.
pause
これでOKです。
最初の visudo の設定のところで、postfix の reload を追加していたのはこのためです。
他の設定を加えるとき
本ページの次の個所をピックアップしていけばOKです。
- visudo で必要なコマンドを追加
- rsync の上り下りに対象ファイルのパスを追加
まとめ
ここまでで、postsfixの設定をGitで管理し、rsyncによる取り込みと更新ができるようになりました。
ディレクトリ構成を見ていただくと「server」ディレクトリをルートとしてサーバの構成がそのまま入ってくる形になります。
ここにGIt管理対象としたいファイルが来るように、rsync のパスを調整してやればOKです。